MySQL,如果不存在则插入行

时间:2012-12-16 23:29:03

标签: mysql transactions insert

  

可能重复:
  how to use if not exists while inserting a row mysql

我有问题:

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

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

我会这样写: 如果不是EXISTS(从表中选择*,其中col2 ='2'和col3 ='2012-12-12 12:12:12')INSERT INTO表(col1,col2,col3)值(1,2,'2012-12 -12 12:12:12')

我假设你知道我在做什么。

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

1 个答案:

答案 0 :(得分: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