0

可能重复:
插入行mysql时如果不存在如何使用

我有问题:

我有一个名为“table”的表,有 4 列:id(int, PK, AI, Unique), col1(varchar), col2(varchar), col3(datetime)

许多用户可以连接到 mysql 服务器并将行插入“表”。问题是 col2 和 col3 不能存在于“表”的其他行中。

我会这样写: IF NOT EXISTS (select * from table where col2='2' and col3='2012-12-12 12:12:12') INSERT INTO table(col1, col2, col3) values(1 ,2,'2012-12-12 12:12:12')

我假设你知道我想要做什么。

我试图在一个语句中执行此操作(以避免 2 个用户同时插入同一行的情况)或在事务中执行此操作。如果我应该在事务中这样做,那么应该是什么类型的隔离?可序列化的隔离会导致锁定表,因此它可以进一步减慢插入过程。请帮帮我。

4

1 回答 1

2

如果您不希望 col2 和 col3 对重复(即 col 2 可以有重复,但任何 col2 和 col3 对只出现一次),您可以指定:

UNIQUE(col2,col3)

现在尝试插入 col2,col3 对的任何查询都将失败。您可以使用以下方法处理此问题:

INSERT IGNORE INTO table(col1, col2, col3) values(1,2,'2012-12-12 12:12:12');

或者如果插入应该更改您可以使用的值:

INSERT INTO table(col1, col2, col3) values(1,2,'2012-12-12 12:12:12') 
      ON DUPLICATE KEY UPDATE someCol=someVal
于 2012-12-16T23:59:16.927 回答