一、 INSERT INTO
第一种方法:
INSERT INTO table_name (field1, field2,...fieldN) VALUES (valueA1,valueA2,...valueAN),(valueB1,valueB2,...valueBN),(valueC1,valueC2,...valueCN)......;
(1)列出列名
insert into exam_record (uid,exam_id,start_time,submit_time,score)
values (1001,9001,'2021-09-01 22:11:12', '2021-09-01 22:11:12'+ INTERVAL 50 minute,90),
(1002,9002,'2021-09-04 07:01:02',null,null);
(2)按原表中的顺序插入值,空值填null
INSERT INTO exam_record
VALUES (null , 1001, 9001, '2021-09-01 22:11:12', '2021-09-01 22:11:12'+ INTERVAL 50 minute, 90),
(null , 1002, 9002, '2021-09-04 07:01:02', null, null);
备注:Mysql_interval函数与关键字_lcx1252267029的博客-CSDN博客
第二种方法:
INSERT INTO table_name (field1, field2,...fieldN) SELECT (field1, field2,...fieldN) FROM table_name WHERE ……;
(1)列出列名
INSERT INTO exam_record_before_2021 (uid, exam_id, start_time, submit_time, score)
SELECT uid, exam_id, start_time, submit_time, score
FROM exam_record
WHERE submit_time < '2021-01-01';
(2)用null列名 代替 自增列
INSERT INTO exam_record_before_2021
SELECT null,uid,exam_id,start_time,submit_time,score
FROM exam_record
WHERE year(submit_time) < 2021
注:select null 返回的列名和值为NULL
第三种方法:
INSERT INTO table_name SET field1=valueA1, field2=valueA2,field3=valueA3...
二、REPLACE INTO
replace into 也是有三种形式:
1. replace into tbl_name(col_name, ...) values(...)
2. replace into tbl_name(col_name, ...) select ...
3. replace into tbl_name set col_name=value, ...
第一种形式类似于insert into的用法, 但是replace into的特殊之处在于当使用replace into插入数据时,会先判断表中是否有重复元素 如果有重复元素,先将重复元素删除,然后插入新的元素 如果没有则直接插入 replace into语句所作用的表一定有主键
第二种replace select的用法也类似于insert select,这两种用法并不一定要求列名匹配,事实上,MYSQL甚至不关心select返回的列名,它需要的是列的位置。例如,replace into tb1( name, title, mood) select rname, rtitle, rmood from tb2;?这个例子使用replace into从?tb2中将所有数据导入tb1中。
第三种replace set用法类似于update set用法,使用一个例如“SET col_name = col_name + 1”的赋值,则对位于右侧的列名称的引用会被作为DEFAULT(col_name)处理。因此,该赋值相当于SET col_name = DEFAULT(col_name) + 1。
前两种形式用的多些。其中 “into” 关键字可以省略,不过最好加上 “into”,这样意思更加直观。另外,对于那些没有给予值的列,MySQL 将自动为这些列赋上默认值。