我需要创建一个表格,其中包含国家和城市列。 如果我把这个国家作为美国,这个城市必须是纽约。如何施加这种约束?
我试过但这也会影响其他行中的数据
UPDATE table1 SET city = if(country="usa",'new york','');
此外,如果可能,应在创建表格时添加约束
答案 0 :(得分:0)
如果我们在每次插入表后按updating
表的逻辑,那么需要做的是:
UPDATE table1
SET city="new york"
WHERE country="usa";
此处WHERE
子句会注意只选择country
作为usa
的元组。
获得约束的最佳方式之一是使用CHECK
,但遗憾的是CHECK
约束被MySQL
忽略,正如文档中的微不足道的评论中所解释的那样:{{3 }}
CHECK子句被解析但被所有存储引擎忽略。
答案 1 :(得分:0)
你可以像这样使用表定义。
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 ;