gpt4 book ai didi

mysql - 添加基于字段值的唯一约束

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

对于下表:

enter image description here

我想添加一个约束,如果 IsBanned 标志设置为 true,则 BannedOn 字段不能留空(不能设置为空)。

我如何在 MySQL 中执行此操作?这是我的 CREATE 语法:

CREATE TABLE IF NOT EXISTS `fa_ranking_system`.`Player` (
`PlayerID` INT NOT NULL AUTO_INCREMENT,
`FK_ServerID` INT NOT NULL,
`PlayerName` VARCHAR(15) NOT NULL,
`RegDate` DATETIME NOT NULL,
`IsBanned` TINYINT(1) NOT NULL,
`LastUpdatedOn` DATETIME NOT NULL,
`LastUpdatedBy` VARCHAR(20) NOT NULL,
`BannedOn` DATETIME NULL,
PRIMARY KEY (`PlayerID`, `FK_ServerID`),
INDEX `fk_Player_Server_idx` (`FK_ServerID` ASC),
CONSTRAINT `fk_Player_Server`
FOREIGN KEY (`FK_ServerID`)
REFERENCES `fa_ranking_system`.`Server` (`ServerID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)

最佳答案

实际上,您可以在DDL 语法中定义条件结构。您的字段可以是 NULLNOT NULL - 没有第三个选项(并且它不能依赖于结构中的另一个字段)

但是您仍然可以通过触发器模拟所需的行为。如果传入数据根据您的逻辑无效,您可以中断 UPDATE/INSERT 语句。这可以通过以下方式完成:

CREATE TRIGGER `bannedOnCheck`
BEFORE INSERT ON `fa_ranking_system`.`Player`
FOR EACH ROW
BEGIN
IF(new.IsBanned && new.BannedOn IS NULL) THEN
SIGNAL 'Integrity check failed: can not set banned without ban date'
END IF
END

关于mysql - 添加基于字段值的唯一约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18459937/

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