我有问题:
我的表名为“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个用户同时插入同一行的情况)或在事务中执行此操作。如果我应该在事务中执行它,那么它应该是什么类型的隔离?可序列化隔离会导致锁定表,因此可以进一步减慢插入过程。 请帮帮我。
答案 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