Insert语句用于插入数据到表中,其基本语法有以下三种 • Insert语句三种写法的常规用法 • Insert into students5 values(1,’aaa’); • Insert into students5 set sid=2,sname=‘bbb’; • Insert into students5 select sid,sname from where sid=3; • 其中insert…values和insert…set两种语句都是将指定的数据插入到 现成的表中,而insert…select语句是将另外表中数据查出来并插入 到现成的表中 • Partition子句代表可以将数据插入到指定的表分区中 • Tbl_name代表将数据插入到的目标表 • Col_name代表要插入指定数据的目标表列,如果是多列则用逗号 隔开,如果目标表中的某些列没有在Insert语句中指定,则这些列 会插入默认值,当然可以使用default显视指定插入默认值 • Values中除了可以指定确定的数值之外,还可以使用表达式expr • INSERT INTO tbl_name (col1,col2) VALUES(15,col12); ##正确 • INSERT INTO tbl_name (col1,col2) VALUES(col22,15); ##错误 • Insert…values语句不光可以插入一条数据,也可以插入多条数据 • INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9); • Insert into students values(7,’abc’),(8,’bcd’); • Insert…values和insert…select语句的执行结果如下 • Records: 100 Duplicates: 0 Warnings: 0 • Records代表此语句操作了多少行数据,但不一定是多少行被插入的数据,因为如果存 在相同的行数据且违反了某个唯一性,则duplicates会显示非0数值,warning代表语句执 行过程中的一些警告信息 • low_priority关键词代表如果有其他链接正在读取目标表数据,则此insert语 句需要等待读取完成 • low_priority和high_priority关键词仅在MyISAM, MEMORY, and MERGE三种存储 引擎下才生效 • Ignore关键词代表insert语句如果违反主键和唯一键的约束条件,则不报错而 只产生警告信息,违反的行被丢弃,而不是整个语句回退;在数据类型转换 有问题时如果有ignore则只产生警告信息,而不是语句回退 01 • 用于从另外的表中查出记录并插入到目标表中 • INSERT INTO tbl_temp2 (fld_id) SELECT tbl_temp1.fld_order_id FROM tbl_temp1 WHERE tbl_temp1.fld_order_id > 100; • 当目标表和select语句中的表相同时,则会先将select语句的结果 存放在临时表中,再插入到目标表中(注意执行顺序) • 当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; • UPDATE table SET c=c+1 WHERE a=1; • On duplicate key update子句后面可以跟多个修改,用逗号隔开 • 上述例子中如果b字段也有唯一性约束,则与此语句的执行结果 相同,但一般应该避免出现对应多条的情况 • UPDATE table SET c=c+1 WHERE a=1 OR b=2 LIMIT 1; • mysql> create table students2(sid int primary key,sname varchar(20),sex int); • Insert into students2 values(1,’aaa’,1); ##插入成功 • Insert into students2 values(1,’bbb’,0); ##插入失败 • mysql> insert into students2 values(1,'bbb',0); • ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY‘ • insert into students2 values(1,‘bbb’,0) on duplicate key update sname=‘bbb’; ##执行成功 • +-----+-------+------+ • | sid | sname | sex | • +-----+-------+------+ • | 1 | bbb | 1 | • insert into students2 values(1,‘ccc’,0) on duplicate key update sname=‘ccc’,sex=0;