我需要创建一个我的专栏国家和城市的表。
如果我将该国视为"美国",那么这座城市必须是"纽约"。如何强加此约束?
我尝试过,但这也会影响其他行中的数据:
UPDATE table1 SET city = IF(country = "USA", 'New York', '');
另外,如果可能的话,应在创建表格时添加约束。
您可以使用表格定义。
CREATE TABLE table_name
(
country varchar(30),
state varchar(30),
CONSTRAINT check_state
CHECK ( state = CASE WHEN country ='usa' THEN 'new york' ELSE '' END )
);
或创建表之后,您可以使用ADD CONSTRAINT
添加约束。
根据 @tim的评论,添加触发器的代码以实现相同的
DELIMITER |
CREATE TRIGGER `update_state`
AFTER INSERT ON `table_name` FOR EACH ROW
BEGIN
SET status = CASE WHEN new.country= 'usa' THEN 'New York' else ''
END;
DELIMITER ;
如果我们按照 updating
的逻辑插入表格之后,则需要做什么是:
UPDATE table1
SET city="new york"
WHERE country="usa";
在这里,WHERE
子句将注意只有country
作为usa
的元素。
获得约束的最佳方法之一是使用CHECK
,但不幸的是,CHECK
约束被MySQL
忽略,如文档中的Miniscule评论中所述:Create Table
检查子句被解析,但所有存储引擎都忽略了。