我需要创建一个表格,其中包含国家和城市两列。
如果我将国家设为“美国”,那么城市必须是“纽约”。如何强制执行这个约束条件?
我尝试过了,但这也会影响其他行中的数据:
UPDATE table1 SET city = IF(country = "USA", 'New York', '');
同时,如果可能的话,应该在创建表时添加该约束。
我需要创建一个表格,其中包含国家和城市两列。
如果我将国家设为“美国”,那么城市必须是“纽约”。如何强制执行这个约束条件?
我尝试过了,但这也会影响其他行中的数据:
UPDATE table1 SET city = IF(country = "USA", 'New York', '');
UPDATE table1
SET city="new york"
WHERE country="usa";
在这里,WHERE
子句将负责只选择具有 country
为usa
的元组。
设置约束条件最好的方法之一是使用CHECK
,但不幸的是,如文档中微小的评论所述,CHECK
约束被MySQL
忽略:CREATE TABLE
CHECK子句由所有存储引擎解析,但都会被忽略。
你可以像这样处理表定义。
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 ;