在MySQL表中设置唯一的列对

Sri*_*apu 3 php mysql

我正在使用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".