Я следую за этим book для моего класса базы данных. База данных имеет 6 таблиц. Из 6 из них я отправлю две таблицы.Как вставлять данные, когда у нас есть ограничения связи в базе данных MySQL
/*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));
Таблица служащих имеет рекурсивное отношение, чтобы продемонстрировать, что «работник является наблюдателем другого сотрудника». Он также ссылается на таблицу DEPARTMENT, чтобы показать, что сотрудник работает в отделе. Ниже приведена схема таблицы DEPARTMENT.
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 приведена таблица сотрудников, чтобы показать, что сотрудник управляет отделом. при вставке данных, таких как
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 нет данных. Мой вопрос заключается в том, что мы должны сначала вставить данные, а затем изменить таблицу и обеспечить ограничения ссылочной целостности. Или есть способ обойти. Ваши предложения/рекомендации будут оценены. Спасибо.
Это не должно быть столь же решительным, как отказ от ограничения. Просто позвольте столбцу быть нулевым. – e4c5