约束

我们可以给表中的字段加上一些约束,来保证表中的数据是有效的

按约束的功能分类

  1. 非空约束 : not null
  2. 唯一性约束 : unique
  3. 主键约束 : primary key
  4. 外键约束 : foreign key
  5. 默认值约束 :default
  6. 检查约束 : check ( MySQL 不支持,Oracle 支持 )

可以多个约束对一个字段使用
例:create table table_1 ( id int , name char ( 5 ) not null unique ) ;

非空约束 ( not null )

其约束的字段不能为 NULL ,当插入数据时,若该字段为 NULL ,则会报错
例:create table table_1 ( id int , name char ( 5 ) not null ) ;

唯一性约束 ( unique )

其约束的字段不能重复,但可以有多个 NULL
例:create table table_1 ( id int unique , name char ( 5 ) ) ;

主键约束 ( primary key )( 很重要 )

( 主键字段 即添加了主键约束的字段,主键值 即主键字段上的值 )

  1. 给某个字段添加主键约束之后,该字段既不能为0,也不能重复,相当于 not null + unique 的效果
  2. 主键值是当前行数据的唯一标识,即如果表中的两行数据是完全相同的,但只要主键值不同,即可认为是完全不同的数据
  3. 每张表都有且只有一个主键约束!!! 如果一张表没有主键约束,则该表是无效的,主键虽然只能有一个,但可以由多个字段联合组成
  4. 如果只有一个字段组成的主键,称为单一主键,如果由多个字段组成,则称为复合主键

例:
create table table_1 ( id int primary key , name char ( 5 ) ) ;
create table table_1 ( id int , name char ( 5 ) , primary key ( id, name ) ) ;

自增主键 ( auto_increment )

只适用于整数类型主键,自增从 1 开始
例:create table table_1 ( id int primary key auto_increment , name char ( 5 ) ) ;

外键约束 ( foreign key )

( 外键字段 即添加了外键约束的字段,外键值 即外键字段上的值 )

  1. 外键约束用来在两个表之间建立连接
  2. 外键可以有一个或者多个,外键不是自身表的主键,但是关联的是其他表主键( 其实不一定是主键,只要有unique约束即可,但一般都是主键 )
  3. 一个表的外键可以为空,但如果不为空值,则每一个外键值必须等于另一个表的主键值中的某个值
  4. 主表( 父表 )即关联中主键所在表,从表 ( 子表 )即关联中外键所在表
  5. 删除表与数据的顺序是先主再从,添加表或数据的顺序是先从再主

例:create table table_1 ( id int , name char ( 5 ) , foreign key ( name ) references table_2 ( name_1 ) );
( references 即是参考的意思 )

默认值约束 ( default )

如果不指定默认值,则默认值为 NULL
例:create table table_1 ( id int , name char ( 5 ) default ‘ candy ’ ) ;

按约束的位置分类

  1. 列级约束 ( 对于一个字段 )
  2. 表级约束 ( 对于一个或多个字段 )

在创建表的时候添加列级约束只支持:默认约束,非空约束,主键约束,唯一性约束
在添加表级约束只支持:主键约束,唯一性约束,外键约束

列级约束

直接添加在一个字段后面的约束,相当于只对这个字段生效
例:create table table_1 ( id int , name char ( 5 ) default ‘ candy ’ ) ;

表级约束

单独写,对其中包括的字段都生效
例:create table table_1 ( id int , name char ( 5 ) , unique ( id, name ) ) ;
( 相当于 id 与 name 联合起来唯一 )

对于约束的操作

添加约束

  1. alter table 表名 modify 字段名 数据类型 约束; ( 修改字段属性的时候加上约束 )
  2. alter table 表名 change 旧字段名 新字段名 数据类型 约束; ( 修改字段名字的时候加上约束 )
  3. alter table 表名 add 字段1 数据类型 约束, 字段2 数据类型 约束 … ;( 添加字段的时候加上约束 )
  4. create table 表名 ( 字段1 数据类型 约束 ,字段2 数据类型 约束 … ) ;
    create table 表名 ( 字段1 数据类型,字段2 数据类型 … 约束 (字段1 , 字段2 ) ) ;
    (建表时添加约束)

删除约束

  1. alter table 表名 modify 字段名 数据类型 ;( 修改字段属性时不加上约束 )
  2. alter table 表名 change 旧字段名 新字段名 数据类型 ; ( 修改字段名的时候不加上约束 )

数据库基础笔记(MySQL)4 —— 基础约束相关推荐

  1. 【数据库基础】01_数据库概述与MySQL语法基础

    1. 数据库应用 1.1 概述 1.1.1 什么是数据库 简而言之,就是存储数据,管理数据的仓库. 数据库的好处 持久化数据到本地. 可以实现结构化查询,方便管理. DB:数据库(database): ...

  2. 数据库设计笔记——MySQL基础知识(四)

    概述 关系型数据库--由表来存储相关的数据,MySQL,SQL Server,Oracle等都是关系型数据库: 元数据:用于集成并管理数据. MySQL数据库 用户数据库:用户根据需求创建数据库 系统 ...

  3. 数据库简介与 Mysql 服务基础

    文章目录 前言 一.数据库系统发展史 二.数据库基本概念 三.主流数据库介绍 四.数据库类型 1. 关系型数据库 2. 非关系型数据库 3. 时序数据库 TSD 五.Mysql 数据库 1. MySQ ...

  4. Python基础笔记_Day01_计算机基础知识和Python开发环境搭建

    Day01_计算机基础知识和Python开发环境搭建 目录 01.01_计算机基础知识(计算机概述)(了解) 01.02_计算机基础知识(软件开发和计算机语言概述)(了解) 01.03_计算机基础知识 ...

  5. 数据库学习笔记—MySQL技术nei幕—第一章—MySQL体系结构和存储引擎

    数据库和实例 数据库和实例很容易混淆,如果要更加深入地理解MySQL,将这两个概念区分开来是必不可少的. 数据库是物理操作系统文件或其他形式文件类型的集合.就比如在MySQL数据库中,数据库文件可以是 ...

  6. 免费python基础笔记_python的基础练习笔记

    由于之前有学习过的python的缘故,这次的基础练习算是对知识的巩固的加深,在练习的过程中还是出现一些丢失符号的低级错误,不过动过改正加深了自己的影响,对函数的理解也更加深刻.总的来说虽然是复习,但收 ...

  7. mysql数据库学号数据类型_数据库学习笔记——MySQL数据类型

    一.数据类型: 1.整型(xxxint) 2.浮点型(float和double) 3.定点数(decimal) 4.字符串(char,varchar,xxxtext) 5.二进制数据(xxxBlob) ...

  8. python语言基础笔记_Python语言 基础知识笔记

    背景知识 Python2 的默认编码是 ascii,Python3 的默认编码是 utf-8 输入输出 Python2 提供了 input,raw_input,print 等用于输入输出,但在 Pyt ...

  9. java编程基础笔记_Java编程基础阶段笔记 day01 Java语言概述

    常用的DOS命令 dir :    列出当前目录下的文件以及文件夹 md :   创建目录 rd :     删除目录 cd :    进入指定目录 cd.. :  退回到上一级目录 cd\:     ...

  10. JavaScript基础笔记集合(转)

    JavaScript基础笔记集合 JavaScript基础笔记集合   js简介 js是脚本语言.浏览器是逐行的读取代码,而传统编程会在执行前进行编译   js存放的位置 html脚本必须放在< ...

最新文章

  1. 传感器可以让智能手机测量生命体征
  2. java BASE64流 输出图片。
  3. 王者荣耀连接不上服务器最新赛季排名,王者荣耀新赛季连掉三段 初期不能打排位是有原因的...
  4. Linux命令中正则表达式的运用
  5. day44-前端知识之HTML内容
  6. Jdk动态代理 底层源码分析
  7. Asp.Net把word文件转换为html文件
  8. linux 内核模块 proc,Linux 内核模块 proc文件系统.pdf
  9. erlang rebar 配置mysql_Centos6.4安装erlang并配置mysql数据库
  10. 将公司的主要项目从eclipse迁移到android studio for mac环境(1)
  11. 【译】EntityFramework6与EntityFrameworkCore的区别
  12. 计算机中用于描述音乐乐曲并,计算机中用于描述音乐乐曲并由声卡合成出音乐来的语言(规范)为。...
  13. 八、软考·系统架构师——架构设计
  14. SAP -Posting only Possible in Periods YYYY/MM YYYY/MM in company 1000
  15. 基于nexus搭建golang代码下载代理缓存私服
  16. 100个软硬件都要懂的示波器基础知识
  17. 域乎X蚂蚁链:打造新购物模式?
  18. 我读经典管理书籍《管理的实践》有感
  19. android系统关机广播,Android开机广播和关机广播
  20. vue打包时报错 Error: No PostCSS Config found in 的解决方法

热门文章

  1. JavaWeb项目实现文件下载
  2. 抢红包要当心!钱盾反诈平台专家揭秘3类假红包骗局
  3. GBK和UTF-8之间的战争,websphere6.1乱码解决方案
  4. 【原创】ASP.NET C# 盗取中国银行汇率表
  5. java queue size_Java中的PriorityQueue size() 方法 - Break易站
  6. python selenium xpath_python+selenium十四:xpath和contains模糊匹配
  7. 你是如何自学 Python 的?
  8. oracle io profile,ORACLE 中 PROFILE的管理
  9. winform 界面 xml化_FlinkSQL 1.11 on Zeppelin平台化实践
  10. 管理数百个Kubernetes集群需要什么?