精华内容
下载资源
问答
  • mysql 设置外码约束

    千次阅读 2019-10-07 10:57:50
    mysql 设置外码约束 foreign key(字段名1) references 表名(字段名2));

    mysql 设置外码约束

     foreign key(字段名1) references 表名(字段名2));

     

    展开全文
  • Mysql:外码约束

    2019-12-11 09:34:46
    添加主键约束: alter table 表名 add constraint 主键 (形如:PK_表名) primary key 表名(主键字段); 添加外键约束: alter table 从表 add constraint 外键(形如:FK_从表_主表) foreign key 从表(外键字段) ...

    添加主键约束:

    alter table 表名 add constraint 主键 (形如:PK_表名) primary key 表名(主键字段);

    添加外键约束:

    alter table 从表 add constraint 外键(形如:FK_从表_主表) foreign key 从表(外键字段) references 主表(主键字段);
    //constraint 在外键名前面

    删除主键约束:

    alter table 表名 drop primary key;

    删除外键约束:

    alter table 表名 drop foreign key 外键(区分大小写);
    //外键:外键!=外键字段
    //show create table bi_sai_xiang_mu(该表名)来找到这个约束的字段名,一般形如xx_ibfk[_1];

    添加列:

    alter table 表名 add column 列名 varchar(30);

    删除列:

    alter table 表名 drop column 列名;

    修改列名:

    alter table 表名 change oldcolname newcolname int;

    修改列属性:

    alter table 表名 modify 列名 varchar(22);

    展开全文
  • mysql如何处理外码约束

    千次阅读 2019-07-21 06:49:32
    MySQL 外键约束 -- 创建测试主表. ID 是主键.CREATE TABLE test_main ( id INT, value VARCHAR(10), PRIMARY KEY(id));-- 创建测试子表.CREATE TABLE ...

    http://hi.baidu.com/wangzhiqing999/item/e74b2be28be445a3c00d7528

    MySQL 外键约束

    -- 创建测试主表. ID 是主键.
    CREATE TABLE test_main (
      id      INT,
      value   VARCHAR(10),
      PRIMARY KEY(id)
    );


    -- 创建测试子表.
    CREATE TABLE test_sub (
      id      INT,
      main_id INT,
      value   VARCHAR(10),
      PRIMARY KEY(id)
    );


    -- 插入测试主表数据.
    INSERT INTO test_main(id, value) VALUES (1, 'ONE');
    INSERT INTO test_main(id, value) VALUES (2, 'TWO');

    -- 插入测试子表数据.
    INSERT INTO test_sub(id, main_id, value) VALUES (1, 1, 'ONEONE');
    INSERT INTO test_sub(id, main_id, value) VALUES (2, 2, 'TWOTWO');



    默认外键约束方式
    mysql> ALTER TABLE test_sub
        ->   ADD CONSTRAINT main_id_cons
        ->   FOREIGN KEY (main_id)
        ->   REFERENCES  test_main(id);
        -> //
    Query OK, 2 rows affected (0.17 sec)
    Records: 2  Duplicates: 0  Warnings: 0

    mysql> DELETE FROM
        ->   test_main
        -> WHERE
        ->   id = 1;
        -> //
    ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constrai
    nt fails (`test`.`test_sub`, CONSTRAINT `main_id_cons` FOREIGN KEY (`main_id`) R
    EFERENCES `test_main` (`id`))


    MySQL使用下面这个语句删除外键约束
    ALTER TABLE test_sub DROP FOREIGN KEY  main_id_cons;



    DELETE CASCADE 方式
    mysql> ALTER TABLE test_sub
        ->   ADD CONSTRAINT main_id_cons
        ->   FOREIGN KEY (main_id)
        ->   REFERENCES  test_main(id)
        ->   ON DELETE CASCADE//
    Query OK, 2 rows affected (0.16 sec)
    Records: 2  Duplicates: 0  Warnings: 0

    mysql> DELETE FROM
        ->   test_main
        -> WHERE
        ->   id = 1;
        -> //
    Query OK, 1 row affected (0.02 sec)

    mysql> SELECT
        ->   *
        -> FROM
        ->   test_sub;
        -> //
    +----+---------+--------+
    | id | main_id | value  |
    +----+---------+--------+
    |  2 |       2 | TWOTWO |
    +----+---------+--------+
    1 row in set (0.00 sec)


    MySQL使用下面这个语句删除外键约束
    ALTER TABLE test_sub DROP FOREIGN KEY  main_id_cons;




    UPDATE CASCADE方式
    mysql> ALTER TABLE test_sub
        ->   ADD CONSTRAINT main_id_cons
        ->   FOREIGN KEY (main_id)
        ->   REFERENCES  test_main(id)
        ->   ON UPDATE CASCADE;
        -> //
    Query OK, 1 row affected (0.14 sec)
    Records: 1  Duplicates: 0  Warnings: 0

    mysql> UPDATE test_main SET id = 5 where id = 2
        -> //
    Query OK, 1 row affected (0.01 sec)
    Rows matched: 1  Changed: 1  Warnings: 0

    mysql> select * from test_sub//
    +----+---------+--------+
    | id | main_id | value  |
    +----+---------+--------+
    |  2 |       5 | TWOTWO |
    +----+---------+--------+
    1 row in set (0.00 sec)


    MySQL使用下面这个语句删除外键约束
    ALTER TABLE test_sub DROP FOREIGN KEY  main_id_cons;


    SET NULL方式
    mysql> ALTER TABLE test_sub
        ->   ADD CONSTRAINT main_id_cons
        ->   FOREIGN KEY (main_id)
        ->   REFERENCES  test_main(id)
        ->   ON DELETE SET NULL;
        -> //
    Query OK, 1 row affected (0.13 sec)
    Records: 1  Duplicates: 0  Warnings: 0

    mysql> DELETE FROM
        ->   test_main
        -> WHERE
        ->   id = 5;
        -> //
    Query OK, 1 row affected (0.05 sec)

    mysql>
    mysql> SELECT
        ->   *
        -> FROM
        ->   test_sub;
        -> //
    +----+---------+--------+
    | id | main_id | value  |
    +----+---------+--------+
    |  2 |    NULL | TWOTWO |
    +----+---------+--------+
    1 row in set (0.00 sec)

    转载于:https://www.cnblogs.com/xiohao/p/3160265.html

    展开全文
  • 我们在使用 MySQL 数据库时,添加数据如果设计不合理很容易出现外码约束的情况,为什么会产生这样的问题?那我们该如何处理这一问题呢?依据又是什么?本篇文章带你进一步来深度剖析,并带着你的思路来设计解决方案...


    前言

    我们在使用 MySQL 数据库时,添加数据如果设计不合理很容易出现外码约束的情况,为什么会产生这样的问题?那我们该如何处理这一问题呢?依据又是什么?本篇文章带你进一步来深度剖析,并带着你的思路来设计解决方案。

    在这里插入图片描述


    本次案例的案例情景是传统的数据库表:学生-课程数据库。

    一、插入新数据时报错外键约束?

    我们在 Course 表中插入课程号为 1 的数据时提示违反了外键约束。插入语句如下:

    insert into course(cno,cname,cpno,ccredit) values('1','数据库','5',4);
    

    二、对于出错 SQL 语句的分析

    我们先根据 Course 表的定义,看哪一个是外键。查看 Course 表定义的 SQL 语句如下:

    create table course (
    cno char(4) primary key,
    cname char(40),
    cpno char(4),
    ccredit smallint,
    foreign key cpno references course(cno));
    

    从上面的 SQL 语句可以看出,cpno 是外键,而且引用的是本表的主键 cno。

    三、对于外码约束的分析

    我们根据数据库定义的参照完整性规则得知:外键 cpno 的取值不为空的情况下(如上 cpno=‘5’),与其对应的主键 cno 在参照表中必须存在。

    但是我们反观上面操作,第一个插入的就是 cno=‘1’ 的数据,cno=‘5’ 的还没有插入,很显然不满足参照完整性规则。

    四、如何处理外键约束?

    解决方法:

    1. 插入数据的时候,所有的 cpno 字段暂时都置为 null,所有数据插入以后,再依次更新这些数据的 cpno 的值。该方法的优点是复杂性低,容易实现。
    2. 插入数据的时候,不是按表中 cno 的顺序插入,而是根据数据依赖的关系插入数据。比如,根据表里的数据,分析得出可以按 cno=2、6、4、7、5、1、3 的顺序插入数据。

    总结

    本文我们掌握了 MySQL 数据库如何在设计不合理时遇到的外码约束的问题,并通过经典案例为大家分析了为何会出现这样的问题,同时顺着思路来设计业务的解决方案。本文提到的数据库参照完整性规则是数据库设计的基础知识,大家切记要重视基础,活学活用,方能在开发中百战不殆!

    在这里插入图片描述


    感谢大家的支持,我是白鹿,一个不懈奋斗的程序猿。希望本贴能帮助到大家,欢迎大家的一键三连!如果还有什么问题、建议或者补充可以留言在帖子下方,给予更多人帮助!
    更多资讯微信搜索公众号【WDeerCode代码圈

    展开全文
  • 2.外码 双击reference,选择integrity(完整性)选项卡,自定义外键名称 3.CHECK约束 方法一(列约束):双击实体进入,属性界面点击column选项卡,选中要添加约束的字段名,右击点击properties(属性) 点击...
  • 表和完整性约束 表的定义以及完整性约束的定义 定义列 定义计算列 定义主关键字(实体完整性约束) 定义外部关键字(参照完整性约束) 删除约束 、更新约束 定义普通约束(用户定义完整性) 表级约束 ...
  • 可以将理解为键的意思; **1.=键:**能够唯一标识一条记录的属性或者属性集。 2.候选=候选键:能够唯一标识一条记录的最小属性集。 最小性:任一候选键的任何真子集都不能唯一标识一个记录 举例:学生ID是候选...
  • 本文所有操作都是基于mysql8.0执行的,针对mysql数据库创建表之后的约束语句的添加、...创建表时定义外码 创建表后定义外码 定义参照完整性的违约处理 用户自定义完整性 NOT NULL/NULL DEFAULT UNIQUE CHECK ...
  • 基本格式模板: CREATE TABLE 表名 ( ... Sno CHAR(9) PRIMARY KEY, /* PRIMARY KEY主*/ Sname CHAR(20) UNIQUE, /*UNIQUE使Sname取唯一值*/ Ssex CHAR(4)NOT NULL, /*NOT NULL使Ssex不能取空值
  • ①exec sp_helpconstraint ‘表名’:可以查询到表中的各种约束属性(字段),包括可以查看表中哪个字段是外码、主码、属性的范围 ②sp_help + 表名或者sp_columns + 表名:查看表中元素和基本结构
  • 但是事实上信息的人会发现,在导入数据库之后,打开SQL Server 2008中相关的表,点击打开查看相关的列,会发现,只有主码的列字段才会被标注出来(标注为PK),而本应该标注出来的外码却没有标注出来(正确的情况下...
  • 超码、候选码、主码 与 外码

    万次阅读 多人点赞 2019-04-06 19:35:59
    超码superkey: 形式:一个或多个属性的集合 作用:在一个关系中唯一地标识一个元组。 特点: ...可能包含无关属性 ...(通俗讲,就是同一个关系r上,如果某个属性...候选candidate key: 形式:一个或多个属性的集...
  • 候选码与外码

    万次阅读 多人点赞 2018-04-24 17:01:27
    前置:https://blog.csdn.net/jaihk662/article/details/80066225候选:关系中的一个...那么学号就单独作为一个候选除此之外,名字不可以作为候选,因为可能重名,但是名字+地址就可以了,因为这样就不可能重...
  • 1.主键以学生表为例,给学号sno设置主键在表内设置主键为:create table student ( sno char(20) primary key,--学号 sname char(20),--姓名 sex char(20)--性别 ) 在表设置主键:create table...
  • 关系的候选码、主码、外码 候选码 定义:能惟一标识关系中元组的一个属性或属性集,称为候选码(Candidate Key) “学生关系”中的学号能惟一标识每一个学生 “选课关系”中,只有属性的组合“学号+课程号”才能惟一...
  • 实体完整性约束:关系的主中的属性值不能为空值 参照完整性约束:如果关系R2的外部Fk与关系R1的主Pk相对应,则R2中的每一个元组的Fk值或者等于R1中某个元组的Pk值,或者为空值;意义:如果关系R2的某个...
  • 外码关系的完整性总结 关系的码 1. 候选码 候选码是能够唯一标识关系中某一个元组的一个属性或属性集,也叫候选键 如: 学生关系中,学号可以唯一标识学生,班级+姓名也可以唯一标识一个学生,学号和(班级,姓名...
  • 什么是约束? 数据库—由若干张数据表组成(理解为一个类库) 数据表—由行和列组成的一个二维数组(理解为一个类) 列—字段(理解为表中对象的一个属性) 行—理解为表中的一个对象 约束是数据库中保证数据完整性...
  • 数据库中主码和外码问题

    千次阅读 2018-03-27 21:50:55
    INSERT 语句与 FOREIGN KEY SAME TABLE 约束"FK__Course__Cpno__07F6335A"冲突.该冲突发生于数据库"first",表"dbo.Course", column 'Cno'. 语句已终止.在刚开始以学生-课程数据库为例...
  • 主键约束和唯一约束

    千次阅读 2019-03-07 21:30:59
    主键约束和唯一约束主键约束和唯一约束的区别普通索引和唯一索引Mysql中的索引普通索引(非唯一索引)唯一索引唯一索引主键约束的唯一索引唯一约束的唯一索引创建唯一索引删除主键约束和唯一约束自动创建的唯一索引 ...
  • Mysql约束

    千次阅读 2021-02-05 10:12:21
    约束基本概念非空约束 not null唯一性约束列级唯一性约束表级唯一性约束主键约束单一主键复合主键使用表级约束方式定义主键主键值自增外键约束基本语法:关于外键约束的相关术语案例引入顺序要求:注意点 ...
  • sql server中的外码和级联

    千次阅读 2016-05-14 09:33:12
    sql server中的外码和级联问题定义了三个表GOODS、PLAZA、SALE,其中SALE表的主码为外码参考GOODS表和PLAZA的主码。create table GOODS( GNAME char(20) primary key, GTYPE char(10) );create table PLAZA( ...
  • alter table 表名 add CONSTRAINT 约束名 foreign key (外码字段名) references 被参照表的表名(被参照主码名); 如果添加约束的时候失败,可能的原因是:外码字段的值 与 被参照主码的值 不一致。 解决办法:1...
  • 主键约束和唯一约束的区别

    千次阅读 2017-11-14 09:30:26
    1.主键约束(PRIMARY KEY) ...4) 主健可作健,唯一索引不可; 2.唯一性约束(UNIQUE) 1) 唯一性约束用来限制不受主键约束的列上的数据的唯一性,用于作为访问某行的可选手段,一个表
  • 一、候选码、主码和外码 1. 候选码(Candidate Key) 定义:能唯一标识关系中元组的一个属性或属性集,称为候选码。 性质:具有唯一性和最小性。 2. 关系的主码和外码 主码 定义:从多个候选码中选择一个作为查询、...
  • 完整性约束

    千次阅读 2018-07-12 13:07:10
    完整性约束 静态列级约束 1. 对数据类型的约束,包括数据的类型、长度单位、精度等 2. 对数据格式的约束 3. 对取值范围或取值集合的约束 4. 对空值的约束 5. 其他约束 静态元组约束 一个...
  • 外键约束

    千次阅读 2018-09-27 18:09:19
    外键约束 如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键 外键(FOREIGN KEY) 什么是外键 假设有有 A 、 B 两张数据表, A 表有一个字段 id 用来唯一标识 A 中的一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 57,304
精华内容 22,921
关键字:

外码约束