MySQL 强制跨两列的唯一性?

标签 mysql

我想在数据库中存储三列,禁止重复条目:

( '名称' , '位置' , '数据' )

这是我目前所做的,但它只对名称强制执行唯一性。

CREATE TABLE IF NOT EXISTS SomeStuff (
Name VARCHAR(200),
Location VARCHAR(200),
Data LONGTEXT,
UNIQUE INDEX (Name)
)

我想做的是强制名称和位置的唯一组合。即,如果我要存储这些条目,我希望所有条目都有效:

Toothbrush , Ohio , (DATA)
Bacon , Ohio , (DATA)
Sandwich , Kansas , (DATA)
Sandwich , Ohio , (DATA)
Bacon , Kansas , (DATA)

但是,如果我尝试存储此条目,我希望它无效:

Bacon , Ohio , (DIFFERENT_DATA)    <--Database won't allow this

我如何构造一个表定义来做到这一点?

我使用如下一行定期更新 (DATA) 列:

REPLACE INTO LicenseData (Name, Location, Data)
VALUES ( arg , arg , arg )

这在我必须跟踪位置之前是有效的,所以现在我不能同时存储 ( Sandwich , Kansas )( Sandwich , Ohio ) .

最佳答案

我比 MySql 更了解 T-SQL,但也许你可以做到这一点?

CREATE TABLE IF NOT EXISTS SomeStuff (
Name VARCHAR(200),
Location VARCHAR(200),
Data LONGTEXT,
UNIQUE INDEX (Name, Location)
)

关于MySQL 强制跨两列的唯一性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6474700/

相关文章:

mysql - 为什么事务完成后 hibernate session 没有关闭

javascript - 如何使用ajax在select2中显示多个结果数据?

MySQL - 如何将此表减少到总成本?

mysql - 如何从现有查询的结果中选择具有最高值的行?

sql - 从联合 mysql 查询中获取帖子数?

php - 重构 Doctrine DQL/SQL

php - 不确定我是否理解 OOP 和 PDO。尝试学习如何使用它

MySQL:如果表中不存在则插入记录

php - MySQL 'AS' 语句错误

java - Hibernate 不保留 Mysql 中的外键