我有一个基本上具有以下结构的SQL表:
PK (int, primary key), userID (int), data (varchar 64)
基本上,userID定义的任何用户都可以存储任意数量的短字符串。但是,不允许用户存储两个相同的字符串(尽管用户1和用户2都可以分别存储相同的字符串)。如果可能的话,我想在数据库级别实现这个限制,因为IMHO结构约束应该总是在表中,以及插入/读取表中的数据。< / p>
我唯一能想到的是添加第三列,其中我在每次插入时连接userID和数据,并调用那个列唯一,但这对我来说似乎太“hacky”。如果你们中的一个人有更好的方法可以让我把这个约束放在字段上,我愿意完全重组我的表格。)
谢谢!
马拉
答案 0 :(得分:5)
听起来您需要在userID和数据列上使用复合唯一约束。
像这样:CONSTRAINT my_contraint_name UNIQUE ([userID], [data])
答案 1 :(得分:3)
如果我们对UserId和Data有唯一约束,该怎么办?我希望它能解决你的问题。
答案 2 :(得分:2)
你想要一个复合键,你可以在MySQL中将它添加到你的表tablename
中:
ALTER TABLE `tablename` ADD UNIQUE KEY (`userID`, `data`);
答案 3 :(得分:1)
我认为最简单的解决方案是创建索引
create unique index ui on table (userID, data)
虽然这可能会产生开销。
这种看起来应该是你的主键,尽管这实际上取决于PK和userId在整个模式的其余部分中在表中扮演的角色。
答案 4 :(得分:0)
我认为复合键可以完成任务。使用UserId和数据列创建复合键。在这种情况下,当用户尝试多次插入相同的数据时,它将抛出错误,您可以在应用程序中捕获该错误并向用户显示相应的错误消息。
希望它有所帮助...
感谢。