У меня есть 2 таблицы:ВСТАВИТЬ в таблицах с циклическими ссылками SQL
Empleados(**numEmpl**, nombre, apellido, sexo, telefono, salario, numDept)
Departamentos(**numDept**, nombreDept, numDirect)
In Departamentos:
- numEmpl является первичным ключом
- numDept является внешним ключом ссылкой на Departamentos (numDept). В Departamentos:
- numDept является первичным ключом
- И numDirect является внешним ключом ссылкой на Empleados (numEmpl)
Так есть циклическая ссылка.
Прежде всего я создал таблицы:
CREATE TABLE EMPLEADOS(numEmpl primary key, nombre,
apellido, sexo, telefono, salario, numDept)
CREATE TABLE DEPARTAMENTOS(numDept primary key, nombreDept, numDirect)
(i didn't write here each of type is each colum)
Теперь я создаю ссылку между ними:
ALTER TABLE DEPARTAMENTOS
ADD CONSTRAINT FK_DEPT_EMP FOREIGN KEY (numDirect)
REFERENCES EMPLEADOS(numEmpl)
ALTER TABLE EMPLEADOS
ADD CONSTRAINT FK_EMP_DEPT FOREIGN KEY (numDept)
REFERENCES DEPARTAMENTOS(numDept).
Он работал, так что теперь я попытался вставить некоторые данные:
INSERT INTO Empleados(numEmpl, nombre, apellidos, sexo, telefono, salario, numDept)
VALUES (1, 'Pepito', 'Pérez', 'H', '111111111', 20000, 1);
INSERT INTO Departamentos(numDept, nombreDept, numDirect)
VALUES (1, 'Direccion', 1);
Но теперь это вызывает у меня ошибку, говоря мне, что я не могу вводить данные в круглую ссылку, я попытался отключить круговую ссылку и вставить данные, а затем включить ее снова, это сработало, но кто-то сказал мне, что это неправильный путь, и я должен сделать что-то особенное, пока я создаю таблицы для вставки данных таким образом, и это будет работа, но у меня нет идеи, как это сделать. Кстати, я использую разработчика oracle sql.
EDIT: Спасибо за ответы, но они не сработали. Прежде всего, я могу только иметь эти таблицы, и когда я делаю вставку, она ДОЛЖНА работать таким образом, не делая параметр null, а затем обновляю его, извините, что я не говорил об этом раньше. Итак, единственный способ, которым я должен это сделать, это позволить ссылку на круг, но когда я пытаюсь сделать это так, как кто-то сказал здесь, это говорит мне что-то об откате, кто-то может помочь?
Sql Server удалил параметр DEFERRABLE несколько версий назад, только Oracle имеет его. – Brent
У них тоже есть Postgres. (по какой-то причине, я полагаю), я не знаю, находятся ли они в ANSI, я полагаю, что они есть. BTW: вопрос есть/был помечен SQL, а не SQL-сервером. – wildplasser
Да, это нормально, этот вопрос просто получил мои надежды, и комментарий, который не работает в Sql Server, спас меня некоторое время. – Brent