我正在使用php-MySQL在后端进行项目.它有各种文章可供浏览,分类为各种类别和用户登录系统.
我最近添加了一个监视列表功能,使用户可以将文章添加到他们的监视列表/仪表板中.
我有以下表格.
文章表
article-id(int)主要 - 唯一
cat(varchar)
名称(varchar)
subCat(varchar)
description(varchar)
添加日期
用户表
用户名(varchar)主要唯一
lname
fname
加入日期
.监视列表表
article-id(int)
username(varchar)
date_watch
我们可以看到没有用于监视列表表的唯一键
我想要(username + article-id)一个唯一的对因为每个用户名都存在多于1个文章ID而且反之亦然
我只想插入和删除行和它并不需要更新他们
如何防止重复条目?
到现在为止我一直用php检查行数
"SELECT * FROM watchlist WHERE article-id={$id} AND username={$user}"
Run Code Online (Sandbox Code Playgroud)
而如果
mysql_num_rows() >1(not allowed to insert)
Run Code Online (Sandbox Code Playgroud)
这工作正常,但如果错误地执行INSERT命令将是一个重复的条目
如何防止它?
我正在使用phpmyadmin
小智 6
您只需向表中添加一个唯一键:
ALTER TABLE `watchlist`
ADD UNIQUE INDEX `watchlist_unique` (`article-id`, `username`);
Run Code Online (Sandbox Code Playgroud)
此外,查看您所拥有的功能,您可以选择将其设置为主键,使用此代替上述内容:
ALTER TABLE `watchlist`
ADD PRIMARY KEY (`article-id`, `username`);
Run Code Online (Sandbox Code Playgroud)
两者都将阻止任何重复条目的插入.
此外,如果您想在这种情况下插入,您可能需要检查INSERT IGNORE和ON DUPLICATE KEY.有关两者的更多信息,请参阅"INSERT IGNORE"与"INSERT ... ON DUPLICATE KEY UPDATE".
| 归档时间: |
|
| 查看次数: |
3301 次 |
| 最近记录: |