SQL:当UNIQUE键约束不适用时处理表中的唯一值

Ant*_*kov 3 mysql sql

当您不能使用UNIQUE约束时,如果需要维护具有唯一值的表,您会怎么做?

例如,我使用MySQL并希望将我的网址映射到ID.所以我创建了一个表:

CREATE TABLE url (id INTEGER PRIMARY KEY AUTO_INCREMENT, url VARCHAR(2048));
Run Code Online (Sandbox Code Playgroud)

问题是mysql不允许大于1000字节的唯一字段.一般如何插入只在sql中不存在原子?

Adr*_*ith 5

您可以创建一个额外的字段,该字段将是url的哈希值,例如md5,并使该哈希字段唯一.您当然可以确定该URL是唯一的,并且几乎100%确定您可以插入新的URL(如果它尚不存在).

创建表锁是很诱人的,但创建表锁将隐式提交您正在处理的事务:http://www.databasesandlife.com/mysql-lock-tables-does-an-implicit-commit/

您可以创建单行表,例如name mutex,type = InnoDB,在其中插入一行,然后select for update在该行上创建一个与事务兼容的锁.这很讨厌,但这就是我在我的应用程序中在MySQL中执行表锁的方式:(