mysql语法注意_mysqlinrt语法注意事项
(ONDUPLICATEKEYUPDATE)
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [(col_name,...)]
VALUES ({expr | DEFAULT},...),(...),...
[ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
或:
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name蚂蚁酒
SET col_name={expr | DEFAULT}, ...
[ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
或:
喜的近义词INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [(col_name,...)]
SELECT ...
水随天去
[ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
⼀、DELAYED
使⽤延迟插⼊操作
DELAYED调节符应⽤于INSERT和REPLACE语句。当DELAYED插⼊操作到达的时候,服务器把数据⾏放⼊⼀个队列中,
并⽴即给客户端返回⼀个状态信息,这样客户端就可以在数据表被真正地插⼊记录之前继续进⾏操作了。
如果读取者从该数据表中读取数据,队列中的数据就会被保持着,直到没有读取者为⽌。接着服务器
圆葱炒鸡蛋开始插⼊延迟
数据⾏(delayed-row)队列中的数据⾏。在插⼊操作的同时,服务器还要检查是否有新的读取请求到达和等待。
如果有,延迟数据⾏队列就被挂起,允许读取者继续操作。当没有读取者的时候,服务器再次开始插⼊延迟的数据⾏。这个过程⼀直进⾏,直到队列空了为⽌。
注意事项:· INSERT DELAYED应该仅⽤于指定值清单的INSERT语句。服务器忽略⽤于SELECT语句的DELAYED。·服务器忽略⽤于ON DUPLICATE UPDATE语句的DELAYED。·因为在⾏被插⼊前,语句⽴刻返回,所以您不能使⽤LAST_INSERT_ID()来获取AUTO_INCREMENT值。AUTO_INCREMENT值可能由语句⽣成。·对于SELECT语句,DELAYED⾏不可见,直到这些⾏确实被插⼊了为⽌。· DELAYED在从属复制服务器中被忽略了,因为DELAYED不会在从属服务器中产⽣与主服务器不⼀样的数据。
注意,⽬前在队列中的各⾏只保存在存储器中,直到它们被插⼊到表中为⽌。这意味着,如果您强⾏中⽌了mysqld(例如,使⽤kill -9)或者如果mysqld意外停⽌,则所有没有被写⼊磁盘的⾏都会丢失。
⼆、IGNORE
IGNORE是SQL的扩展。如果在新表中有重复关键字,或者当STRICT模式启动后出现警告,则使⽤IGNORE控制ALTER TABLE的运⾏。如果没有指定IGNORE,当重复关键字错误发⽣时,复制操作被放弃,返回前⼀步骤。如果指定了IGNORE,则对于有重复关键字的⾏,只使⽤第⼀⾏,其它有冲突的⾏被删除。并且,对错误值进⾏修正,使之尽量接近正确值。
inrt ignore into tb(...) value(...)
这样不⽤校验是否存在了,有则忽略,⽆则添加三、ON DUPLICATE KEY UPDATE
如果您指定了ON DUPLICATE KEY UPDATE,并且插⼊⾏后会导致在⼀个UNIQUE索引或PRIMARY KEY中出现重复值,则执⾏旧⾏UPDATE。例如,如果列a被定义为UNIQUE,并且包含值1,则以下两个语句具有相同的效果:
mysql> INSERT INTO table (a,b,c) VALUES (1,2,3)ON DUPLICATE KEY UPDATE c=c+1;
mysql> UPDATE table SET c=c+1 WHERE a=1;
如果⾏作为新记录被插⼊,则受影响⾏的值为1;如果原有的记录被更新,则受影响⾏的值为2。
好看壁纸注释:如果列b也是唯⼀列,则INSERT与此UPDATE语句相当:
mysql> UPDATE table SET c=c+1 WHERE a=1 OR b=2 LIMIT 1;
网络缩写如果a=1 OR b=2与多个⾏向匹配,则只有⼀个⾏被更新。通常,您应该尽量避免对带有多个唯⼀关键字的表使⽤ON DUPLICATE KEY⼦句。
数学乙卷您可以在UPDATE⼦句中使⽤VALUES(col_name)函数从UPDATE语句的INSERT部分引⽤列值。换句话说,如果没有发⽣重复关键字冲突,则UPDATE⼦句中的VALUES(col_name)可以引⽤被插⼊的col_name的值。本函数特别适⽤于多⾏插⼊。VALUES()函数只在UPDATE语句中有意义,其它时候会返回NULL。
⽰例:
mysql> INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6) ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);
辽朝皇帝本语句与以下两个语句作⽤相同:
mysql> INSERT INTO table (a,b,c) VALUES (4,5,6) ON DUPLICATE KEY UPDATE c=9;
当您使⽤ON DUPLICATE KEY UPDATE时,DELAYED选项被忽略。
1. DELAYED
做为快速插⼊,并不是很关⼼失效性,提⾼插⼊性能。
2. Ignore 只关注主键对应记录是不存在,⽆则添加,有则忽略。
3. ON DUPLICATE KEY UPDATE 在添加时操作,关注⾮主键列,注意与ignore的区别,有则更新指定列,⽆则添加。