精华内容
下载资源
问答
  • Oracle创建外键约束

    2019-10-23 13:50:21
    1. 创建表时创建外键 CREATE TABLE T1 (employee_id NUMBER(4), last_name VARCHAR2(10), job_id VARCHAR2(9), salary NUMBER(7,2), department_id CONSTRAINT fk_dep...

    1. 创建表时创建外键

    CREATE TABLE T1
       (employee_id     NUMBER(4), 
        last_name       VARCHAR2(10), 
        job_id          VARCHAR2(9), 
        salary          NUMBER(7,2), 
        department_id   CONSTRAINT fk_deptno 
                        REFERENCES T2(department_id) ); 
    

    其中T2叫父表,T1叫子表。

    注意事项:

    1. 父子表中相应列的数据类型必须一致,列名可以不同;
    2. 父表字段必须是主键或者唯一键;
    3. 子表中外键的值必须在父表中,否则会报错:未找到父项关键字。

    2. 修改时创建外键约束

    有三种形式的外键约束:

    2.1 普通外键约束

    如果存在子表引用父表主键,则无法删除父表记录

    ALTER TABLE T1 ADD CONSTRAINT FK_INVOICE_ID FOREIGN KEY(INVOICE_ID ) REFERENCES T2 (ID);

    2.2 级联外键约束

    可删除存在引用的父表记录,而且同时把所有有引用的子表记录也删除

    ALTER TABLE T1 ADD CONSTRAINT FK_INVOICE_ID FOREIGN KEY(INVOICE_ID ) REFERENCES T2(ID) ON DELETE CASCADE;

    2.3 置空外键约束

    可删除存在引用的父表记录,同时将子表中引用该父表主键的外键字段自动设为NULL,但该字段应允许空值
    ALTER TABLE T1 ADD CONSTRAINT FK_INVOICE_ID FOREIGN KEY(INVOICE_ID ) REFERENCES T2(ID) ON DELETE SET NULL;

    3. 启用/禁用外键

    DISABLE(禁用) | ENABLE (启用)CONSTRAINT constraint_name

    4. 删除外键约束

    drop constraint constraint_name;

    5. 其他

    创建主键:
    ALTER TABLE T1 ADD CONSTRAINT PK_T1_ID PRIMARY KEY(ID);

    展开全文
  • Oracle 创建外键约束使用 on delete cascade 或者 on delete set null 选项 如果我们创建外键约束时候使用了默认的方式,在删除被参照(主表)的数据时候,无法删除,报如下错误: SQL> delete ...

     

    如果我们创建外键约束时候使用了默认的方式,在删除被参照(主表)的数据时候,无法删除,报如下错误:

    SQL> delete from dept where deptno=1;
    delete from dept where deptno=1
    *
    第 1 行出现错误:
    ORA-02292: 违反完整约束条件 (HBC.FK_EMP_DEPT) - 已找到子记录

    所以在创建外键的时候,可以选择 on delete cascade和 on delete set null关键字来决定删除被参照数据时是否要将参照这个数据的那些数据(子表)一并删除,还是将那些参照这条数据的数据的对应值赋空。

    create table dept (  

     deptno number(10) not null,  

     deptname varchar2(30) not null,  

     constraint pk_dept primary key(deptno)

    );

    create table emp (

     empno number(10) not null,  

     fname varchar2(20) ,  

     lname varchar2(20) ,  

     dept number(10) ,  

     constraint pk_emp primary key(empno)

    );

    alter table emp add constraint fk_emp_dept foreign key(dept) references dept(deptno) on delete cascade;

    insert into dept values (1,'A');

    insert into dept values (2,'B');

    insert into emp values (1,'zhang','san',2);

    insert into emp values (2,'li','si',2);

    insert into emp values (3,'wang','wu',1);

    delete from dept where deptno = 1;
    delete from dept where deptno = 1;
    我们发现除了dept中的一条数据被删除了,emp中两条数据也被删除了,其中emp中的两条数据是参照了销售部的这条数据的,这就很容易理解on delete cascade了。
    接下来我们再来看on delete set null,顾名思义了,这种方式建立的外键约束,当被参照的数据被删除是,参照该数据的那些数据的对应值将会变为空值,下面我们还是通过试验来证明on delete set null作用:
    首先恢复刚才的那几条数据,然后更改约束:
    alter table emp
    add constraint fk_emp_dept foreign key(dept) references dept(deptno) on delete set null;
    然后我们在执行删除操作:
    delete from dept where deptno = 1;
    你也会发现除了dept中的销售部被删除以外,emp中参照这条数据的两条数据的dept的值被自动赋空了,这就是on delete set null的作用了。
    使用on delete set null有一点需要注意的是,被参参照其他表的那一列必须能够被赋空,不能有not null约束,对于上面的例子来说是emp中dept列一定不能有not null约束,如果已经定义了not null约束,又使用了on delete set null来删除被参照的数据时,将会发生:ORA-01407: 无法更新 (”DD”.”EMP”.”DEPT”) 为 NULL的错误。
    总的来讲on delete cascade和on delete set null的作用是用来处理级联删除问题的,如果你需要删除的数据被其他数据所参照,那么你应该决定到底希望oracle怎么处理那些参照这些即将要删除数据的数据的,你可以有三种方式:
    禁止删除。这也是oracle默认的
    将那些参照本值的数据的对应列赋空,这个需要使用on delete set null关键字
    将那些参照本值的数据一并删除,这个需要使用on delete cascade关键字

     

     

     

     

    posted on 2013-04-05 22:53  傻春 阅读( ...) 评论( ...) 编辑 收藏

    转载于:https://www.cnblogs.com/hechun/archive/2013/04/05/3001716.html

    展开全文
  • 一 语法 列级进行设置 ...外键约束也被称为主次表的关系。 注意: 设置外键约束时,主表的字段必须是主键。 主从表中相应的字段必须是同一种数据类型。 从表中外键字段的值必须来自主表中的相
    一 语法
    列级进行设置
    CREATE TABLE table1
    (colume_name datetype REFERENCES
    table2(column_name),...)
    table1:从表
    table2:主表
    外键约束也被称为主次表的关系。
    注意:
    设置外键约束时,主表的字段必须是主键。
    主从表中相应的字段必须是同一种数据类型。
    从表中外键字段的值必须来自主表中的相应字段的值,或者为null值,其他值不允许。
     
    二 实例
    本实例演示了: 从表中外键字段的值必须来自主表中的相应字段的值,或者为null值,其他值不允许。
    1. SQL> create table typeinfo
    2. 2(typeid varchar2(10) primary key,
    3. 3typename varchar2(20));
    4. 表已创建。
    5. SQL> create table userinfo_f
    6. 2(id varchar2(10) primary key,
    7. 3 username varchar2(20),
    8. 4 typeid_new varchar2(10) references typeinfo(typeid));
    9. 表已创建。
    10. SQL> insert into typeinfo values(1,1);
    11. 已创建1行。
    12. SQL> insert into userinfo_f(id,typeid_new) values(1,2);
    13. insert into userinfo_f(id,typeid_new) values(1,2)
    14. *
    15. 1行出现错误:
    16. ORA-02291:违反完整约束条件(SYSTEM.SYS_C0011061)-未找到父项关键字
    17. SQL> insert into userinfo_f(id,typeid_new) values(1,1);
    18. 已创建1行。
    19. SQL> insert into userinfo_f(id,typeid_new) values(2,null);
    20. 已创建1行。
     
    展开全文
  • 这个bb是之前创建的一个外键。 xx是之前创建的一个表。 ALTER TABLE xx CHECK CONSTRAINT bb; 请问这个句话是什么意思。
  • 对mysql数据库不太熟悉,今天遇到了外键创建问题。alter外键创建语句命令行下提示成功了,但就是没看到外键。 后来改用workbench工具来创建,发现是因为数据默认是采用的MyISAM存储引擎,该引擎不支持外键,需要...

    对mysql数据库不太熟悉,今天遇到了外键创建问题。alter外键创建语句命令行下提示成功了,但就是没看到外键。

    后来改用workbench工具来创建,发现是因为数据默认是采用的MyISAM存储引擎,该引擎不支持外键,需要修改引擎为InnoDB才可以。

    我直接在workbench将表的引擎改为了InnoDB,发现还是不行,报1005错误:

    1. 10:31:56    ALTER TABLE `cm_relation_contact_group`     ADD CONSTRAINT `fk_test`    FOREIGN KEY (`groupId` )    REFERENCES `cm_group` (`id` )    ON DELETE NO ACTION    ON UPDATE NO ACTION  , ADD INDEX `fk_test` (`groupId` ASC)  Error Code: 1005. Can't create table 'callcenter.#sql-728_5c92' (errno: 150)  
    10:31:56	ALTER TABLE `cm_relation_contact_group`     ADD CONSTRAINT `fk_test`    FOREIGN KEY (`groupId` )    REFERENCES `cm_group` (`id` )    ON DELETE NO ACTION    ON UPDATE NO ACTION  , ADD INDEX `fk_test` (`groupId` ASC)	Error Code: 1005. Can't create table 'callcenter.#sql-728_5c92' (errno: 150)
    

    上网google了一把,大家总结了下,大致有以下原因:

    1、外键的引用类型不一样,主键是int外键是char 
    2、找不到主表中 引用的列 
    3、主键和外键的字符编码不一致 
    4.还有要建立外键的话,要先建立索引。没有建立索引也会出错。
     

    我逐个检查了下,都没问题。难道是每个表都有引擎设置,打开被引用表,发现引擎还是MyISAM,修改过来后就OK了。

     

     

    我在MYSQL中建立个表,就能报[Err] 1005 - Can't create table '.\qesplatform_dbdldx\p_users.frm' (errno: 121),没有外键,请问如何解决

     

    (errno: 121), 这是外关键字名字重复的错误,即使是在不同的表中,外关键字的名字也不能重复
    我的是FK_Reference_4 重复了,找个没有的FK_Reference_54 就可以了

     

    展开全文
  • SQLServer增删改查,创建主键约束、唯一约束、外键约束 SQL语句顺序如下: SELECT 子句 FROM 子句 where 子句 group by 子句 having 子句 order by 子句
  • 报错情况1: Error 1005:Can't create table(errno:150) 原因:由于主表好应用表的外键...原因:外键字段关键字重复引用(注意:一个外键只可以关联一张表“类比一个USB接口只可以连接一台手机”) 报错情况3:
  • 外键约束

    千次阅读 2021-01-05 22:33:40
    外键约束 在新表中添加外键约束语法: constraint 外键约束名称 foreign key(外键的字段名称) references 主表表名(主键字段名) 在已有表中添加外键约束:alter table 从表表名 add constraints 外键约束名称 ...
  • MySQL学习10:外键约束下的更新操作

    千次阅读 2016-05-10 15:32:16
    上一篇只是讲述了外键约束的要求,并没有讲述外键约束的参照操作。...这是我们创建外键约束最大的好 处。有以下几种:  1)CASCADE:从父表删除或更新且自动删除或更新子表中匹配的行。  2)SET NULL:
  • MySQL外键约束(FOREIGN KEY) 简介 MySQL外键约束(FOREIGN KEY)用来在两个...在数据表中创建外键使用 FOREIGN KEY 关键字 语法 [CONSTRAINT <外键名>] FOREIGN KEY 字段名 [,字段名2,…] REFERENCES <...
  • Oracle外键约束

    千次阅读 2019-07-14 20:30:26
    一、创建外键约束 两种方法 1.创建表时 create table 子表( id number, name varchar2(5), foreign key(id) references 父表(列名) ); 2.随时更改 alter table 子表 drop constraint 约束名; alter table ...
  • oracle外键约束的总结

    2018-04-16 19:00:59
    外键约束的创建方法 tes1的建表语句为create table test1 (hid number primary key,hname varchar2(10)); 1、创建表的同时创建外键约束 1.1、列级别 cre...
  • mysql外键约束

    2017-08-29 10:41:25
    一、为什么要外键约束??? 外键是用来实现参照完整性的,不同...二、如何创建外键? 外键的定义:一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY(建立外键的字段必须类型完全一样,如:int 和 bigint 或者 int
  • sql 外键约束

    2013-04-21 18:49:22
    文章分类:数据库 关键字: 外键约束, 外键 如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表。外键是用来实现参照完整性的,不同的外键约束方式将可以使两张表紧密的结合起来,...
  • 在两个表中,想要创建外键约束,条件是: ①父表中被子表引用的关键字必须是主键,或者设置成唯一,否则外键引用是不成功的。 ②如果父表中的该字段设置成非空是不行的,会报下边这个错; ③如果父表中...
  • MySQL外键约束

    千次阅读 2019-07-28 14:44:22
    举个例子来说明外键约束创建学生表和班级表,通过学生的编号来查询他所在的班级。 drop table if exists t_student; create table t_student( sno int(4) primary key auto_increment, ...
  • mysql 设置外键约束(foreign key)

    万次阅读 2015-02-06 13:43:13
    如果需要对多个列组合创建外键约束,或者需要为外键约束指定名字则必须使用表级约束语法。  使用列级约束语法建立外键约束直接使用references关键字,references指定该列参照的哪个主表,以及参照主表的哪一列。...
  • Mysql外键约束

    千次阅读 热门讨论 2016-04-10 20:05:40
    Mysql集群创建外键,分为四种约束:no action,restrict,cascade,set null。如果表A的主关键字是表B中的字段,则该字段称为B的外键,表A称为主表,表B称为从表。外键是用来实现参照完整性的,不同的外键不同的外键...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 32,283
精华内容 12,913
关键字:

创建外键约束的关键字