mysql 数据库中外键和触发器的基本使用

the basic use of foreign keys and triggers in mysql databases

我正在努力学习 mySQL。我混合使用 mySQL workbench 和 Linux 终端来解决这个问题。我正在与外键和触发器作斗争。我想我可能误解了其中一个或两个,这就是造成混乱的原因。我希望有人不仅可以提供解决问题的代码,还可以向我解释我的误解。

我创建了两个小的 tables,分别称为“组织”和“人员”。在这种情况下,它们是一对多的关系:许多人可以为一个组织工作,但一个人只能为一个组织工作。因此,我使用相同的名称 'organisation_id' 将组织 table 的主键 'organisation_id' 作为外键插入到人员 table 中。我这样做是为了可以使用 people table 中的外键来跟踪谁为哪个组织工作。我的目标是当我向这个 table 添加新人时,使用触发器自动更新人员中的外键,从而跟踪谁为哪个组织工作。我只是不知道该怎么做。如果我向 people table 添加一个条目,table 如何找出它所在行中缺失的单元格?我是否误解了一对多关系和外键?谁能告诉我如何正确编码并告诉我哪里出错了?我知道这可能是一个基本问题,但我需要帮助。

我的 table 来自 mySQL workbench 的代码如下:

CREATE SCHEMA IF NOT EXISTS `learning` DEFAULT CHARACTER SET utf8 ;
USE `learning` ;


CREATE TABLE IF NOT EXISTS `learning`.`organisation` (
`organisation_id` INT UNSIGNED NOT NULL DEFAULT 1,
`org_name` VARCHAR(45) NOT NULL,
`org_website` VARCHAR(45) NULL,
PRIMARY KEY (`organisation_id`))
ENGINE = InnoDB;


CREATE TABLE IF NOT EXISTS `learning`.`people` (
`people_id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
 `name` VARCHAR(45) NULL,
`job` VARCHAR(45) NULL, 
 `organisation_id` INT UNSIGNED NOT NULL,
 PRIMARY KEY (`people_id`),
 INDEX `fk_organisation_id_idx` (`organisation_id` ASC),
 CONSTRAINT `fk_organisation_id`
 FOREIGN KEY (`organisation_id`)
 REFERENCES `learning`.`organisation` (`organisation_id`)
 ON DELETE NO ACTION
 ON UPDATE NO ACTION)
 ENGINE = InnoDB;

您正确理解了外键的概念,但未正确理解其应用。

是的,它可以帮助您将 peopleorganisation 相关联,并确保您只能在 people table 中输入有效的 organisation_id ](有效=存在于 organisation table)。

但是,数据库无法自行判断一个人属于哪个组织。这是您需要在插入内容中提供的内容。

在使用此数据库的应用程序中,将有一个用于将 people 添加到数据库的表单。在该表格上,您需要提供用户所属的组织。

外键定义中的on deleteon update子句实际上适用于organisation table:如果organisation_id字段被删除/更新在organisationtable,那么在peopletable.

应该采取什么行动