🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
插入 insert 1、三种语法: ~~~ mysql> desc students; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | sid | int(11) | NO | | NULL | | | sname | varchar(10) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.01 sec) ~~~ `insert into students values(1,'aa');或者 insert into students(sid) values(10); `#####其他列必须为可以为空,否则会报错。多列逗号隔开 `insert into students set sid=2,sname='dfg';` ~~~ insert into students_bak select * from students; ####将在students表中查询结果插入students_bak表中。 ~~~ 2、partition 子句将数据插入到指定的表分区中。 3、可以使用expr算法: `insert into students (sid) values(2*3);` 4、insert....values可以插入多条记录: `insert into students (a,b,c) values(1,2,3),(4,5,6);` 5、insert...values和insert...select语句的执行结果: ~~~ Query OK, 4 rows affected (0.00 sec) Records: 4 Duplicates: 0 Warnings: 0 ~~~ affected 表示插入多少条数据 records表示此语句操作了多少行数据,但不一定多少行被插入的数据。 Duplicates 当存在相同的数据且违反了某个唯一性时,此值会显示重复值。 Warnings表示执行过程中的一些警告信息。 6、ignore关键词代表insert语句如果违反主键和唯一键的约束,则不报错只会产生告警信息。违反的行被丢弃,而不是整个语句回退。在数据类型转换有问题时,如果有ignore则会只产生警告信息,而不是整条语句回退。 ~~~ mysql> insert ignore into students values(1,'bbbb'); Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> show warnings; +---------+------+---------------------------------------+ | Level | Code | Message | +---------+------+---------------------------------------+ | Warning | 1062 | Duplicate entry '1' for key 'PRIMARY' | +---------+------+---------------------------------------+ 1 row in set (0.00 sec) ~~~ low_priority 代表有其他的连接正在读取目标表数据,此insert语句需等待读取完成。 low_priority和high_priority 关键词仅在MyISAM,MEMORY,MERGE这三种存储引擎中生效。 7、insert on duplicate key update 如果碰到当前插入的数据违反主键或唯一键的唯一性约束,则insert会转变成update语句修改对应的已经存在表中的这条数据。 如果a都有唯一性约束且已经含有1这条记录,则下面两条语句的执行结果相同。 ~~~ insert into table(a,b,c) values(1,2,3) on duplicate key update c=c+1,b=b+2; update table set c=c+1,b=b+2 where a=1; ~~~