精华内容
下载资源
问答
  • 怎样使用外键约束,怎样已建好的表添加约束

    回顾总结:1、约束:分为表级约束和列级约束

    2、非空约束,主键约束,默认约束,唯一约束

    新:1、外键约束 

    1)父表和子表使用相同的存储引擎,禁止使用临时表

    2)存储引擎必须是InnoDB

    3)外键列和参照列必须有相似的数据类型,数字的长度和有无符号必须相同,字符的长度可以不同。

    3)外键列和参照列必须有索引,外键列没有索引,mysql自动创建索引(参照列没有索引则不会)


    //创建了一个province父表

    CREATE TABLE province(
    id SMALLINT UNSIGNED PRIMARYKEY AOTU_INCREMENT,
    name VARCHAR(20)
    );
    //创建外键约束语法如下
    CREATE TABLE user1(
    id SAMLLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(20),
    pid SMALLINT UNSIGNED,
    FOREIGN KEY (p<span style="font-family: Arial, Helvetica, sans-serif;">id) REFERENCES province (id</span><span style="font-family: Arial, Helvetica, sans-serif;">));</span>
    在创建外键约束同时可以加一些操作,即“父表删除更新也同时删除更新子表中对应的行”

    CREATE TABLE user1(
    id SAMLLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(20),
    pid SMALLINT UNSIGNED,
    FOREIGN KEY (pid) REFERENCES province (id) ON DELETE  CASCADE
    );


    2、添加约束,表已建好后再对某一列添加约束

    ALTER TABLE users2 ADD PRIMARY KEY(id);
    


    展开全文
  • 在使用PHPAdmin建立数据库之后,要添加外键约束,即建立之间(字段之间的联系) 首先在建立的过程中也写需要注意的点 1、设置主键 2、有可能会用到的关联字段要记得设置唯一性 3、将所有要建立关系...

    在使用PHPAdmin建立数据库之后,要添加外键约束,即建立表与表之间(字段之间的联系)

    首先在建立表的过程中也写需要注意的点

    1、设置主键

    2、有可能会用到的关联字段要记得设置唯一性

    3、将所有要建立关系的表的存储引擎设置改为InnoDB

    4、选择要建立外键约束的表

    5、保存后查看

     

     

    展开全文
  • 在从表添加外键约束,用于引用主表中某列的值。比如学生表的专业编号,员工表的部门编号,员工表的工种编号。 二、什么要使用外键 下面本文将从一个例子出发来阐述使用外键的原因。 如何将某京东用户Ryan的信息...

    一、外键的定义

    外键
    用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值。在从表添加外键约束,用于引用主表中某列的值。比如学生表的专业编号,员工表的部门编号,员工表的工种编号。

    二、为什么要使用外键

    下面本文将从一个例子出发来阐述使用外键的原因。
    如何将某京东用户Ryan的信息及其多个商品邮寄地址保存到数据库中呢?

    方案一
    用单张表来保存用户信息以及商品邮寄地址,如下所示:

    create table user_info(//创建user_info表
        id int(10) primary key,
        user_name varchar(30) not null,
        password varchar(30) not null,
        real_name varchar(8),
        mobile char(11),
        address varchar(150)
    );
    
    //向user_info表中插入若干条数据
    insert into user_info (id,user_name,password,real_name,mobile,address) 
    values (1,'Ryan','123456','张三','18920120206','河南安阳');
    insert into user_info (id,user_name,password,real_name,mobile,address) 
    values (2,'Ryan','123456','李四','18617297545','北京海淀');
    insert into user_info (id,user_name,password,real_name,mobile,address)
    values (3,'Ryan','123456','王五','17694976949','山西大同');
    

    结果如下
    在这里插入图片描述
    由于每个用户可以有多个收货地址,可以看出这种方法创建的表存在较为严重的字段冗余(user_name和password列),而随着该表中的个人信息字段越来越多,则这一问题表现的就越严重,所以不推荐使用。
    为了解决字段冗余的问题我们可以创建两张表,一张用来保存个人信息,另外一张用来保存收货地址。

    方案二
    设计两张表:一张表保存用户信息,一张表保存商品邮寄信息,如下所示:
    表一

    create table user_info(//创建user_info表保存用户信息
        id int(10) primary key,
        user_name varchar(30) not null,
        password varchar(30) not null
    );
    //向user_info表中插入一条数据
    insert into user_info (id,user_name,password) values (1,'Ryan','123456');
    

    结果如下
    在这里插入图片描述

    表二

    create table address(//创建address表保存商品邮寄信息
        id int(10) primary key,
        user_info_id char(36),
        real_name varchar(8) not null,
        mobile char(11) not null,
        address varchar(150) not null
    );
    //向address表中插入若干条数据
    insert into address (id,user_info_id,real_name,mobile,address) 
    values (1,1,'张三','18920120206','河南安阳');
    insert into address (id,user_info_id,real_name,mobile,address) 
    values (2,1,'李四','18617297545','北京海淀');
    insert into address (id,user_info_id,real_name,mobile,address) 
    values (3,1,'王五','17694976949','山西大同');
    

    结果如下
    在这里插入图片描述
    这种方法虽然解决了字段的冗余问题,但由于只是逻辑上的“外键”关系,在插入数据的时候需要靠数据库操作者的自觉性,所以依然无法保证数据完整性,有可能会出现垃圾信息(没有用的信息)。
    如果这里在向address表中添加一条数据,并且该数据没有与之对应的用户信息则这里添加的数据就是没有用的信息。

    insert into address (id,user_info_id,real_name,mobile,address) values (4,6,'XiaoMing','18338970095','China');
    

    在这里插入图片描述
    如果这里如果把user_info表中的数据删除,但此时地址表中数据将不再完整,这些地址没有与之对应的用户。此时addres表中与之前用户对应的收货地址成为了垃圾信息。
    在这里插入图片描述
    在这里插入图片描述
    这里只是逻辑上的“外键”关系,所以还需要手动删除address表中对应的数据。
    显然逻辑上的"外键"关系需要依靠操作者的自觉性,依然无法保证数据的完整性。

    方案三
    只需在address表中添加外键约束即可。如下所示:

    create table address(//创建address表保存商品邮寄信息
        id int(10) primary key,
        user_info_id char(36),
        real_name varchar(8) not null,
        mobile char(11) not null,
        address varchar(150) not null,
        constraint address_user_info_id_fk foreign key(user_info_id) references user_info(id)//添加外键约束
    );
    

    分析:这种方案为user_info_id添加了外键,指向user_info表的主键,该约束起到了保护数据完整性的作用:如果删除的用户信息id已经在address表中使用,则该条数据无法删除;也无法向address表中添加用户id不存在的地址信息。

    三、外键使用时的注意事项

    1、要求在从表设置外键关系;
    2、从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求;
    3、主表的关联列必须是一个key(一般是主键或唯一);
    4、插入数据时,先插入主表,再插入从表;删除数据时,先删除从表,再删除主表;
    5、可以通过以下两种方式来删除主表的记录:
      方式一:级联删除:ALTER TABLE stuinfo ADD CONSTRAINT fk_stu_major FOREIGN KEY(majorid) REFERENCES major(id) ON DELETE CASCADE;
      方式二:级联置空:ALTER TABLE stuinfo ADD CONSTRAINT fk_stu_major FOREIGN KEY(majorid) REFERENCES major(id) ON DELETE SET NULL。

    展开全文
  • 参照完整性约束(外键约束(Foreign key)) 用户定义完整性约束 参照完整性 属于间规则,用来保持之间的关系,确保插入到中的数据是有效的。 可以使用外键***foreign key*** 来实现 创建外键 问题:如果不加...

    数据完整性

    数据完整性包括
    实体完整性约束
    域完整性约束
    参照完整性约束(外键约束(Foreign key))
    用户定义完整性约束

    参照完整性

    属于表间规则,用来保持表之间的关系,确保插入到表中的数据是有效的。
    可以使用外键***foreign key*** 来实现

    创建外键

    问题:如果不加约束,学生表,课程表,成绩表是独立的,很可能造成数据不一致的情况,如何解决这一问题呢?

    我们可以为成绩表设置2个外键,学号和课程号。

    为成绩表设置外键:
    1.添加第一个外键sno
    在成绩表的表设计器左侧右击,选择关系,打开外键关系对话框,表和列规范

    在这里插入图片描述
    在这里插入图片描述

    点击保存-是(因为表中有数据)

    2.添加第二个外键cno
    在这里插入图片描述

    3.验证外键的作用
    TO BEGIN WITH(学生表中有五名学生)
    在这里插入图片描述
    FUTHEREMORE(课程表中有三门课程)
    在这里插入图片描述
    LAST (验证外键:修改学号/课程号 为不存在的 比如将01改为09) 提示错误
    在这里插入图片描述
    打开学生表,选中某学生,右击删除(删除失败)
    在这里插入图片描述
    在这里插入图片描述
    删除失败(因为在成绩表中,有对应的成绩,如果想要删除01好学生,则需要删除其对应的成绩)

    设置级联 删除与更新(需要修改外键的设置)

    打开成绩表中的外键 - 表设计其器(学号外键和课程号外键同理操作)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    保存 - 是

    验证级联删除和更新
    再来删除01号学生,右击删除,删除成功
    在这里插入图片描述

    刷新成绩表(即可看到01号学生的成绩被删除)
    在这里插入图片描述

    外键特点

    1.必须先为表创建主键,才能创建外键

    2.一个表可以有多个外键

    展开全文
  • 外键约束:foreign key 1.1 非空约束:not null 1)在创建添加约束: CREATE TABLE stu( id INT, NAME VARCHAR(20) NOT NULL -- name非空 ); 2)创建后再添加非空约束: ALTER TABLE stu MOD...
  • mysql添加外键约束

    2017-05-17 16:34:29
    当我们使用mysql数据库进行开发时,经常会碰到需要用主外键将两张关联起来的业务场景,在创建时最好就将主外键都创建好,数据库设计初衷就是不建议在已经使用的过程中添加约束条件,如果中已经存在数据,需要将...
  •  除了数据类型以外额外添加约束  约束的作用:  为了保证数据的完整性 合法性  分类:  not null 非空约束 数据不能空  create table stu(id int , name char(10) not bull);    default ...
  • 原因就是数据库表引擎:MyISAM,建立主外键关系需要是InnoDB; 解决方案:alter table table_name1 engine=innodb;改变两个的引擎; 如果还是不行:删除外键表数据,建立外键索引,再次建立主外键关系。 ...
  • 1.创建的同时,添加主键约束 语法: create table "表名"("列名1"数据类型及长度 constraint "主键名称"(一般主键名称”PK_”开头) primary key,"列名2" 数据类型及长度 not null,——-not null 约束该列不...
  • 对oracle数据库表添加主键约束

    千次阅读 2017-10-04 15:22:18
    –创建主外键(可以在创建的同时添加外键约束,也可以 –创建完成后再添加约束 )—–方法一:创建的同时,添加主键约束语法:create table 表名 ( 列名1 数据类型及长度 constraint 主键名称(一般主键...
  • 使用了费空约束的字段如果在添加数据时,没有指定值,数据库系统会报错。 添加非空约束 或者 删除非空约束 主键约束: 注意:一张中最多有一个主键约束。主键类型:单字段主键、多字段...
  • 申明:资料来源于网络及书本...外键约束(foreign key) 主键约束:(primary key) 默认不能重复不能空。 在创建的时候添加主键,通常情况都是在这个时候添加主键: create table 表名(字段名1 数据类型 primary key
  • 添加外键约束: 给 goods中的 cate_id字段添加 goods_cates中的 id字段 外键约束。 alter table goods add foreign key (cate_id) references goods_cates(id); 取消外键约束: 首先需要获取外键约束名称,...
  • 1.外键字段不能的主键 2.外键字段参考字段必须参考的主键 3.字段数据类型必须一致 4.数据库表引擎必须一致 5.字符集和排序规则必须一致 如果仍然无法解决,那就备份一下数据,然后重建 ...
  • oracle 数据库添加外键

    千次阅读 2010-11-23 18:31:00
    今天做项目时遇到要给表添加外键的问题,查了一下资料: 创建外键约束时假如使用Oracle默认的创建方式,在删除被参照的数据时,将无法被删除,这一点在Oracle9i中给了我们更多灵活的选择,我们可是使用on...
  • 建表时添加外键约束 什么要有外键约束 -- 创建db2数据库 CREATE DATABASE db2; -- 使用db2数据库 USE db2; -- 创建user用户 CREATE TABLE USER( id INT PRIMARY KEY AUTO_INCREMENT, -- id NAME VARCHAR(20...
  • 然后,可添加一个数据检查约束,在可空的外键中检查数据的有效性。 任何多列外键都可能遇到同样的问题。所以,你需要添加一个检查约束来检测异常。最初,检查约束将检查构成外键的所有列中可能空的值。检查...
  • 1.为表添加外键约束: 想要真正连接两个表的数据,就需要为表添加外键约束。添加外键约束的语法格式: ALTER TABLE 表名 ADD CONSTRAINT FK_ID FOREIGN KEY(外键字段名) REFERENCES 主表表名(主键字段名); 被引用...
  • 1.插入数据时的外键约束 由于我们在category这个中没有定义pid=8,所以在这里无法插入 ...由于我们在product中添加了分类IP5的数据,所以我们无法删除 delete from category where cid=5; ...
  • 数据库实现(一对多)2.1一对多情况的引入2.2利用外键实现一对多2.3数据库实现(一对多)2.3.1不设置外键的情况2.3.2主(多)和从(一)之间添加外键2.3.3添加外键约束后的2个特点(重要)2.3.4小...
  • mysql主外键约束

    2019-12-06 10:26:01
    mysql是关系型数据库,顾名思义之间可以发生关系,外键约束可以理解cookie和json的关系,把一个的字段value设置另一个的主键value使两张产生关联,跟据一个的值就可以查询判断另一个有没有此字段...
  • 数据库18:外键

    2020-03-19 22:11:14
    数据库 十八、外键 外键:从的公共字段 外键的约束主要是用来保证引用的完整性的,主外键的名字可以不一样,但是 数据类型可以一样。 特点: 主中不存在的记录,从中不能...添加外键 alter table score add f...
  • Day08一、SQL约束1、主键约束2、非空约束3、唯一约束4、自动增长二、外键约束三、多关系1、一对多2、多对多3、一对一四、多查询1、笛卡尔积现象2、子查询 一、SQL约束 1、主键约束 PRIMARY KEY 约束,用于标识...
  • mysql数据表添加外键(一) 收藏

    千次阅读 2010-09-27 18:47:00
    ——————– 参照完整性(完整性约束)是数据库设计中的一个重要概念,当数据库中的一个与一个或多个进行关联时都会涉及到参照完整性。比如下面这个例子: 文章分类 - categories ...
  • ——————–参照完整性(完整性约束)是数据库设计中的一个重要概念,当数据库中的一个与一个或多个进行关联时都会涉及到参照完整性。比如下面这个例子:文章分类 - categoriescategory_id name1 SQL Server2...
  • mysql中添加外键约束遇到一下情况: cannot add foreign key constraint 出现这个问题一般是开发工作者对外键的使用出现了疏忽,我们先清晰一下外键的使用: 外键字段不能的主键; 外键字段参考字段必须...
  • 工程上什么不用外键来创建数据库表 ** 不使用外键,我们可以随意往添加删除数据; 使用外键有利于维持数据完整性和一致性,但是对于开发来说是非常不利的。 每次做DELETE 或者UPDATE都必须考虑外键约束,会...
  • 4. 外键约束:foreign key 方便设计一对多关系,比如员工和部门的对应关系 * 非空约束:not null,值不能null 1. 创建添加约束 CREATE TABLE stu( id INT, NAME VARCHAR(20) NOT NULL --
  • NAVICAT建立外键约束

    千次阅读 2019-05-18 02:16:27
    字段(选择需要添加外键的字段) 参考模式(选择所在的数据库) 参考(关联表名) 参考字段(关联的关联字段) 删除时(当删除关联时,set null该字段置空) 更新时(当关联更新时,该字段级联更新) ...

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 284
精华内容 113
关键字:

数据库为表添加外键约束