我试图找出一个方法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) ║
╚═══════════╩═══════════╩════════════════════════════╝
这可能是通过约束吗?或任何其他方法?如果确实可以通过约束,我不知道如何实现这一目标。 任何帮助将不胜感激
答案 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 (...)
如果没有显示警告,它将避免重复插入。