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_1
SELECT c1, c2, FROM table_2;
假设要将tasks
表复制到tasks_bak
表。
首先,通过复制tasks表的结构,创建一个名为tasks_bak的新表,如下所示: INSERT INTO tasks_bak SELECT * FROM tasks; 第二步,使用以下INSERT语句将tasks表中的数据插入tasks_bak表: INSERT INTO tasks_bak SELECT * 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