可以防止sql中与表中2个不同列相关的插入/更新?

时间:2015-07-14 12:56:20

标签: mysql sql constraints

我试图找出一个方法sql-side(mysql)来防止根据列插入或更新某些数据。 取决于一列中的数据,另一列不允许具有相同的,反之亦然。 例如:

╔═══════════╦═══════════╦════════════════════════════╗
║   Col1    ║   Col2    ║            OK?             ║
╠═══════════╬═══════════╬════════════════════════════╣
║ 168068786 ║           ║ This is ok                 ║
║           ║ 636435623 ║ This is ok                 ║
║ 536733246 ║ 356367235 ║ This is ok                 ║
║ 526372123 ║ 526372123 ║ This isnt ok (same values) ║
╚═══════════╩═══════════╩════════════════════════════╝

这可能是通过约束吗?或任何其他方法?如果确实可以通过约束,我不知道如何实现这一目标。 任何帮助将不胜感激

3 个答案:

答案 0 :(得分:0)

这可以通过在执行INSERT / UPDATE之前调用的TRIGGER函数来实现。查看documentation了解详情

答案 1 :(得分:0)

你可以尝试这样的事情:

INSERT INTO Tbl (Col1, Col2, Col3)
SELECT * FROM (SELECT 'Val1', 'Val2', 'Val3') AS tmp
WHERE NOT EXISTS (
    SELECT Col1, Col2 
    FROM Tbl 
    WHERE Col1 IN ('Val1', 'Val2') OR Col2 IN ('Val1', 'Val2') 
) LIMIT 1;

答案 2 :(得分:0)

另一种方法是在表上使用唯一约束,如下所示:

ALTER TABLE MyTable 
ADD CONSTRAINT UK_MyTable UNIQUE (Col1, Col2);

然后,将您的SQL语句更改为:

INSERT IGNORE INTO MyTable(Col1, Col2, ...) VALUES (...)

如果没有显示警告,它将避免重复插入。