gpt4 book ai didi

sql - 使用循环引用 SQL 在表中插入

转载 作者:行者123 更新时间:2023-12-04 20:12:04 26 4
gpt4 key购买 nike

我有2张 table :

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。

    编辑:感谢您的回答,但他们没有工作。首先,我只能拥有那些表,当我进行插入时,它必须以这种方式工作,而无需将参数设为空然后更新它,很抱歉我之前没有说过。
    因此,我必须这样做的唯一方法是允许循环引用,但是当我尝试按照某人在这里所说的方式进行操作时,它告诉我有关回滚的信息,有人可以提供帮助吗?

    最佳答案

    要允许循环引用,您需要可延迟约束:

    ALTER TABLE DEPARTAMENTOS 
    ADD CONSTRAINT FK_DEPT_EMP FOREIGN KEY (numDirect)
    REFERENCES EMPLEADOS(numEmpl)
    DEFERRABLE INITIALLY DEFERRED
    ;
    ALTER TABLE EMPLEADOS
    ADD CONSTRAINT FK_EMP_DEPT FOREIGN KEY (numDept)
    REFERENCES DEPARTAMENTOS(numDept)
    DEFERRABLE INITIALLY DEFERRED
    ;

    在事务结束时检查可延迟约束;在提交时间之前,允许存在虚假的无效数据库状态(在原始问题中:在两个插入语句之间)。但是语句必须在事务中,所以语句应该包含在 BEGIN [WORK]; 中。和 COMMIT [WORK]; .

    关于sql - 使用循环引用 SQL 在表中插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15999913/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com