mySQL을 배우고 있습니다. 나는 그 주위에 내 머리를 잡기 위해 mySQL 워크 벤치와 리눅스 터미널을 혼합하여 사용하고있다. 나는 외래 키와 트리거로 고심하고있다. 나는 이것들 중 하나 또는 둘 모두를 잘못 이해했을지도 모른다고 생각하며 그것이 혼란의 원인이되고있다. 나는 누군가가 문제를 해결하기위한 코드를 제공 할 수는 없지만 내가 오해하고있는 것을 나에게 설명하기를 희망한다.MySQL 데이터베이스의 외래 키 및 트리거의 기본 사용
나는 Organization과 People이라고 불리는 두 개의 작은 테이블을 만들었습니다. 이 시나리오에서는 일대일 관계가 있습니다. 많은 사람들이 한 조직에서 일할 수 있지만 한 사람은 한 조직에서만 일할 수 있습니다. 따라서 조직 테이블 기본 키 'organisation_id'를 동일한 이름 'organisation_id'를 사용하여 외래 키로 인력 테이블에 삽입합니다. 필자는 사람들 테이블에서 외래 키를 사용하여 누가 어떤 조직에서 근무하는지 추적 할 수 있도록합니다. 내 목표는 다음이 테이블에 새로운 사람들을 추가 할 때 트리거를 사용하여 사람들의 외래 키를 자동으로 업데이트하여 누가 어떤 조직에서 근무하는지 추적합니다. 나는 이것을 어떻게하는지 알 수 없다. 사람 테이블에 항목을 추가하면 테이블에 누락 된 셀이 어떻게 표시 될 수 있습니까? 일대 다 관계와 외래 키를 오해 했습니까? 누구든지이 코드를 올바르게 코딩하는 방법을 보여줄 수 있고 내가 잘못한 곳을 말해 줄 수 있습니까? 아마 이것이 기본적인 질문 일지 모르지만 도움이 필요합니다. 그 적용
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 문이라고 생각하고있다. 그러나 그 문법은 조금 혼란 스럽다. 그림자가 무엇을 말하는지 생각해야합니다. –
조직의 새로운 행? 아니면 사람들 테이블에 새 행이 있습니까? –