1,创建表时加入的约束

a) 非空约束,not null

b) 唯一约束,unique

c) 主键约束,primary key

d) 外键约束,foreign key

1,非空约束,针对某个字段设置其值不为空,如:学生的姓名不能为空

drop table if existst_student;create tablet_student(

student_idint(10),

student_namevarchar(20) not null,

sexchar(2) default 'm',

birthday date,

emailvarchar(30),

classes_idint(3)

)

反例,如果插入时 student_name为空违反了约束则报错

insert intot_student(student_id, birthday, email, classes_id)values(1002, '1988-01-01', 'qqq@163.com', 10)

2,唯一性约束,它可以使某个字段的值不能重复,如:email不能重复

drop table if existst_student;create tablet_student(

student_idint(10),

student_namevarchar(20) not null,

sexchar(2) default 'm',

birthday date,

emailvarchar(30) unique,

classes_idint(3)

)

drop table if existst_student;create tablet_student(

student_idint(10),

student_namevarchar(20) not null,

sexchar(2) default 'm',

birthday date,

emailvarchar(30) ,

classes_idint(3) ,constraint email_unique unique(email)/*表级约束*/

3,主键约束

每个表应该具有主键,主键可以标识记录的唯一性,主键分为单一主键和复合(联合)主键,单一主键是由一个字段构成的,复合(联合)主键是由多个字段构成的。

drop table if existst_student;create tablet_student()

student_idint(10) primary key,/*列级约束*/student_namevarchar(20) not null,

sexchar(2) default 'm',

birthday date,

emailvarchar(30) ,

classes_idint(3)

)

或者

drop table if existst_student;create tablet_student(

student_idint(10),

student_namevarchar(20) not null,

sexchar(2) default 'm',

birthday date,

emailvarchar(30) ,

classes_idint(3),CONSTRAINT p_id PRIMARY key (student_id)/*表级约束*/)

4,外键约束

外键主要是维护表之间的关系的,主要是为了保证参照完整性,如果表中的某个字段为外键字段,那么该字段的值必须来源于参照的表的主键。

首先建立班级表t_classes

drop table if existst_classes;create tablet_classes(

classes_idint(3),

classes_namevarchar(40),constraint pk_classes_id primary key(classes_id)

)

在t_student中加入外键约束

drop table if existst_student;create tablet_student(

student_idint(10),

student_namevarchar(20),

sexchar(2),

birthday date,

emailvarchar(30),

classes_idint(3),constraint student_id_pk primary key(student_id),constraint fk_classes_id foreign key(classes_id) referencest_classes(classes_id)

)

当我们向t_student中加入数据

insert into

t_student(student_id, student_name, sex, birthday, email, classes_id)

values(1001, 'zhangsan', 'm', '1988-01-01', 'qqq@163.com', 10)

出现错误,因为在班级表中不存在班级编号为10班级,外键约束起到了作用

存在外键的表就是子表,参照的表就是父表,所以存在一个父子关系,也就是主从关系,主表就是班级表,从表就是学生表。

上面的例子中如果插入的时候把外键值设为null,可以插入成功。成功的插入了学生信息,但是classes_id没有值,这样会影响参照完整性,所以我们建议将外键字段设置为非空。

当需要删除班级数据,也会报错,因为子表(t_student)存在一个外键classes_id,它参照了父表(t_classes)中的主键,所以先删除子表中的引用记录,再修改父表中的数据。

因为子表(t_student)存在一个外键classes_id,它参照了父表(t_classes)中的主键,所以先删除父表,那么将会影响子表的参照完整性,所以正确的做法是,先删除子表中的数据,再删除父表中的数据,采用drop table也不行,必须先drop子表,再drop父表

例如级联更新

mysql对有些约束的修改比较麻烦,所以我们可以先删除,再添加alter table t_student drop foreign keyfk_classes_id;alter table t_student add constraint fk_classes_id_1 foreign key(classes_id) references t_classes(classes_id) on update cascade;

级联之后,我们只修改了父表中的数据,但是子表中的数据也会跟着变动。

2,需不需要外键

主键和索引是不可少的,不仅可以优化数据检索速度,开发人员还省不其它的工作,

矛盾焦点:数据库设计是否需要外键。这里有两个问题:一个是如何保证数据库数据的完整性和一致性;二是第一条对性能的影响。

正方观点:

1,由数据库自身保证数据一致性,完整性,更可靠,因为程序很难100%保证数据的完整性,而用外键即使在数据库服务器当机或者出现其他问题的时候,也能够最大限度的保证数据的一致性和完整性。

eg:数据库和应用是一对多的关系,A应用会维护他那部分数据的完整性,系统一变大时,增加了B应用,A和B两个应用也许是不同的开发团队来做的。他们如何协调保证数据的完整性,而且一年以后如果又增加了C应用呢?

2,有主外键的数据库设计可以增加ER图的可读性,这点在数据库设计时非常重要。

3,外键在一定程度上说明的业务逻辑,会使设计周到具体全面。

反方观点:

1,可以用触发器或应用程序保证数据的完整性

2,过分强调或者说使用主键/外键会平添开发难度,导致表过多等问题

3,不用外键时数据管理简单,操作方便,性能高(导入导出等操作,在insert,   update,   delete   数据的时候更快)

eg:在海量的数据库中想都不要去想外键,试想,一个程序每天要insert数百万条记录,当存在外键约束的时候,每次要去扫描此记录是否合格,一般还不 止一个字段有外键,这样扫描的数量是成级数的增长!我的一个程序入库在3个小时做完,如果加上外键,需要28个小时!

结论:

1,在大型系统中(性能要求不高,安全要求高),使用外键;在大型系统中(性能要求高,安全自己控制),不用外键;小系统随便,最好用外键。

2,用外键要适当,不能过分追求

3,不用外键而用程序控制数据一致性和完整性时,应该写一层来保证,然后个个应用通过这个层来访问数据库。

需要注意的是:MySQL允许使用外键,但是为了完整性检验的目的,在除了InnoDB表类型之外的所有表类型中都忽略了这个功能。这可能有些怪异,实际上却非常正常:对于数据库的所有外键的每次插入、更新和删除后,进行完整性检查是一个耗费时间和资源的过程,它可能影响性能,特别是当处理复杂的或者是缠绕的连接树时。因而,用户可以在表的基础上,选择适合于特定需求的最好结合。所以,如果需要更好的性能,并且不需要完整性检查,可以选择使用MyISAM表类型,如果想要在MySQL中根据参照完整性来建立表并且希望在此基础上保持良好的性能,最好选择表结构为innoDB类型

转自;https://www.cnblogs.com/fuland/p/4280434.html

mysql建表时外检怎么创建_MySQL创建表时加入的约束以及外键约束的的意义相关推荐

  1. 【MySQL - 5】约束是什么?非空约束、唯一约束、主键约束、外键约束有什么作用?

    目录 1. 非空约束 2. 唯一约束 3. 主键约束 自动增长 4. 外键约束 级联操作 首先我们来想象一下,前几篇文章在我们操作数据库的过程中,自由度是很高的,想给哪个赋值就给哪个赋值,但是这样子, ...

  2. day 06 非空约束、唯一约束、主键约束、外键约束

      由于sql语句不区分大小写,为了书写方便,本文所有命令统一使用小写  往期内容 day 01 初识Mysql以及DDL数据定义语言  day 02 DML数据操作语言​​​​​​ day 03 D ...

  3. 六、约束(主键约束、唯一约束、非空约束、检查约束、外键约束)

    ## 约束,数据类型,触发器 ## 保证数据的正确性,完整性,有效性 /*主键约束唯一约束非空约束检查约束 (mysql8才有)外键约束默认值约束 */ 1.主键约束 ## 主键约束: 唯一非空 ## ...

  4. sql的外键约束和主键约束_SQL约束

    sql的外键约束和主键约束 SQL | 约束条件 (SQL | Constraints) Constraints are the guidelines implemented on the infor ...

  5. sql的外键约束和主键约束_SQL主键约束用示例解释

    sql的外键约束和主键约束 A primary key is a column or a set of columns that uniquely identifies each row in a t ...

  6. mysql创建表时打错了怎么修改_MySQL 创建,修改和删除表

    登录数据库系统: 其中,"-h"参数指连接的主机名,因此此处是连接本机,所以后面的内容为localhost: "-u"参数表示用户名,此处的用户名为 root; ...

  7. MySQL(四)—— 数据表的约束(外键约束,主键约束等)

    文章目录 数据表的约束 主键约束 非空约束 默认值约束DEFAULT 唯一性约束 UNIQUE 外键约束 FOREIGN KEY 创建外键 数据的一致性了解 删除外键 外键约束需要注意的细节 数据表的 ...

  8. MySQL 基础 -- 约束(非空约束、唯一约束、主键约束、默认约束、检查约束、外键约束)

    1. 约束 概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据. 目的:保证数据库中数据的正确.有效性和完整性. 约束分类: 1.1 约束演示:不含外键约束 案例需求: 根据需求,完成表结构 ...

  9. 2019-7-26 [MySQL] 安装与介绍 语句分类/语法 数据类型 DDL数据定义:创建/查看/删除/使用 DML数据操作:增删改 主键约束 自动增长列 非空约束 默认值 Navicat

    文章目录 0.知识回顾 1.数据库介绍 1.1 数据库概述 1.1.1 什么是数据库 1.1.2 什么是数据库管理系统 1.1.3 数据库与数据库管理系统的关系 1.2 数据库表 1.3 表数据 1. ...

最新文章

  1. python3 opencv_Python3 OpenCV3 图像处理基础
  2. 如何解决局域网内传输速度过慢问题
  3. SAP UI5列表的排序
  4. 改进协议 BIP32-39-44概述
  5. 数据处理-Batch Normalization
  6. C++ 出现异常“.... \debug_heap.cpp Line:980 Expression:__acrt_first_block==header“
  7. python导入自定义函数_python怎么导入自定义函数
  8. mysql order 中文版,MySQL Order By排序结果
  9. 难道我们就是那0.0000001%
  10. 实现线程的方式,源码分析:Runnable, Thread, Callable, Future, FutureTask
  11. 无需U盘最简单的系统重装Win10
  12. 使用axis调用WebService,Java WebService调用工具类
  13. Element中MessageBox弹窗取消回调事件
  14. 树莓派自动连接WiFi
  15. 苏格拉底和柏拉图甩手的故事
  16. 除中国中医药数据库官网外-必备5个其它常用中国中医药数据库
  17. Mozi僵尸网络(P2P僵尸网络Mozi)
  18. HTMLCSS学习笔记(二十四)——利用border属性制作太极图与哆啦A梦
  19. 一个网站服务器需要多大带宽,网站需要多大的带宽 ?
  20. Android实现截屏方式

热门文章

  1. 通过分区在Kafka中实现订单保证人
  2. jaxb 映射 空字段_JAXB和未映射的属性
  3. 进阶– Java EE 7前端5强
  4. java 并发 同步信号_Java并发教程–信号量
  5. Spring,REST,Ajax和CORS
  6. 使用LinkedHashMap的Code4ReferenceList最近使用(LRU)实现
  7. 在N + 1场景中使用@NamedEntityGraph更有选择地加载JPA实体
  8. ArrayList与LinkedList
  9. 一致吗 驱动_iPhone 12无线充电真的香吗?
  10. 设置 input元素placeholder的字体颜色