我们在很多需求中,都会有这样一个场景,例如:
我们在加入菜单的时候,总会想出现主键冲突,为了避免这样的情况!我们会在实际的场景中,在主键ID存在的时候不予添加,只有不存在的时候才给予添加。我们通用的方法一般是:
1.(这种方式一般是用在存储过程中)
if not exists (select 1 from ...) then insert ... end if;
2.
insert into user_tab(user_id) select 1 from user_tab ut where ut.user_id != 1;
但是在Mysql中有:
ON DUPLICATE KEY UPDATE
Mysql中文档解释是:
如果您指定了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
简单来说,就是存在就会执行update,不存在就添加,存在就执行修改!那么由此,我们就可以这样做:
insert into menu_tab(menu_id,menu_name) values(1,'主菜单') ON DUPLICATE KEY UPDATE menu_id=menu_id;
另外还有一种方法:
replace into menu_tab(menu_id,menu_name) values(1,'主菜单')
等同:
delete mt from menu_tab mt where mt.menu_id = 1; insert into menu_tab(menu_id,menu_name) values(1,'主菜单');
此方法必须要设置主键!原理就是存在该数据就删除,然后再添加
相关推荐
本文实例讲述了PHP+MySQL之Insert Into数据插入用法。分享给大家供大家参考。具体如下: INSERT INTO 语句用于向数据库表中插入新纪录。 向数据库表插入数据 INSERT INTO 语句用于向数据库表添加新纪录。 语法: ...
MySQL创建存储过程批量插入10万条数据 存储过程 1、首先防止主键冲突,我们清空表。 TRUNCATE table A_student; 2、编写存储过程 delimiter ‘$’; CREATE PROCEDURE batchInsert(in args int) BEGIN declare i int ...
可以插入前进行判断要插入的数据是否存在业务代码如下 : INSERT INTO t_topic_vistor(user_id,topic_code) SELECT '218', 'XQ33019920170811142528217' FROM DUAL WHERE NOT EXISTS(SELECT * FROM t_topic_vistor ...
对于这种情况,可以使用如下的语句来实现:INSERT INTO db1_name (field1,field2) SELECT field1,field2 FROM db2_name 上面的语句比较适合两个表的数据互插,如果多个表就不适应了。对于多个表,可以先将需要查询...
INSERT INTO 表一 (column1, column2, column3, column4) select column1, column2, column3, column4 from 表二 问题二 表中插入数据时,某一字段取数据库中该字段的最大值,并+1, 在表中插入数据时,某一字段...
INSERT INTO 语句用于向数据库表添加新记录。 语法 INSERT INTO table_name VALUES (value1, value2,....) 您还可以规定希望在其中插入数据的列: INSERT INTO table_name (column1, column2,...) VALUES (value1,...
web开发中,我们经常需要将一个表的数据插入到另外一个表,有时还需要指定导入字段,设置只需要导入目标表中不存在的记录,虽然这些都可以在程序中拆分成简单sql来实现,但是用一个sql的话,会节省大量代码。...
本文讲述了mysql中insert与select的嵌套使用的方法,对于初学MySQL的朋友有一定的借鉴价值。 这里需要实现在mysql从多个表中组合字段然后插入到一个新表中,通过一条sql语句实现该功能需求。具体情形是:有三张表a、...
如何在mysql从多个表中组合字段然后插入到一个新表中,通过一条sql语句实现。具体情形是:有三张表a、b、c,现在需要从表b和表c中分别查几个字段的值插入到表a中对应的字段。对于这种情况,我们可以使用如下的语句来...
insert into A(id,cola) select id,cola from B where colb>1000 2.插入时排除(忽略)重复记录 现表A中有一部分记录了,再做如1中的插入操作可能遇到重复的key导致操作失败 代码如下: insert ignore into A(id,...
而replace into其实与insert into很相像,但对于replace into,假如表中的一个旧记录与一个用于PRIMARY KEY或一个UNIQUE索引的新记录具有相同的值,则在新记录被插入之前,旧记录被删除。 replace是mysql 里面处理...
通过文档,您可以学习如何使用`INSERT INTO`语句将数据插入到MySQL表中。示例代码演示了插入单行和多行数据的方法,并提供了相应的注释以帮助您理解每个步骤。 通过阅读和实践这个文档,您将能够更好地掌握MySQL...
1.mysql清空表语句后,新插入的语句会ID会以之前存在的序号记录下去,使用truncate命令清除记录,新插入的语句从1开始 示例: mysql> select id from t1; +----+ | id | +----+ | 1 | | 2 | | 3 | +----+ 清空表 ...
如果需要在MySQL中实现记录不存在则insert,不存在则update操作。可以使用以下语句: 更新一个字段: INSERT INTO tbl (columnA,columnB,columnC) VALUES (1,2,3) ON DUPLICATE KEY UPDATE columnA=IF(columnB>0,...
对于一些数据量较大的系统,面临的问题除了是查询效率低下,还有一个很重要的问题是插入时间长。我们有一个业务系统,每天的数据... INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`) VALUES
如果要向table1中插入5条记录,下面写法是错误的: INSERT INTO table1 (id,name) VALUES(1,小明,2,小强,3,小杜,4,小李,5,小白); MySQL将会抛出下面的错误 ERROR 1136: Column count doesn't match value count at...
MySQL 表中使用 INSERT INTO SQL语句来插入数据。 你可以通过 mysql> 命令提示窗口中向数据表中插入数据,或者通过PHP脚本来插入数据。 语法 以下为向MySQL数据表插入数据通用的 INSERT INTO SQL语法: INSERT ...
不在table_b表中 +——+———–+ | name | id | +——+———–+ | name | 123456 | | name | 1234567 | | name | 12345678 | | name | 123456789 | +——+———–+ 4 rows in set (0.00 sec) 代码如下: mysql> ...
代码如下:INSERT table (auto_id, auto_name) values (1, ‘yourname’) ON ...例如,如果列a被定义为UNIQUE,并且包含值1,则以下两个语句具有相同的效果: 代码如下:mysql> INSERT INTO table (a,b,c) VALUES