mysql防止插入重复数据

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_32113189/article/details/85287380

我们对mysql插入数据分为两种情况:
一、以主键为区别字段,主键不能重复
方案一:

insert ignore into table_name(email,phone,user_id) values('[email protected]','99999','9999')

其中table_name为数据库名称;
email,phone,user_id为字段名;
[email protected]’,‘99999’,'9999’为属性值;

方案二:
REPLACE的运行与INSERT很相像,但是如果旧记录与新记录有相同的值,则在新记录被插入之前,旧记录被删除,即:
尝试把新行插入到表中
当因为对于主键或唯一关键字出现重复关键字错误而造成插入失败时:
从表中删除含有重复关键字值的冲突行
再次尝试把新行插入到表中
旧记录与新记录有相同的值的判断标准就是:表有一个PRIMARY KEY或UNIQUE索引,否则,使用一个REPLACE语句没有意义。该语句会与INSERT相同,因为没有索引被用于确定是否新行复制了其它的行。
返回值:
REPLACE语句会返回一个数,来指示受影响的行的数目。该数是被删除和被插入的行数的和。
受影响的行数可以容易地确定是否REPLACE只添加了一行,或者是否REPLACE也替换了其它行:检查该数是否为1(添加)或更大(替换)。

replace  into table_name(email,phone,user_id) values('test569','99999','123')

其中table_name为数据库名称
(email,phone,user_id)为字段名
(‘test569’,‘99999’,‘123’)为属性值
email为主键

二、除主键外,其他字段属性值也要求不同

insert into datas(content) select 'fox' from DUAL where not EXISTS(select content from datas where content='fox')

其中datas为数据库名称
content为字段名
fox为属性值

猜你喜欢

转载自blog.csdn.net/qq_32113189/article/details/85287380