首页 文章

MySQL,如果不存在则插入行[重复]

提问于
浏览
0

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

我有问题:

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

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

我会写类似的东西:IF NOT 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 回答

  • 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
    

相关问题