如何唯一地标识两个或更多列,我在数据库中使用了表名为address的地址,现在地址包含街道名称,套件名称和街道号等字段。
strnum | strnam | sutname
1 | xyz | 32
1 | xyz | 32
现在我怎么能把这三列唯一。那是我想检查这三列是否已经插入。如果任何字段值改变而不是ok,它将插入新的。但是如果所有三个相似的领域......帮我合并识别这三个领域。
答案 0 :(得分:2)
您可以通过添加unique
约束来实现。
ALTER TABLE your_table ADD UNIQUE(strnum, strnam, sutname);
然后执行以下操作:
INSERT IGNORE INTO your_table (strnum, strnam, sutname) VALUES ('1', 'xyz', 'etc');
如果该值已经存在 - 将不会发生插入并且不会引发错误(这就是IGNORE部分的内容)。
那么为什么你要使用这么短而模糊的列名呢?这不再是DOS时代了,你可以用你的列名来描述。
答案 1 :(得分:0)
只需将它们作为表结构中的唯一键添加,您将无法插入其中的两个
答案 2 :(得分:0)
$query = "SELECT * FROM `address` WHERE `strnum` = '$strnum' AND `strnam` = '$strnam' AND `sutname` = '$sutname' LIMIT 1";
$result = mysql_query($query);
if (!mysql_num_rows($result)) {
// If you get to here, there is no existing record
$query = "INSERT INTO `address` (`strnum`,`strnam`,`sutname`) VALUES ('$strnum','$strnam','$sutname')";
if (!mysql_query($query)) print('Insert failed!');
} else print('Record already exists!');
编辑我刚添加了一个;
,所以这解析了......
答案 3 :(得分:-1)
你可以做这样的事情
SELECT * FROM table WHERE col1 = $something AND col2 = $something2 AND col3 = $something3
(记得关于escpaing php变量) 如果记录被返回,则表示它存在。您还可以添加LIMIT 1以使其更快。
如果您的问题是关于ENSURING表中没有重复(对于这3列),那么最好的解决方案是在这三列上添加UNIQUE索引。