作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
一个表有三行:analysisId(int, AUTO_INCRMENT)、dataId(int, 来自另一个表的外键)、first_attempt(bool)我有一个触发器,它应该是一个检查整个表的约束,如果有一个“dataId”的first_attempt为1,那么您不能添加另一个 dataId 且first_attempt 为“1”。但是,如果之前使用过 dataId,并且first_attempt 为 0,则它应该接受任意数量的条目。
我写了一个触发器,但是 mysql 一直抛出语法错误,我不确定问题出在哪里。
这是我的表格:
CREATE TABLE table1 (
dataId int NOT NULL AUTO_INCREMENT,
machine char(20) NOT NULL,
run char(25) NOT NULL,
PRIMARY KEY (dataId)
) ENGINE=INNODB;
CREATE TABLE table2 (
analysisId int NOT NULL AUTO_INCREMENT,
dataId int NOT NULL,
first_attempt boolean,
PRIMARY KEY (analysisId),
FOREIGN KEY (dataId)
REFERENCES seq_data(dataId)
ON DELETE CASCADE
) ENGINE=INNODB;
使用虚拟值填充数据:
INSERT INTO `table1` (`dataId`, `machine`, `run`) VALUES (DEFAULT, 'mac1', 'first_run');
INSERT INTO `table2` (`analysisId`, `dataId`, `clinical`) VALUES (DEFAULT, 1, 1);
DELIMITER $$
CREATE TRIGGER `insert_trigger` BEFORE INSERT ON `clinical_gatekeeper`
FOR EACH ROW
BEGIN
IF (NEW.dataId = table2.dataId ) THEN
SELECT CONCAT(NEW.dataId, " has already completed one successful run!") INTO @error_text;
SIGNAL SQLSTATE "45000" SET message_text = @error_text;
END IF;
END;$$
DELIMITER ;
就我个人而言,我认为 IF (NEW.dataId = table2.dataId ) THEN 存在问题
因为如果我用 table2.dataId 替换 1,它就可以工作!
最佳答案
DELIMITER $$
CREATE TRIGGER `insert_trigger` BEFORE INSERT ON `table2`
FOR EACH ROW
BEGIN
IF EXISTS(SELECT 1 FROM table2 WHERE dataId = NEW.dataId AND clinical = NEW.clinical AND clinical = 1) THEN
SELECT CONCAT(NEW.dataId, " has already completed one successful run!") INTO @error_text;
SIGNAL SQLSTATE "45000" SET message_text = @error_text;
END IF;
END;$$
DELIMITER ;
关于mysql - 如果存在一种组合,则在插入/更新表时触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57323094/
我有 json 数据: { "products": [ { "productId" : 0, "productImg" : "../img/product-ph
我是一名优秀的程序员,十分优秀!