gpt4 book ai didi

MYSQL触发器/约束在另一列中设置相等的列值

转载 作者:行者123 更新时间:2023-11-29 13:56:11 25 4
gpt4 key购买 nike

如下表:

Country Name             |  Country Code |  isStandardName
----------------------------------------------------------

United States | USA | false
----------------------------------------------------------
United States of America | USA | True
----------------------------------------------------------
Yankees | USA | false

存在一种情况,即具有相似国家/地区代码(在本例中为美国)的国家/地区有不同的名称,例如美利坚合众国/美国,但其中一个可以是标准名称。在这种情况下,最简单的解决方案是强制实现一项约束,即类似的国家/地区代码在 isStandardName 部分中一次只能有一个 bool 值 true。

换句话说,如何通过触发器/约束使“CountryCode , 'true'”对于一组相同的countryCode名称具有唯一性?

关于如何强制执行此限制有什么建议吗?

最佳答案

我建议删除“isStandardName”列。创建一个表standard_country。创建了 Country 和 standard_country 之间的关系。使用左连接创建 View 并更改模型以使用新结构。

示例。

CREATE TABLE `country` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`country` varchar(63) DEFAULT NULL,
`code` char(3) DEFAULT NULL COMMENT 'ISO 3166-1 alpha-3',
PRIMARY KEY (`id`),
UNIQUE KEY `country` (`country`,`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `country` (`id`, `country`, `code`)
VALUES
(1,'United States','USA'),
(2,'United States of America','USA'),
(3,'Yankees','USA');

CREATE TABLE `standard_country` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`country_id` int(11) unsigned NOT NULL,
`code` char(3) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
UNIQUE KEY `key` (`code`),
KEY `country_id` (`country_id`),
CONSTRAINT `standard_country_ibfk_1` FOREIGN KEY (`country_id`) REFERENCES `country` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `standard_country` (`id`, `country_id`, `code`)
VALUES
(1,2,'USA');

create or replace view countries_view as
select country.id country_id
, country
, country.code
, COALESCE( (standard_country.id > 0) , 0 ) isStandard
from `country`
left join `standard_country`
on country.id = standard_country.country_id

-- example result
select * from countries_view ;

country_id country code isStandard
1 United States USA 0
2 United States of America USA 1
3 Yankees USA 0

关于MYSQL触发器/约束在另一列中设置相等的列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15831272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com