• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

安插不重复记录~求一mysql语句~

php 搞代码 4年前 (2022-01-23) 7次浏览 已收录 0个评论

插入不重复记录~~~求一mysql语句~~~
表结构很简单:

SQL code

<!---ecms Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->--------------------------------id  |  cat  |  article-------------------------------- 1       abc           1 2       aaa           2 3       ccc           1--------------------------------

其中id是唯一主键,AUTO_INCREMENT,对于插入记录来讲没什么用。

现在要插入一些记录,当新记录的cat和article_id在原先数据中都未出现时才允许插入。比如cat=’ddd’,article=1和cat=’aaa’,article=1的记录都允许插入,但是cat=”abc”,article=1和cat=”ccc”,article=1的记录都不允许插入本文来源gaodaimacom搞#^代%!码&网*

搞代gaodaima码

,因为已经存在这样的记录了。

请问怎么写mysql语句呢?

网上找的帖子,看得不是很懂,貌似都依赖主键不重复的。

——解决方案——————–
在 cat 和 article 上做联合唯一索引

插入时用 replace 指令
——解决方案——————–
你都不看手册的吗?这样如何进步?

CREATE [UNIQUE|FULLTEXT] INDEX index_name
ON tbl_name (col_name[(length)],… )

REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name [(col_name,…)]
VALUES (expression,…),(…),…
or REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name [(col_name,…)]
SELECT …
or REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name
SET col_name=expression, col_name=expression,…

REPLACE 功能与 INSERT 完全一样,除了如果在表中存在一个老的记录与新记录在一个 UNIQUE 或 PRIMARY KEY 上有相同的值,那么在新记录被插入之前,老的记录将被删除。查看章节 6.4.3 INSERT 句法。

换句话说,你不可以从一个 REPLACE 中访问老的记录行的值。某些老的 MySQL 版本中,你或许可以这样做,但是这是一个 Bug,现在已被修正了。

为了能够使用 REPLACE,你必须有对该表的 INSERT 和 DELETE 权限。

当你使用一个 REPLACE 时,如果新的记录行代替了老的记录行,mysql_affected_rows() 将返回 2。这是因为在新行被插入之前,重复记录行被先删除了。

这个事实使得判断 REPLACE 是否是添加一条记录还是替换一条记录很容易:检查受影响记录行的值是 1 (添加)还是 2(替换)。

注意,除非你使用一个 UNIQUE 索引或 PRIMARY KEY ,使用 REPLACE 命令是没有感觉的,因为它会仅仅执行一个 INSERT。

——解决方案——————–
那你就这样: insert ignore into ………….
但是也要在 cat 和 article 上做联合唯一索引
——解决方案——————–
最笨的办法就是插入前,select一下是否该值已存在。
——解决方案——————–
直接用select查吧
——解决方案——————–
repalce into tablename(id,name) values(‘.$id.’,'”.$name.”‘); or replace into tablename(id,name) select id,name
——解决方案——————–
按楼主的想法先select再insert这种方式还不如replace呢
——解决方案——————–
建议用replace,比较简单高效。
——解决方案——————–
select 白瞎,又不锁表, 根本不是原子的,白判断。

直接唯一索引插入看结果。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:安插不重复记录~求一mysql语句~

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址