我有一个表,我有一个带有URL的文本字段,我不希望任何行有重复的URL但我宁愿在插入之前不做检查,是不是没有办法制作文本字段唯一或您可以建议使用其他字段类型吗?
答案 0 :(得分:7)
解决方案基本上是在像field_hash这样的数据库上添加一个额外的字段,使其为VARCHAR和Index赋予唯一性。
CREATE TABLE 'info' (
'text' text NOT NULL,
'text_hash' varchar(40) NOT NULL,
PRIMARY KEY ('id'),
UNIQUE KEY 'text_hash' ('text_hash')
);
$text = 'Full Text';
$text_hash = sha1($text);
mysql_query("INSERT INTO info (text, text_hash) VALUES ('$text', '$text_hash')");
答案 1 :(得分:6)
如果数据库中的文本字段设置为唯一或主键,或者您设置了它,则插入语句将在尝试输入重复时失败。这样你应该做的就是妥善处理失败的插入物并且你有它。
正如其他地方所指出的,你不能让一个实际的TEXT字段是唯一的,但是如果你使用的是varchar字段,它是可行的。这可能并不重要(可能只是一个误传),因为如果您将URL存储在TEXT字段中,您还需要担心其他问题。
答案 2 :(得分:1)
您可以尝试使用包含URL字段哈希的其他字段。
答案 3 :(得分:0)
正确的方法是检查表中是否存在url,如果是,则插入,否则,不要插入。
作为最佳实践,异常处理应该在实际需要的地方使用,不应该用作正常函数的替代。