语法
INSERT [INTO] table_name[(column[,column]...)] VALUES (valuse_list)[,(value_liat)]...
value_list :value[,value]
操作使用的表数据
mysql> CREATE TABLE students (
-> id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
-> sn INT NOT NULL UNIQUE COMMENT '学号',
-> name VARCHAR(20) NOT NULL,
-> qq VARCHAR(20)
-> );
一行数据+全列数据
--在表中插入俩行数据
mysql> insert into students values (10,1000,"貂蝉",NULL);
Query OK, 1 row affected (0.14 sec)
mysql> insert into students values (11,1001," 李白","66666");
Query OK, 1 row affected (0.03 sec)
查看插入的数据:
多行数据+指定列数据
---这里的valuse_list必须和column的数量和顺序一致。
mysql> insert into students(sn,name) values (1002,"庄周"),(1003,"蔡文姬");
Query OK, 2 rows affected (0.09 sec)
Records: 2 Duplicates: 0 Warnings: 0
查看插入的数据:
插入否则更新
插入与主键或唯一键对应的相同的值,会产生冲突,导致插入失败,例如:
mysql> insert into students(id,sn,name) values (11,1004,"诸葛亮");
ERROR 1062 (23000): Duplicate entry '11' for key 'PRIMARY'
解决方案:
INSERT ... ON DUPLICATE KEY UPDATE column=value[,column=value...];
例如:
mysql> insert into students(id,sn,name) values (11,1004,"诸葛亮") on duplicate key update sn=1004,name="诸葛亮";
Query OK, 2 rows affected (0.11 sec)
查看数据:
使用更新的方法插入,会产生三种结果,如下:
- 0 row affected:表中有冲突数据,但冲突数据值和update的值相等。
- 1 row affected:表中没有冲突数据,冲突数据被插入。
- 2 row affected:表中有冲突数据,并且数据已经被更新。
替换
mysql> replace into students (sn,name) values (1003,"曹操");
Query OK, 2 rows affected (0.33 sec)
返回结果有俩种:
- 1 row affected:主键/唯一键没有冲突,直接插入。
- 2 row affected:主键/唯一键有冲突,则删除原数据后再插入。