一列中的MYSQL-数据取决于另一列

时间:2017-09-19 04:51:20

标签: mysql sql-update

我需要创建一个表格,其中包含国家和城市列。 如果我把这个国家作为美国,这个城市必须是纽约。如何施加这种约束?

我试过但这也会影响其他行中的数据

UPDATE table1 SET city = if(country="usa",'new york','');

此外,如果可能,应在创建表格时添加约束

2 个答案:

答案 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 ;