gpt4 book ai didi

MySQL触发器: Check if primary key ID is in use in other table

转载 作者:行者123 更新时间:2023-11-29 14:08:18 24 4
gpt4 key购买 nike

我想为我的表 table_master 创建一个触发器。

table_master 的表架构很简单:

master_id       INT(11)       AUTO_INCREMENT, PRIMARY, NOT NULL
title VARCHAR(50) NOT NULL

这是另一个关系表rel_master_another_tbl

master_id       INT(11)       PRIMARY, NOT NULL
another_id INT(11) PRIMARY, NOT NULL

我想要实现的是,当对 table_master 发出 DELETE 查询时,触发器将检查 master_id 是否用于rel_master_another_tbl 。 更新:如果是,则回滚/取消DELETE查询。

我怎样才能实现这个目标?

CREATE TRIGGER check_before_delete BEFORE DELETE ON table_master
// what should I put here?
END;

最佳答案

您尝试实现的行为已存在于数据库中,并且可以通过 ON DELETE RESTRICT 触发器来利用。下面显示了定义表以利用此功能的示例:

CREATE TABLE `master` (
`master_id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(50) DEFAULT NULL,
PRIMARY KEY (`master_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `rel_master_another_tbl` (
`master_id` int(11) NOT NULL,
`another_id` int(11) NOT NULL,
KEY `i_master_id` (`master_id`),
FOREIGN KEY `fk_rel_master_another_tbl_master` (`master_id`)
REFERENCES `master` (`id`) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
在这种情况下,

RESTRICT 意味着如果 rel_master_another_tbl 中存在相应的行,则尝试从 master 表中删除行将会失败。指的是 masters id 列。另外,请注意,RESTRICT 是外键的 ON DELETEON UPDATE 触发器的默认选项,因此您实际上可以定义外键键如下所示,它的功能仍然相同:

FOREIGN KEY `fk_rel_master_another_tbl_master` (`master_id`)
REFERENCES `master` (`id`)

请参阅 foreign key constraints 上的 MySQL 文档了解更多信息。

关于MySQL触发器: Check if primary key ID is in use in other table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13966610/

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