mg4377娱乐娱城官网_mg4377娱乐手机版_www.mg4377.com

当前位置: mg4377娱乐娱城官网 > mg > 正文

mysql插入三种方法,MySql制止再度插入记录的两种

时间:2019-06-03 06:32来源:mg
mysql防止再度插入的三种办法,mysql插入两种办法 在支付中,大家常常碰着这么的须要,假诺插入的数量不存在就插入存在就更新( 抑或不做任何操作 )。mysql的insert就提供了此效用,

mysql防止再度插入的三种办法,mysql插入两种办法

在支付中,大家常常碰着这么的须要,假诺插入的数量不存在就插入存在就更新(抑或不做任何操作)。mysql的insert就提供了此效用,无需我们在投机的作业逻辑代码上做管理。间接用mysql提供的机能来兑现就能够。猛击上面包车型地铁链接查看使用办法

在付出中,我们通常蒙受这么的供给,借使插入的数目不设有就插入存在就更新( 只怕不...

防止mysql重复插入记录的措施,mysql重复插入记录

防守mysql重复插入记录的方法有广大种,常用的是ignore,Replace,ON DUPLICATE KEY UPDATE,当然大家也能够在php中加以决断了。

方案一:**使用ignore关键字**

若果是用主键primary也许唯一索引unique区分了笔录的唯一性,幸免双重插入记录能够运用:

代码如下:

复制代码 代码如下:INSERT IGNORE INTO `table_name` (`email`, `phone`, `user_id`) VALUES ('[email protected]', '99999', '9999');

如此当有重复记录就能忽视,推行后回去数字0

还会有个利用就是复制表,防止重复记录: 代码如下:

复制代码 代码如下:INSERT IGNORE INTO `table_1` (`name`) SELECT `name` FROM `table_2`;

 方案二:**使用Replace**

语法格式:

代码如下:

复制代码 代码如下:REPLACE INTO `table_name`(`col_name`, ...) VALUES (...); REPLACE INTO `table_name` (`col_name`, ...) SELECT ...; REPLACE INTO `table_name` SET `col_name`='value',

...算法表明:

REPLACE的运营与INSERT很相像,可是1旦旧记录与新记录有同样的值,则在新记录被插入此前,旧记录被删去,即:

品味把新行插入到表中

当因为对此主键或唯壹首要字现身重复第三字错误而导致插入退步时: 从表中删除含有重复第3字值的争辨行 再一次尝试把新行插入到表中 旧记录与新记录有同一的值的论断标准就是: 表有三个P路虎极光IMAWranglerY KEY或UNIQUE索引,不然,使用贰个REPLACE语句未有意义。该语句会与INSERT同样,因为尚未索引被用于明确是或不是新行复制了别的的行。 重返值: REPLACE语句会重临1个数,来提示受影响的行的多少。该数是被删除和被插入的行数的和 受影响的行数能够轻巧地鲜明是否REPLACE只增添了1行,或许是或不是REPLACE也交替了别的行:检查该数是不是为1(增加)或越来越大(替换)。 示例: # eg:(phone字段为唯一索引)

代码如下:

复制代码 代码如下:REPLACE INTO `table_name` (`email`, `phone`, `user_id`) VALUES ('test569', '99999', '123');

别的,在 SQL Server 中得以这么管理:

代码如下:

复制代码 代码如下:if not exists (select phone from t where phone= '一')   insert into t(phone, update_time) values('1', getdate()) else    update t set update_time = getdate() where phone= '1'

方案三:**ON DUPLICATE KEY UPDATE**

如‍上所写,你也能够在INSERT INTO…..后边加上 ON DUPLICATE KEY UPDATE方法来贯彻。如若您内定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在二个UNIQUE索引或PEvoqueIMAQashqaiY KEY中冒出重复值,则推行旧行UPDATE。 举例,如若列a被定义为UNIQUE,并且包涵值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;
若果行作为新记录被插入,则受影响行的值为1;假如原来的笔录被更新,则受影响行的值为二。

讲授:若是列b也是无可比拟列,则INSERT与此UPDATE语句卓绝: 代码如下:

复制代码 代码如下:UPDATE `table` SET `c`=`c` 1 WHERE `a`=1 OR `mysql插入三种方法,MySql制止再度插入记录的两种办法。b`=2 LIMIT 1;
要是a=1 OQashqaib=2与四个行向相配,则唯有2个行被更新。平时,您应该尽量幸免对包蕴多个唯一首要字的表使用ON DUPLICATE KEY子句。

您能够在UPDATE子句中利用VALUES(col_name)函数从INSERT…UPDATE语句的INSERT部分引用列值。换句话说,假使未有生出再度第2字争辩,则UPDATE子句中的VALUES(col_name)能够引用被插入的col_name的值。本函数特别适用于多行插入。VALUES()函数只在INSERT…UPDATE语句中有意义,别的时候会回来NULL。

代码如下:

复制代码 代码如下:INSERT INTO `table` (`a`, `b`, `c`) VALUES (1, 2, 3), (4, 5, 6) ON DUPLICATE KEY UPDATE `c`=VALUES(`a`) VALUES(`b`);
本语句与以下多个语句功能同样:

代码如下:

复制代码 代码如下:INSERT INTO `table` (`a`, `b`, `c`) VALUES (1, 2, 3) ON DUPLICATE KEY UPDATE `c`=3; INSERT INTO `table` (`a`, `b`, `c`) VALUES (4, 5, 6) ON DUPLICATE KEY UPDATE c=9;
注明:当您使用ON DUPLICATE KEY UPDATE时,DELAYED选项被忽视。

示例:

以此事例是自身在骨子里项目中用到的:是将一个表的多少导入到此外多少个表中,数据的重复性就得怀念(如下),唯一索引为:email:

代码如下:

复制代码 代码如下:INSERT INTO `table_name1` (`title`, `first_name`, `last_name`, `email`, `phone`, `user_id`, `role_id`, `status`, `campaign_id`)     SELECT '', '', '', `table_name2`.`email`, `table_name2`.`phone`, NULL, NULL, 'pending', 29 FROM `table_name2`     WHERE `table_name2`.`status` = 1 ON DUPLICATE KEY UPDATE `table_name1`.`status`='pending'

再贴3个例证:

代码如下:

复制代码 代码如下:INSERT INTO `class` SELECT * FROM `class1` ON DUPLICATE KEY UPDATE `class`.`course`=`class1`.`course`

其它首要:DELAYED  做为神速插入,并不是很关注失效性,升高插入品质。 IGNORE  只关注主键对应记录是不存在,无则增加,有则忽略。

php制止再一次插入记录实例

复制代码 代码如下:<?php $link=mysql_connect(‘localhost','root','1234'); //获得MySQL数据库连接 $username=$_GET["name"]; //获得从客户端表单传过来的数据 $q="select * from usertable where user_name='$username'"; mysql_query("SET NAMES gb231贰"); //制止出现粤语乱码 $rs = mysql_query($q, $link); //查询数据库 $num_rows = mysql_num_rows($rs); //获得查询结果的总公司数 if($num_rows==0) // 烈火? liehuo.net 应接复制,拒绝恶意收集liehuo.net { $exec="insert into student (user_name) values ($username)"; mysql_query("SET NAMES gb2312"); mysql_query($exec, $link); //若未有此用户则将数据插入到数据库(注册用户) echo "用户注册成功!"; } else { echo "该用户名已存在,请重新选用用户名!"; } ?>

附一些删节食复记录的措施

询问及删除重复记录的SQL语句

一、查找表中剩下的重复记录,重复记录是基于单个字段(peopleId)来剖断

复制代码 代码如下:select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)

二、删除表中多余的重复记录,重复记录是基于单个字段(peopleId)来判断,只留有rowid最小的笔录

复制代码 代码如下:delete from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 一) and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>一)

三、查找表中多余的重复记录(多个字段)

复制代码 代码如下:select * from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)

四、删除表中多余的重复记录(三个字段),只留有rowid最小的笔录

复制代码 代码如下:delete from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)

伍、查找表中多余的重复记录(多少个字段),不包括rowid最小的记录

复制代码 代码如下:select * from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)

==============================

SOLVED! Created 3 separated queries for each row, working for now!

So with added UNIQUE INDEX to the (auctionid, order) pair have this workable code:

INSERT IGNORE INTO
selections
(
selections.auctionid,
selections.order,
selections.title,
startamount
)
SELECT
auctions.id,
1,
PlayerA,
0.01
FROM
auctions, game
WHERE
auctions.BetfairMark = game.BetfairMarketID
;

INSERT IGNORE INTO
elections
(
selections.auctionid,
selections.order,
selections.title,
startamount
)
SELECT
auctions.id,
2,
PlayerB,
0.01
FROM
auctions, game
WHERE
auctions.BetfairMark = game.BetfairMarketID

上述就是本文的全体内容,希望对大家的上学抱有帮忙。

幸免mysql重复插入记录的章程有那些种,常用的是ignore,Replace,ON DUPLICATE KEY UPDATE,当然大家也...

方案一:使用ignore关键字

方案一:使用ignore关键字

一旦是用主键primary恐怕唯一索引unique区分了笔录的唯1性,幸免双重插入记录能够使用:

假使是用主键primary只怕唯一索引unique区分了笔录的唯一性,防止双重插入记录能够运用:

复制代码 代码如下:

复制代码 代码如下:

 INSERT IGNORE INTO `table_name` (`email`, `phone`, `user_id`) VALUES ('[email protected]', '99999', '9999');  

 INSERT IGNORE INTO `table_name` (`email`, `phone`, `user_id`) VALUES ('test9@163.com', '99999', '9999');  

如此那般当有重复记录就能够忽略,推行后回去数字0

那样当有重复记录就能忽视,执行后再次回到数字0

还也可能有个使用正是复制表,防止重复记录:

还恐怕有个使用正是复制表,幸免重复记录:

复制代码 代码如下:

复制代码 代码如下:

 INSERT IGNORE INTO `table_1` (`name`) SELECT `name` FROM `table_2`;  

 INSERT IGNORE INTO `table_1` (`name`) SELECT `name` FROM `table_2`;  

方案二:使用Replace

方案二:使用Replace

语法格式:

语法格式:

复制代码 代码如下:

复制代码 代码如下:

REPLACE INTO `table_name`(`col_name`, ...) VALUES (...);
REPLACE INTO `table_name` (`col_name`, ...) SELECT ...;
REPLACE INTO `table_name` SET `col_name`='value',

REPLACE INTO `table_name`(`col_name`, ...) VALUES (...);
REPLACE INTO `table_name` (`col_name`, ...) SELECT ...;
REPLACE INTO `table_name` SET `col_name`='value',

...算法表明:
REPLACE的周转与INSERT很相像,可是假如旧记录与新记录有同样的值,则在新记录被插入此前,旧记录被剔除,即:

...算法表达:
REPLACE的运作与INSERT很相像,可是即使旧记录与新记录有同一的值,则在新记录被插入以前,旧记录被剔除,即:

编辑:mg 本文来源:mysql插入三种方法,MySql制止再度插入记录的两种

关键词: