MySQL 数据库中有关系约束时如何插入数据
How to insert data when we have Relationship constraints in MySQL database
我正在为我的数据库 class 关注这个 book。数据库有 6 tables。从他们中的 6 个中,我将 post 两个 tables.
/*EMPLOYEE Table */
CREATE TABLE EMPLOYEE(
Fname VARCHAR(15) NOT NULL,
Minit CHAR,
Lname VARCHAR(15) NOT NULL,
Ssn CHAR(9) NOT NULL,
Bdate DATE,
Address VARCHAR(30),
Sex CHAR,
Salary DECIMAL(10,2),
Super_ssn CHAR(9),
Dno INT NOT NULL,
PRIMARY KEY (Ssn),
FOREIGN KEY (Super_ssn) REFERENCES EMPLOYEE(Ssn)
FOREIGN KEY (Dno) REFERENCES DEPARTMENT(Dnumber) );
雇员table有一个递归关系来证明"an employee is a supervisor of another employee"。它还引用 DEPARTMENT table 以显示员工在部门工作。以下是部门 table.
的架构
CREATE TABLE DEPARTMENT(
Dname VARCHAR(15) NOT NULL,
Dnumber INT NOT NULL,
Mgr_ssn CHAR(9) NOT NULL,
Mgr_start_date DATE,
PRIMARY KEY (Dnumber),
UNIQUE (Dname),
FOREIGN KEY (Mgr_ssn) REFERENCES EMPLOYEE(Ssn)
);
DEPARTMENT table 引用员工 table 以表明员工管理部门。
当插入数据如
insert into EMPLOYEE values
('John','B','Smith','123456789','1965-01-09','731 Fondren, Houston, TX',
'M',30000,'333445555',5);
我们将无法执行上述查询,因为存在参照完整性FOREIGN KEY (Super_ssn) REFERENCES EMPLOYEE(Ssn)
。如果我尝试下面的查询也一样
insert into department values ('Research',5,'333445555','1988-05-22');
上面的查询不会执行,因为 employee table 中没有数据。我的问题是我们是否应该先插入数据然后更改 table 并强制执行参照完整性约束。或者有什么办法。您的 suggestions/advice 将不胜感激。谢谢。
外键可以有空值。所以你可以输入值,外键值为 null,就像最高主管一样,他上面没有主管。
所以一般的想法是自下而上输入数据,比如在没有外键的 table 中输入值,然后在它上面输入引用 table 的值,等等......
确切的方法取决于您在示例中使用的其余 table。
我正在为我的数据库 class 关注这个 book。数据库有 6 tables。从他们中的 6 个中,我将 post 两个 tables.
/*EMPLOYEE Table */
CREATE TABLE EMPLOYEE(
Fname VARCHAR(15) NOT NULL,
Minit CHAR,
Lname VARCHAR(15) NOT NULL,
Ssn CHAR(9) NOT NULL,
Bdate DATE,
Address VARCHAR(30),
Sex CHAR,
Salary DECIMAL(10,2),
Super_ssn CHAR(9),
Dno INT NOT NULL,
PRIMARY KEY (Ssn),
FOREIGN KEY (Super_ssn) REFERENCES EMPLOYEE(Ssn)
FOREIGN KEY (Dno) REFERENCES DEPARTMENT(Dnumber) );
雇员table有一个递归关系来证明"an employee is a supervisor of another employee"。它还引用 DEPARTMENT table 以显示员工在部门工作。以下是部门 table.
的架构CREATE TABLE DEPARTMENT(
Dname VARCHAR(15) NOT NULL,
Dnumber INT NOT NULL,
Mgr_ssn CHAR(9) NOT NULL,
Mgr_start_date DATE,
PRIMARY KEY (Dnumber),
UNIQUE (Dname),
FOREIGN KEY (Mgr_ssn) REFERENCES EMPLOYEE(Ssn)
);
DEPARTMENT table 引用员工 table 以表明员工管理部门。 当插入数据如
insert into EMPLOYEE values
('John','B','Smith','123456789','1965-01-09','731 Fondren, Houston, TX',
'M',30000,'333445555',5);
我们将无法执行上述查询,因为存在参照完整性FOREIGN KEY (Super_ssn) REFERENCES EMPLOYEE(Ssn)
。如果我尝试下面的查询也一样
insert into department values ('Research',5,'333445555','1988-05-22');
上面的查询不会执行,因为 employee table 中没有数据。我的问题是我们是否应该先插入数据然后更改 table 并强制执行参照完整性约束。或者有什么办法。您的 suggestions/advice 将不胜感激。谢谢。
外键可以有空值。所以你可以输入值,外键值为 null,就像最高主管一样,他上面没有主管。
所以一般的想法是自下而上输入数据,比如在没有外键的 table 中输入值,然后在它上面输入引用 table 的值,等等......
确切的方法取决于您在示例中使用的其余 table。