我有 2 张桌子:
Empleados(**numEmpl**, nombre, apellido, sexo, telefono, salario, numDept)
Departamentos(**numDept**, nombreDept, numDirect)
在部门:
- numEmpl 是主键
- numDept 是对 Departamentos(numDept) 的外键引用。在部门:
- 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 developer。
编辑:感谢您的回答,但他们没有奏效。首先,我只能拥有那些表,当我进行插入时,它必须以这种方式工作,而不是使参数为 null 然后更新它,对不起,我之前没有说过。所以我必须这样做的唯一方法是允许循环引用,但是当我尝试按照这里有人所说的方式进行操作时,它会告诉我一些关于回滚的信息,有人可以帮忙吗?