Insert
语句可将一行或多行插入到表中。
INSERT语法: INSERT INTO table(column1,column2...)VALUES (value1,value2,...);首先,在INSERT INTO子句之后,在括号内指定表名和逗号分隔列的列表。然后,将括号内的相应列的逗号分隔值放在VALUES关键字之后。在执行插入语句前,需要具有执行INSERT语句的INSERT权限
INSERT语法实际应用:
tasts表:USE testdb;CREATE TABLE IF NOT EXISTS tasks ( task_id INT(11) AUTO_INCREMENT, subject VARCHAR(45) DEFAULT NULL, start_date DATE DEFAULT NULL, end_date DATE DEFAULT NULL, description VARCHAR(200) DEFAULT NULL, PRIMARY KEY (task_id))ENGINE=InnoDB DEFAULT CHARSET=utf8;插入:INSERT INTO tasks(subject,start_date,end_date,description)VALUES('Learn MySQL INSERT','2017-07-21','2017-07-22','Start learning..'); 插入多行:
INSERT INTO tasks(subject,start_date,end_date,description) VALUES ('任务-1','2017-01-01','2017-01-02','Description 1'), ('任务-2','2017-01-01','2017-01-02','Description 2'), ('任务-3','2017-01-01','2017-01-02','Description 3');
INSERT与SELECT混合应用
MySQL中,可以使用SELECT语句返回的列和值来填充INSERT
语句的值
INSERT INTO table_1SELECT c1, c2, FROM table_2;
假设要将tasks
表复制到tasks_bak
表。
首先,通过复制tasks表的结构,创建一个名为tasks_bak的新表,如下所示:INSERT INTO tasks_bakSELECT * FROM tasks;第二步,使用以下INSERT语句将tasks表中的数据插入tasks_bak表:INSERT INTO tasks_bakSELECT * FROM tasks;第三步,检查tasks_bak表中的数据,看看是否真正从tasks表复制完成了。mysql> select * from tasks;
INSERT与On Duplicate Key Update
应用On Duplicate Key Update:INSERT INTO tasks(task_id,subject,start_date,end_date,description)VALUES (4,'Test ON DUPLICATE KEY UPDATE','2017-01-01','2017-01-02','Next Priority')ON DUPLICATE KEY UPDATE task_id = task_id + 1, subject = 'Test ON DUPLICATE KEY UPDATE';应用Update函数:UPDATE tasks SET task_id = task_id + 1, subject = 'Test ON DUPLICATE KEY UPDATE'WHERE task_id = 4;
INSERT IGNORE语句
功能介绍:
INSERT语句向表中添加一些行数据并且在处理期间发生错误时,INSERT
语句将被中止,并返回错误消息。因此,可能不会向表中没有插入任何行。
但是,如果使用INSERT INGORE
语句,则会忽略导致错误的行,并将其余行插入到表中。
INSERT IGNORE语法:INSERT IGNORE INTO table(column_list)VALUES( value_list), ( value_list), ...
STRICT语句
当STRICT
模式打开时,如果您尝试将无效值插入到表中,MySQL将返回错误并中止INSERT
语句。
创建一个名为tokens的新表:USE yiibaidb;CREATE TABLE IF NOT EXISTS tokens ( s VARCHAR(6));将长度为7的字符串插入到tokens表中INSERT INTO tokens VALUES('abcdefg');STRICT模式打开,MySQL发出以下错误mysql> INSERT INTO tokens VALUES('abcdefg');1406 - Data too long for column 's' at row 1