我正在学习mySQL。我正在使用mySQL工作台和Linux终端的混合物来解决这个问题。我正在努力处理外键和触发器。我想我可能误解了其中的一个或两个,这就是造成混乱的原因。我希望有人不能只是提供代码来解决问题,但向我解释我的误解。mysql数据库中外键和触发器的基本用法
我已经创建了两个名为“组织和人员”的小表。在这种情况下,他们有一对多的关系:许多人可以为一个组织工作,但一个人只能为一个组织工作。因此,我使用相同的名称'organisation_id'作为外键将组织表主键'organisation_id'插入到人员表中。我这样做是为了让我可以使用人员表中的外键来跟踪哪些人在哪个组织工作。然后,我的目标是在人员中添加新人时自动使用触发器更新外键,从而跟踪谁在哪个组织工作。我无法弄清楚如何做到这一点。如果我向人员表中添加一个条目,该表格如何找出行中丢失的单元格?我误解了一对多关系和外键吗?任何人都可以告诉我如何正确编写代码并告诉我哪里出了问题?我知道这可能是一个基本的问题,但我需要帮助。从MySQL工作台
我的表代码如下:
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;
你的多对一似乎是正确的,至于触发器,你能否详细说明'如果我向人员表中添加一个条目,表格怎么能够找出它所在行中缺失的单元格?' –
我的意思是如果我更新表添加一个新的行我如何获得触发器语句来自动填充新插入的行中的people.organisation_id单元格。我认为这是一个AFTER INSERT语句,但语法让我有点困惑。我需要思考下面的影子。 –
组织中的新行?或者在人员表中新增一行? –