精华内容
下载资源
问答
  • 怎样建立表与表之间的约束
    2021-02-02 05:15:56

    数据库表与表之间通过主外键来建立联系。如果为表指定了主键约束, 数据库引擎将通过为主键列自动创建唯一索引来强制数据的唯一性;而外键是用于在两个表中的数据之间建立和加强链接的一列或多列的组合,可控制可在外键表中存储的数据。

    324e8a4849177d749aef9ddaf0bd2a62.png

    本教程操作环境:windows7系统、mysql5.8版、Dell G3电脑。

    数据库表与表之间通过主外键来建立联系。

    主键约束

    表通常具有包含唯一标识表中每一行的值的一列或一组列。 这样的一列或多列称为表的主键 (PK),用于强制表的实体完整性。 由于主键约束可保证数据的唯一性,因此经常对标识列定义这种约束。

    如果为表指定了主键约束, 数据库引擎 将通过为主键列自动创建唯一索引来强制数据的唯一性。 当在查询中使用主键时,此索引还允许对数据进行快速访问。 如果对多列定义了主键约束,则一列中的值可能会重复,但来自主键约束定义中所有列的值的任何组合必须唯一。

    如下图所示, Purchasing.ProductVendor 表中的 ProductID 和 VendorID 列构成了针对此表的复合主键约束。 这确保了 ProductVendor 表中的每个行都具有 ProductID 和 VendorID 的一个唯一组合。 这样可以防止插入重复的行。

    ff055ba5295d231f96124dbbf6b63bbc.gif一个表只能包含一个主键约束。

    主键不能超过 16 列且总密钥长度不能超过 900 个字节。

    由主键约束生成的索引不会使表中的索引数超过 999 个非聚集索引和 1 个聚集索引。

    如果没有为主键约束指定聚集或非聚集索引,并且表中没有聚集索引,则使用聚集索引。

    在主键约束中定义的所有列都必须定义为不为 Null。 如果没有指定为 Null 性,则参与主键约束的所有列的为 Null 性都将设置为不为 Null。

    如果在 CLR 用户定义类型的列中定义主键,则该类型的实现必须支持二进制排序。

    外键约束

    外键 (FK) 是用于在两个表中的数据之间建立和加强链接的一列或多列的组合,可控制可在外键表中存储的数据。 在外键引用中,当包含一个表的主键值的一个或多个列被另一个表中的一个或多个列引用时,就在这两个表之间创建了链接。 这个列就成为第二个表的外键。

    例如,因为销售订单和销售人员之间存在一种逻辑关系,所以 Sales.SalesOrderHeader 表含有一个指向 Sales.SalesPerson 表的外键链接。 SalesOrderHeader 表中的 SalesPersonID 列与 SalesPerson 表中的主键列相对应。 SalesOrderHeader 表中的 SalesPersonID 列是指向 SalesPerson 表的外键。 通过创建此外键关系,如果 SalesPerson 表的主键中不存在 SalesPersonID 的值,则 SalesPersonID 的值将无法插入到 SalesOrderHeader 表。

    表最多可以将 253 个其他表和列作为外键引用(传出引用)。 SQL Server 2016 (13.x) 将可在单独的表中引用的其他表和列(传入引用)的数量限制从 253 提高至 10,000。 (兼容性级别至少必须为 130。)数量限制的提高带来了下列约束:只有 DELETE DML 操作才支持超过 253 个外键引用。 不支持 UPDATE 和 MERGE 操作。

    对自身进行外键引用的表仍只能进行 253 个外键引用。

    列存储索引、内存优化表、Stretch Database 或已分区外键表暂不支持进行超过 253 个外键引用。

    外键约束的索引

    与主键约束不同,创建外键约束不会自动创建对应的索引。 但是由于以下原因,对外键手动创建索引通常是有用的:当在查询中组合相关表中的数据时,经常在联接条件中使用外键列,方法是将一个表的外键约束中的一列或多列与另一个表中的主键列或唯一键列匹配。 索引使 数据库引擎 可以在外键表中快速查找相关数据。 但是,创建此索引并不是必需的。 即使没有对两个相关表定义主键或外键约束,也可以对来自这两个表中的数据进行组合,但两个表间的外键关系说明已用其键作为条件对其进行了优化,以便组合到查询中。

    对主键约束的更改可由相关表中的外键约束检查。

    更多编程相关知识,请访问:编程视频!!

    更多相关内容
  • 目录外键如何查找关系外键约束条件:多对多关系之一对一外键 在介绍外键之前呢我们先来点 前戏 1、定义一个员工 id name age dep_name dep_desc 1 jason 18 外交部 搞外交 2 kevin 28 教学部 ...

    外键

    在介绍外键之前呢我们先来点 前戏

    1、定义一个员工表
        id	 name	  age 	      dep_name	        dep_desc
        1	jason	  18		外交部		搞外交
        2	kevin	  28		教学部		教书育人
        3	tony	  38		教学部		教书育人
        4	oscar	  48		安保部		保家卫国
        5	jackson	  58		财务部		发工资
        
    我们看一下这个表有没有什么不足之处(不清晰地方):
    1. 表内部数据混乱:这个表是以员工信息为主呢还是以部门分配为主呢
    2. 反复的录入重复的数据 :多个部分可对应多个员工(录入数据的话很繁琐)
    3. 修改数据太过繁琐 浪费磁盘空间
    4. 极大地影响了操作数据的效率
    
    
    #  如何解决这一问题呢:
    我们将上述表拆分成两张表 (员工表)  (部门表)
        id	name	age 
        1	jason	18
        2	kevin	28
        3	tony	38
        4	oscar	48
        5	jackson	58
        
        id	dep_name	dep_desc
        1	外交部		搞外交
        2	教学部		教书育人
        3	安保部		保家卫国
        4	财务部		发工资
        
    这样就解决了上述是个缺陷
    那个怎么让这两个表产生关系呢。
    
    所以有了'外键' : 用来记录表与表之间的关系

    如何查找表关系

    表与表主键的关系只有四种:
    1.多对一  (一对多就是多对一)
    2.多对多
    3.一对一
    4.没有关系

    查找表关系:换位思考即可

    解释:

    1、多对一
    书籍表与出版社表之间的关系:
    	1、站在书籍表的角度
        	问:一本相同内容的书能否对应多个出版社
            答:不可以
         2、站在出版社的角度
        	问:一个出版社是否可以对应多个书籍
            答:可以
            
    #  结论 :一个可以一个不可以 表关系即为:‘多对一’

    实例:在写外键字段时,先普通字段再考虑外键字段这样不容易出错

    外键关键字:foreign key(本表的外键字段) references 被关联表表明(被关联表表的id字段)
    这样写:本表的外键字段只能写另一张表的id字段(这样才能产生关系)
    
    # 创建表:
    书籍(关联表):
    create table book(
        id int primary key auto_increment,
        title varchar(32),
        price int comment '价格',
        pub_id int comment '外键字段',
        foreign key(pub_id) references publish(id)
    );
    
    出版社(被关联表):
    create table publish(
        id int primary key auto_increment,
        name varchar(32)
    );
    
    
    # 存储数据:一定要先存储被关联表数据
    关联表:
    	insert into publish(name) values('东方出版社'),('西方出版社');
    	
    被关联表:
    	insert into book(title,price,pub_id) values('python',20000,1),('linux',30000,2),('java',22000,1),('php',120000,2);

    外键约束条件:

    1. 在创建表的时候需要先创建被关联表(没有外键的表)
    	解释:因为没有被关联表 在创建表的时候无法识别到被关联表 就会报错
    
    2. 在写入数据的时候也需要先录入被关联表(没有外键的表)
    	解释:因为在存储信息的时候 如果被关联表没有外键字段也是无法关联的 就会出现报错
    
    3. 被关联表里面的数据无法直接删除和修改关联字段的操作
    	解释:被关联表删除了 那关联表中的外键字段指向谁就不知道了 导致数据错乱 
    
    	# 如果想修改或者删除被关联表的字段那么关联表的外键字段也同时进行修改或者删除才合理
    	这里就有一个固定的方法:级联更新 级联删除
    	关键字:
    		on update cascade
    		on delete cascade

    实例:演示 on updata cascade 与 on delete cascade

    # 创建表:必须先创建被关联表
    关联表:
    create table emp(
        id int primary key auto_increment,
        name varchar(32),
        age int,
        dep_id int comment '部门编号',
        foreign key(dep_id) references dep(id)
        on update cascade
        on delete cascade
    );
    #  注:on updata cascade与on delete cascade不要加逗号因同属于一条命令
    
    被关联表:
    create table dep(
        id int primary key auto_increment,
        name varchar(32)
    );
    
    
    # 存储数据(一定要先存储被关联表数据)
    insert into dep(name) values('外交部'),('安保部'),('财务部');
    
    insert into emp(name,age,dep_id) values('jaosn',12,1),('tom',13,2),('kaka',14,3),('huhu',15,2);
    存储好信息后我们来验证一下修改和删除被关联表id字段,验证关联表是否跟着改变
    
    修改被关联表id字段:
    	update dep set id=20 where id=2;
    	
    # 如果一个公司部门编号改动的话可以使用到

    多对多

    以书籍表与作者表为例
        1.先站在书籍表的基础之上
        	问:一本书能否对应多个作者
            答:可以(很多书籍都是由多个作者编写而成得)
        2.在站在作者表的基础之上
        	问:一个作者能否对应多本书
             答:可以
        结论:两个都可以那么表关系就是"多对多"
            这时就需要第三个表:外键字段建在第三张关系表中

    实例:

    如果只有两个表:
    
    create table book1(
        id int primary key auto_increment,
        title varchar(32),
        author_id int,
        foreign key(author_id) references author1(id) 
        on update cascade 
        on delete cascade
    );
    create table author1(
        id int primary key auto_increment,
        name varchar(32),
        book_id int,
        foreign key(book_id) references book1(id) 
        on update cascade 
        on delete cascade
    );
    
    
    这样创建外键建立彼此之间的联系的话是不行得,
    因为在创建第一个表关联第二个表的时候没有被关联得表二
    在创建第二个表关联第一个表的时候没有被关联表一
    # 所以这是错误得多对多创建方式

    正确的创建方式:引入第三个表

    # 创建表
    
    书籍表:
    create table book1(
        id int primary key auto_increment,
        title varchar(32)
    );
    
    作者表:
    create table author1(
        id int primary key auto_increment,
        name varchar(32)
    );
    
    关系表:
    create table book2author(
    	id int primary key auto_increment,
        author_id int,
        foreign key(author_id) references author1(id)
        on update cascade
        on delete cascade,	
        book_id int,
        foreign key(book_id) references book1(id)
        on update cascade
        on delete cascade
    );
    
    
    # 存储数据
     书籍表:
     insert into book1(title) values('python'),('java'),('mysql');
     
     作者表:
     insert into author1(name) values ('tom'),('gary');
     
     关系表:
     insert into book2author(author_id,book_id) values(1,1),(1,2);
     insert into book2author(author_id,book_id) values(2,2),(2,3);

    表关系之一对一

    引子

    我们以qq来举例一个场景:
    	我们在录入完扣扣信息的时候,每次显示得只是我们得基本信息数据,比如我们在点击别人得头像看他的信息时,直显示一个扣扣号,个性签名,昵称等基本信息。如果想要查看他的详情信息是不是还要点击右上角得三个点,查看详情等相关按钮才可以看到他的,手机号呀 邮箱 出生年月日等等。

    img

    那么扣扣在做的时候就是将这两个数据拆分成两个表 : 一个用户表 一个用户详情表
    
    那么用户在查看基本信息得时候只给用户表的信息。
    如果用户点击查看详情,那么才会把用户得详情表内信息给到客户。
    
    那么这两种表是什么关系呢?
    以用户表与用户详情表为例:
    	问:一个用户是否可以对应多条用户详情信息?
    	答:不可以
    	
    	问:一个用户详情能否对应多个用户?
    	答:不可以
    	
    我们上述分析过:一个可以一个不可以即为多对一,那么两边都不可以是什么呢?
    那么两边都不可以换位思考后,表关系只有两种
    	1.没有关系
    	2.一对一表关系
    那么一对一表关系得外键字段建立在哪里呢?
    	理论上一对一外键字段建立在任何一个表里都可以,但是推荐建立在查询频率较高的表中

    实例SQL语句:

    创建表:
    提示 :外键关键字:foreign key(本表的外键字段) references 被关联表表明(被关联表的id字段)
    
    用户表:
    create table user(
        id int primary key auto_increment,
        name varchar(32),
        detail_id int unique,  # 这里记得添加约束条件unique因为这是一对一关系不能出现重复外键
        foreign key(detail_id) references user_detail(id)   # 建立外键
        on update cascade
        on delete cascade
    );
    
    用户详情表:(记得先创建这个被关联表)
    create table user_detail(
        id int primary key auto_increment,
        addr varchar(32),  # 地址
        phone bigint  # 手机号
    );

    结论:其实一对一关系表就是添加了一个约束条件unique

    展开全文
  • MySQL 表与表之间建立关系

    千次阅读 2021-02-06 16:25:24
    今天核心的内容就是怎样让表与表之间产生关系,在思考这个问题的时候,我们可以回顾之前学习python时,当一个任务涉及到很多的功能时,我们为了让程序的结构更清晰,扩展性更高,我们选择用函数>>模块>>...

    引子:如下图是一张非常寻常的表格,在以前的工作中实常会制作类似的表格,但是今天的数据库内容,将我之前这种传统的制表思路上升了一个层次;

    今天核心的内容就是怎样让表与表之间产生关系,在思考这个问题的时候,我们可以回顾之前学习python时,当一个任务涉及到很多的功能时,我们为了

    让程序的结构更清晰,扩展性更高,我们选择用函数>>模块>>包 的方式将功能层层拆分,最终让程序结构上升到新的层次,而且极大的降低了代码的冗

    余。再回到这张表,如果说总共就这几个人,这张表没什么问题,但是假设我们拥有100w的用户,此时表中的 def_name,dep_desc就有些冗余了;此外

    这种表的形式也非常不利于后期数据的取值和修改。

    8b5c2d35784d814fc3f9528eb4e692ff.png

    实现思路:把内容多出现重复的字段拎出来制作成具有id的新表,将两张表建立联系。

    第一步 拆分表

    298cd8f32f63e4bbf758ea645912fa08.png

    第二步 建立关联(通过dep_id字段链接两张表)

    da0daf482d29a6b756c5287b76eecf2e.png

    注意:1.必选要先建被关联表;

    2.新增数据的时候,要先增被关联表中的数据;

    create table dep(

    id int primary key auto_increment,#id设置为主建,自增

    dep_name char(16),

    dep_desc char(64) #注意最后一个括号后面一定不要加逗号!

    );

    create table emp(

    id int primary key auto_increment,

    name char(16),

    gender enum(‘male‘,‘female‘,‘others‘) not null default ‘male‘, #default后面的默认值空格直接书写即可

    dep_id int,

    foreign key(dep_id) references dep(id)#外键 本表中的dep_id 字段 ,关联dep表中的id字段;

    );

    插入数据

    2.新增数据的时候,要先增被关联表中的数据

    insert into dep(dep_name,dep_desc) values

    (‘外交部‘,‘形象代言人‘),

    (‘教学部‘,‘教书育人‘),

    (‘技术部‘,‘技术能力有限部门‘);

    insert into emp(name,gender,dep_id) values

    (‘jason‘,‘male‘,1),

    (‘egon‘,‘male‘,2),

    (‘kevin‘,‘male‘,2),

    (‘tank‘,‘male‘,2),

    (‘jerry‘,‘female‘,3);

    修改dep_id 数据

    update emp set dep_id=100 where id=1; #修改dep_id数据 结果报错。

    但我们可以选择先删除关联表中的数据后,再更改与其关联表emp中的字段。但这

    并不是最好的解决办法

    第三步 深度关联(修改/删除同步)on update cascade on delete cascade

    create table dep(

    id int primary key auto_increment,

    dep_name char(16),

    dep_desc char(64)

    );

    create table emp(

    id int primary key auto_increment,

    name char(16),

    gender enum(‘male‘,‘female‘,‘others‘) not null default ‘male‘, #default后面的默认值空格直接书写即可

    dep_id int,

    foreign key(dep_id) references dep(id)

    on update cascade#同步更新

    on delete cascade #同步删除

    );

    一对多,上面这个案例就是一对多的案例。

    多对多(第三张表牵线搭桥)

    当我们面对的是两张表互相之间都是多对一的情况,也就是多对多的情况时,就会出现互为外键,如果还是安装上面的方法创建,就会出现无法创建表的情况。此时我们需要第三张表来作为中间人,

    为两张表牵线搭桥,让它们产生关联。

    书与作者案例

    3344576ac6429b9232d9048c35327946.png

    多对多案例实现

    create table book(

    id int primary key auto_increment,

    title char(16),

    price int

    );

    create table author(

    id int primary key auto_increment,

    name char(16),

    gender char(16)

    );

    create table book2author(

    id int primary key auto_increment,

    book_id int,

    author_id int,

    foreign key(book_id) references book(id)

    on update cascade#同步更新

    on delete cascade, #同步删除

    foreign key(author_id) references author(id)

    on update cascade#同步更新

    on delete cascade #同步删除

    );

    插入数据

    insert into book(title,price) values

    (‘瓶金梅‘,‘69.96‘),

    (‘围城‘,‘99.99‘),

    (‘python全栈开发‘,‘21000‘);

    insert into author(name,gender) values

    (‘jason‘,‘male‘),

    (‘egon‘,‘female‘),

    (‘kevin‘,‘male‘);

    insert into book2author(book_id,author_id) values

    (1,1),

    (1,2),

    (1,3),

    (2,1),

    (2,3),

    (3,1),

    (3,2);

    一对一

    修改表

    语法:

    1. 修改表名

    ALTER TABLE 表名

    RENAME 新表名;

    2. 增加字段

    ALTER TABLE 表名

    ADD 字段名  数据类型 [完整性约束条件…],

    ADD 字段名  数据类型 [完整性约束条件…];

    ALTER TABLE 表名

    ADD 字段名  数据类型 [完整性约束条件…]  FIRST;

    ALTER TABLE 表名

    ADD 字段名  数据类型 [完整性约束条件…]  AFTER 字段名;

    3. 删除字段

    ALTER TABLE 表名

    DROP 字段名;

    4. 修改字段

    ALTER TABLE 表名

    MODIFY  字段名 数据类型 [完整性约束条件…];

    ALTER TABLE 表名

    CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…];

    ALTER TABLE 表名

    CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];

    复制表

    # 复制表结构+记录 (key不会复制: 主键、外键和索引)

    create table new_service select * from service;

    # 只复制表结构

    select * from service where 1=2;        //条件为假,查不到任何记录

    create table new1_service select * from service where 1=2;

    create table t4 like employees;

    原文:https://www.cnblogs.com/guanchao/p/10862282.html

    展开全文
  • 与表之间建立关系

    千次阅读 2021-03-02 19:04:26
    1、表与表之间的关系可以分为三种:一对多,多对多,一对一的关系  建立表关系的原因?: 2、 针对数据量大的情况下讨论  1:表的结构不清晰(一张表中涵盖多种数据)  2:浪费硬盘空间(有重复的数据)  3:表的...

    一、表的概念与分类

    主要通过外键关键字:pirmary key 来建立连系
    1、表与表之间的关系可以分为三种:一对多,多对多,一对一的关系
      建立表关系的原因?:
    2、 针对数据量大的情况下讨论
      1:表的结构不清晰(一张表中涵盖多种数据)
      2:浪费硬盘空间(有重复的数据)
      3:表的扩展性极差(不便于增加,修改,删除等操作)

    二、表与表的关系:一对多

    例如:一个公司的员工和部门之间的连系,把员工和部门分别抽离出来分析
      (1)先站在员工表看能否有多个员工对应一个部门>>>一个部门能否有多个员工(可以)
      (2)再站在部门表看能否有多个部门对应一个员工>>>一个员工能否属于多个部门(不可以)

    结论:员工表和部门表之间的关系是“一对多”的关系(一对多或者多对一)
    在这里插入图片描述
    根据id索引来寻找匹配的内容先通过列表的形式,把一张完整的表切分出来,分析它们之间的关系多对一还是多对多就可以看出情况,换位思考!

    foreign key:外键约束
      1、创建表的时候,必须先创建被关联的表
      2、插入数据的时候,也必须先插入被关联表的数据(先后顺序不能颠倒,不然会报错!)
    代码如下:
      建表:

    # 先建被关联的表
    
    create table dep(
        id int primary key auto_increment,
        dep_name varcher(32),
        dep_desc varcher(128)
    
    );
    
    # 后建数据多的表
    create table emp(
    id int primary key auto_increment,
    emp_naem varchar(64),
    emp_gender enum('male','female','others') default 'male',
    dep_id int,
    foreidn key(dep_id) references dep(id)
    
    );
    

    插入数据:

    insert into dep(dep_name,dep_desc) values('外交部','搞外交'),
            ('教学部','教书育人'),
            ('技术部','技术能力有限部门')
            ;
    
    insert into emp(emp_name,dep_id) values('jack',1),
         ('reso',2),
         ('gelen','3'),
         ('james',2);
    

    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210302190842410.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzUyNTEyOTM4,size_16,color_FFFFFF,t_70
    在这里插入图片描述
    在这里插入图片描述
    2、修改表数据
      通过主键和对应的关系可以对表中的记录增加,修改,删除等操作,也是有先后顺序的

    update dep set id=200 where id=1; # 修改id
    update emp set dep_id =300 where id=1;
    
    delect from dep where id=3; # 删除id3的数据记录
    

    外键虽然能够强制的建立表的关系,但是也会给表的数据之间增加了相关的约束

    1.删除数据的时候  先删员工表的数据 再删部门表的数据
        delete from emp where id = 4;
        delete from dep where id = 3;
    2.级联更新级联删除
    

    3、级联更新、级联删除

    create table dep(
    id int primary key auto_increment,
    dep_name varchar(32),
    dep_desc varchar(128)
    
    );
     
    caeate table emp(
    id int primary key auto_increment,
    emp_name carchar(64),
    emp-gender enum('male','female','othres') default 'male',
    foreign key(dep_id) references dep(id)
    on update cascade
    on delete cascade # 联级修改 删除
    );
    
    # 插入数据
     insert into dep (dep_name,dep_desc) values('外交部',‘搞外交’),(’教学部‘,’教书育人‘),(’技术部‘,’技术能力有限部门‘)
    insert into emp(emp_name,dep_id) values('jack',2),('rose',1),('kevin',3),('galen',1);
    
    # 修改 删除数据
    update dep set id=200 where id=3;
    delect from dep where id=2;
    

    在这里插入图片描述

    三、多对多的关系

    例如:书籍和作者的关系

    换位思考:站在书籍的角度和作者的角度思考,多本书可以被一个作者写,多个作者也能写一本书,

    条件成立,属于多对多,外键已经不能够表达这种关系了,必须通过建立第三方表来记录两者之间的关系
    在这里插入图片描述
    先建两种普通的表 不需要设置外键

    create table book(
        id int primary key auto_increment,
        title varchar(32),
        price int
    );
    create table author(
    id int primary key auto_increment,
    name varcher(32),
    age int
    
    );
    # 手动创建第三方表
    create table book2author(
        id int primary key auto_increment,
        book_id int,
        foreign key(book_id) references book(id)
        on uptade cascade
        on delete cascade , # 直接建立级联
    
        author_id int,
        foregn key (author_id) refrrences  author(id)
        on update cascade
        om delete cascade  #
     
    );
    

    插入数据:

    insert into book(title,price) values('百年孤独'60),(‘丰乳肥臀’,90),(‘疯狂说英语’,129);
    
    insert into auther (nane,age) values('西亚·马尔克斯'98),(‘莫言’,87),(‘李阳’,53);
    
    
    insert into book2auther(book_id,age) values(1,2),(2,3),(2,1),(1,3);
    

    在这里插入图片描述
    **

    四、一对一关系

    **
      1:一对一的场景,当数据量过大的时候,可以考虑把表给拆分开

    2:如老男孩的客户和学生关系(没交学费前和交学费后)

    3:姓名、电话,地址
      在这里插入图片描述
    一对一的关系:外键字段都可以建在任意一方,一般建议把外键字段建立在查找频繁的那一方

    创建表:

    # 左表的一条记录唯一对应右表的一条记录,反之也一样
    
    create table customer(
        id int primary key auto_increment,
        name char(20) not null,
        qq char(10) not null,
        phone char(16) not null
    );
    
    create table student(
        id int primary key auto_increment,
        class_name char(20) not null,
        customer_id int unique, #该字段一定要是唯一的
        foreign key(customer_id) references customer(id) #外键的字段一定要保证unique
        on delete cascade
        on update cascade
    );
    # 三种外键关系都是用foreign key,区别在于如何使用以及其他条件限制即可做出三种关系
    

    了解知识点:
      修改表的完整语句

    1.修改表的完整语句
                1. 修改表名  
                      ALTER TABLE 表名 
                                          RENAME 新表名;
                2. 增加字段
                      ALTER TABLE 表名
                                          ADD 字段名  数据类型 [完整性约束条件…],
                                          ADD 字段名  数据类型 [完整性约束条件…];
                      ALTER TABLE 表名
                                          ADD 字段名  数据类型 [完整性约束条件…]  FIRST;  # 直接移到最前面
                      ALTER TABLE 表名 
                                          ADD 字段名  数据类型 [完整性约束条件…]  AFTER 字段名;  # 寻找插哪个字段的后面                    
                3. 删除字段
                      ALTER TABLE 表名 
                                          DROP 字段名;
                4. 修改字段  # modify只能改字段数据类型完整约束,不能改字段名,但是change可以!
                      ALTER TABLE 表名 
                                          MODIFY  字段名 数据类型 [完整性约束条件…];
                      ALTER TABLE 表名 
                                          CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];
    
    # 查询语句执行的结果也是一张表,可以看成虚拟表
    
        # 复制表结构+记录 (key不会复制: 主键、外键和索引)
        create table new_service select * from service;
    
        # 只复制表结构
        select * from service where 1=2;        //条件为假,查不到任何记录
    
        create table new1_service select * from service where 1=2;  
    
        create table t4 like employees;
    
    展开全文
  • 数据库(三) 表与表建立联系-外键

    千次阅读 2021-02-06 11:48:42
    1.理解表与表之间建立关系的必要性比如我们建立了一张个人信息表,把所有人的信息都存在这张表中这张表中有老师和他们所属的部门,并且不同的部门工作也是不同的所有数据存放在一张表中的弊端1.组织结构不清晰2.浪费...
  • 限制两关系,通常在从引入外键约束,引入主中某列的值,保证从该字段的值必须来源于主关联列的值DEFAULT默认值/系统设定值二,约束和列级约束的定义:约束:对多个数据列建立约束,称为约束表级...
  • 在使用PHPAdmin建立数据库之后,要添加外键约束,即建立与表之间(字段之间的联系) 首先在建立表的过程中也写需要注意的点 1、设置主键 2、有可能会用到的关联字段要记得设置唯一性 3、将所有要建立关系...
  •  1,表与表之间约束不能同名    2,表与自定义约束之间不能同名。    当然有人会说,这有什么,定义的时候报错就知道了,还有更大的坑。  这里涉及到约束的另一种定义方法,建表的过程中指定...
  • 由于增删改了emp中的记录,因此这里重新创建了一个脚本并使用create database bjpowernnode;use bjpowernode;source C:\Users\Administrator\Desktop\bjpowernode.sql;文章目录约束1. not null(非空约束)2. unique...
  • 一篇文章带你彻底搞懂搞懂MySQL中的主键和外键约束 本文主要使用Navicat for MySQL 通过编程和代码测试 来分析SQL语言的常用约束条件:主键约束 和 外键约束
  • MySQL创建表与表之间的联系

    千次阅读 2021-01-19 03:37:26
    --课程状态默认值(未审核) teacher_no char(10) 非空 唯一 外键 --主讲老师|课程和教师表之间的外键 create tablecourse( course_noint auto_increment primary key, course_namechar(16) not null, up_limitint...
  • 主键约束(1)创建时定义完整性约束(2)修改的主键3.外键约束(1)参照完整性(2)设置外键的原则:(3)对已有的添加外键(4)在创建时创建外键4.检查约束5.唯一性约束1.非空约束在前面的数据定义过程中,每个字段都...
  • foreign key 功能 : 建立与表之间的某种约束的关系,由于这种关系的存在,能够让表与表之间的数据,更加的完整,关连性更强,为了具体说明创建如下部门表和人员表。 示例 # 创建部门表 CREATE TABLE dept (id int...
  • Mysql中如果表之间建立的外键约束,则无法删除及修改结构。 解决方法是在Mysql中取消外键约束: SET FOREIGN_KEY_CHECKS=0;  然后将原来的数据导出到sql语句,重新创建此后,再把数据使用sql...
  • 数据约束

    千次阅读 2022-03-14 09:07:26
    数据约束 为防止错误的数据被插入到数据,MySQL中定义了一些维护数据库完整性的规则;这些规则常称为约束。常见约束如下: 约束条件 说明 PRIMARY KEY 主键约束,用于唯一标识对应的记录 ...
  • 外键约束 今天跟大家聊聊这个外键约束,简单来说呢,就是,嗯,,关于两个的操作。...被依赖的我们通常称之为父或者主,设置外键约束称为子或者从。 举个例子:如果想要表示学生和
  • 本文尝试用实际开发中常见的电商场景来厘清其背后需要的数据库中表与表之间的关系,目的在于能够分析出常见购物网站的中实体间的关系,并能创建出对应的表。 文章目录1.实体间常见关系2.数据库实现(一对多)2.1一对...
  • SQL创建以及约束

    2021-10-10 15:41:57
    DROP TABLE teacher purge;...--创建主键约束(使用constraint 关键字引导创建) Constraint pk_tno PRIMARY key(tno), --创建唯一约束 Constraint uk_tname Unique(tname), --创建检查约束 Constraint check_tage CHE
  • (二)的连接外键约束

    千次阅读 2015-08-10 20:35:29
    1.额外建立一张描述两个表之间的关系,存储两张需要连接的的主键对应关系。 2.利用外键约束 外键:一张的某个字段引用着另一张的主键,在数据多的中多一个字段,存储对应的另一张的主键。 外键的...
  • MySQL数据库中数据约束条件

    千次阅读 2022-03-31 19:19:30
    MySQL数据库中数据约束条件
  • 文章目录数据约束主键约束 数据约束 为防止错误的数据被插入到数据,MySQL中定义了一些维护数据库完整性的规则;这些规则常称为约束。常见约束如下: 以上五种约束条件针对中字段进行限制从而保证...
  • navicat表约束怎么

    千次阅读 2021-04-19 05:37:14
    数据库中约束分为一下几种●主键约束(Primary Key constraint):要求主键列数据唯一,并且不允许为空。●唯一约束(Unique constraint):要求该列唯一,允许为空,但只能出现一个空值。●检查约束(Check constraint)...
  • 与表之间的关系: 一对一: 需要两个表。当然做项目时为了省空间,通常只建一个表,如果要实现一对一的查询,可以建立两个视图。示例如下: 1)先建物理表,初始化数据、 create table person( ...
  • MySQL创建并添加约束常见的约束● 非空约束,not null● 唯一约束,unique● 主键约束,primary key● 外键约束,foreign key● 自定义检查约束,check(不建议使用)(在mysql中现在还不支持)非空约束,not null非空...
  • 目录 概念 外键约束 外键约束的特点 添加数据 在外键约束下的数据操作 删除外键约束 多对多 操作案例 多查询 交叉连接 ...例如:一个商城项目就需要分类(category)、商品(products).
  • E-R 图 (实体关系模型)E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型...用“椭圆图框”表示实体的属性,并用“实心线段”将其相应关系的“实体型”连接起来;用”菱形框“表示实体型之...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 185,269
精华内容 74,107
热门标签
关键字:

怎样建立表与表之间的约束