<1>概念

是一种限制,它是对表的行和列的数据做出约束,确保表中的数据的完整性和唯一性。

<2>使用场景

创建表的时候,添加约束

<3>分类

1. default:默认约束,域完整性
2. not null:非空约束,域完整性
3. unique:唯一约束,实体完整性
4. primary key:主键约束,实体完整性
5. foreign key:外键约束,参照完整性
6. check:检查约束(MySQL不支持),域完整性
7. atuo_increment:自增长约束
8. unsigned:无符号约束
9. zerofill:零填充约束
数据库中有三个完整性:域、实体、参照完整性

域(列)完整性:
域完整性是对数据表中字段属性的约束。 实体完整性在MySQL中实现:
通过主键约束和候选键约束实现的 参照完整性
也就是说是MySQL的外键

1.default

<1>概念
指定某列的默认值,插入数据的时候,此列没有值,则用default指的的值来填充。 <2>添加
在创建表的时候添加 : create .....default
create table t1(
id int default 1,
name varchar(20) default '老王'
); 通过alter语句添加:alter....modify/change.........
alter table t1 modify id int default 2;
alter table t1 change name name varchar(32) default '大拿'; <3>删除: alter.....modify/change
alter table t1 modify id int;
alter table t1 change name name varchar(32);

2.not null

<1>概念
指定某列的值不为空,在插入数据的时候必须非空 "" 不等于 null ,0不等于 null <2>添加
在创建表的时候添加 : create .....not null
create table t1(
id int not null,
name varchar(20) not null
); 通过alter语句添加:alter....modify/change.........
alter table t2 modify id int;
alter table t2 change name name varchar(32) null; <3>删除: alter.....modify/change

3.unique

<1>概念
指定列或者列组合不能重复,保证数据的唯一性
不能不限重复的值,但是可以有多个null
同一张表可以有多个唯一的约束 <2>添加唯一约束
在创建表的时候添加 : create .....unique
create table t3(
id int unique,
name varchar(32) not null
); insert t3 value (1,'老王');
insert t3 value (1,'老李'); -- id唯一约束,添加异常 create table t3(
id int,
name varchar(32) not null,
constraint id_unique unique(id,name) -- 添加复合约束
); 通过alter语句添加:alter....modify/change......... / alter .... add unique.....
alter table t3 modify id int unique;
alter table t3 add unique(name);
alter table t3 add constraint un_id unique(id); <3>删除唯一约束:alter .... drop...index 名称 / drop index 名称 on 表名
alter table t3 drop index id_unique <4>注意:如果删除的唯一约束列具有自增长约束,则必须要先删除自增长约束,再去删除唯一约束。

4.主键约束

<1>概念
当前行的数据不为空并且不能重复
相当于:唯一约束+非空约束 <2>添加主键约束
在创建表的时候添加 : create .....primary key create table t4(
id int primary key,
name varchar(20)
); create table t4(
id int,
name varchar(32),
[constraint id_unique] primary key (id,name) -- 联合约束
); 通过alter语句添加:alter....modify/change......... / alter .... add primary key.....
alter table t4 modify id int primary key;
alter table t4 add constraint pk_id_name primary key(id,name); <3>删除主键:alter ... drop primary key
alter table t4 drop primary key <4>注意:如果删除的主键列具有自增长约束,则必须要先删除自增长约束,再去删除主键约束。

5.auto_increment:自增长约束

<1>概述
列的数值自动增长,列的类型只能是整数类型
通常给主键添加自增长约束。 <2>添加
在创建表的时候添加 : create .....auto_increment
create table t5(
id int auto_increment,
name varchar(20)
); 通过alter语句添加:alter....modify/change......... auto_increment
alter table t5 change id id int auto_increment; <3>删除:alter ... modify/change....
alter table t5 modify id int; <4>注意:
一张表只能有一个自增长列,并且该列需要定义约束。

6.unsigned:无符号约束

<1>概念
指定当列的数值未非负数 age tinyint 1 -128~127 UNSIGNED 0~255 <2>添加
在创建表的时候添加 : create .....UNSIGNED
create table t5(
id int,
age tinyint UNSIGNED
); 通过alter语句添加:alter....modify/change.........
alter table t5 change age age int tinyint UNSIGNED;
alter table t5 modify age tinyint UNSIGNED; <3>删除:alter ... modify/change....
alter table t5 modify age tinyint;
alter table t5 change age age int;

7.zerofill:零填充约束

<1>概述:
指定当前列的数值的显示格式,不影响当前列显示范围 <2>
在创建表的时候添加 : create .....zerofill create table t6(
id int,
age tinyint zerofill
); <3>删除:alter ... modify/change....
alter table t5 modify age tinyint;
alter table t5 change age age int;

8.外键约束

通过建立外键,设置表于表之间的约束性,限制数据的录入

员工表(从表)                         部门表(主表)
员工号 员工姓名 部门名称 部门号 部门名称
1 张三 1 1 人力
2 李四 2 2 销售
3 王五 3 <1>概述
建立表和表之间的关系,建立参照完整性。一个表可以有多个外键,每个外键必须参照另一个主键。
被外键约束的列,取值必须参照其主表列中的值。 注意:通常先创建主表,再创建从表 create table dept(
deptno int primary key auto_increment,
dname varchar(32),
loc varchar(32)
); create table emp(
empno int primary key auto_increment,
ename varchar(32) not null,
deptno int
); <2>添加外键约束
create table emp(
empno int primary key auto_increment,
ename varchar(32) not null,
deptno int
[constraint fk_name] foreign key (deptno) references dept(deptno); -- 添加外键约束
); 使用alter add constraint....
alter table emp add constraint fk_name foreign key (deptno) references dept(deptno); <3>删除外键约束
alter drop foreign key fk_name 在创建表时,不去明确的指定外键约束的名称,系统辉自动的随机生成一个外键的名称,
使用 show create table 表名。查看具体的外键名称。 alter table emp drop foreign key fk_name; <4>设置外键中的级联关系
1.on delete cascade:删除主表中的数据时,从表中的数据随之删除。
2.on update cascade:更新主表中的数据时,从表中的数据随之删除。
3.on delete set null:删除主表中的数据时,从表中的数据置空 级联删除
create table emp(
empno int primary key auto_increment,
ename varchar(32) not null,
deptno int
[constraint fk_name] foreign key (deptno) references dept(deptno) on delete cascade; -- 添加外键约束
); 注意:
插入数据时,先插入主表的数据,在插入从表的数据。
删除数据时候,先删除从表的数据,在删除主表中的数据。

总结:数据库的约束

主键约束、自增长约束、外键约束、唯一约束、非空约束、默认约束

MySQL数据库笔记四:MySQL的约束的更多相关文章

  1. MySql学习笔记四

    MySql学习笔记四 5.3.数据类型 数值型 整型 小数 定点数 浮点数 字符型 较短的文本:char, varchar 较长的文本:text, blob(较长的二进制数据) 日期型 原则:所选择类 ...

  2. 数据库操作事物的四大特性以及MySQL数据库的四种隔离级别

    1 .事物操作数据库的四大特性(ACID) 1.原子性 (Atomicity) 原子性:就是事物的所包含的所有操作,要么全部成功,要么全部失败回滚. 2.一致性 (Consistency) 一致性:简 ...

  3. mysql数据库笔记0

    mysql数据库笔记0 一次性添加多行数据 例如: INSERT INTO students (class_id, name, gender, score) VALUES (1, '大宝', 'M', ...

  4. MySQL数据库笔记一:简介及简单操作

    一.初识MySQL数据库 1.数据库的概述 <1>数据库:Database 长期存储在计算机内的,有组织的,可共享的数据集合. 存储数据的仓库.(文件) <2>数据库管理系统: ...

  5. 重新学习MySQL数据库8:MySQL的事务隔离级别实战

    重新学习Mysql数据库8:MySQL的事务隔离级别实战 在Mysql中,事务主要有四种隔离级别,今天我们主要是通过示例来比较下,四种隔离级别实际在应用中,会出现什么样的对应现象. Read unco ...

  6. 重新学习MySQL数据库4:Mysql索引实现原理

    重新学习Mysql数据库4:Mysql索引实现原理 MySQL索引类型 (https://www.cnblogs.com/luyucheng/p/6289714.html) 一.简介 MySQL目前主 ...

  7. 通过JSP网页连接MySQL数据库,从MySQL数据库中读出一张表并显示在JSP网页中

    1.安装所需软件 ①安装java和tomcat,建立JSP网页最基础的软件②安装MySQL数据库(下载地址:https://www.mysql.com/)③安装Navicat Premium来查看数据 ...

  8. 重新学习MySQL数据库10:MySQL里的那些日志们

    重新学习MySQL数据库10:MySQL里的那些日志们 同大多数关系型数据库一样,日志文件是MySQL数据库的重要组成部分.MySQL有几种不同的日志文件,通常包括错误日志文件,二进制日志,通用日志, ...

  9. 重新学习MySQL数据库3:Mysql存储引擎与数据存储原理

    重新学习Mysql数据库3:Mysql存储引擎与数据存储原理 数据库的定义 很多开发者在最开始时其实都对数据库有一个比较模糊的认识,觉得数据库就是一堆数据的集合,但是实际却比这复杂的多,数据库领域中有 ...

随机推荐

  1. C++中重载、重定义、重写概念辨析

    重载:函数名相同,函数的参数个数.参数类型或参数顺序三者中必须至少有一种不同.函数返回值的类型可以相同,也可以不相同.发生在一个类内部. 重定义:也叫做隐藏.覆盖,子类重新定义父类中有相同名称的非虚函 ...

  2. R语言与概率统计(五) 聚类分析

    #########################################0808聚类分析 X<-data.frame( x1=c(2959.19, 2459.77, 1495.63, ...

  3. STS中MyBatis的基本实现

    本文采用的是<深浅spring boot 2.x>中第5章的例子,用一个接口实现对一个表项的读取. 数据库:mysql下建立user数据库,表名为t_usr 1. 数据源设置 在appli ...

  4. ubuntu14+ns2

    https://www.linuxidc.com/Linux/2017-03/141504.htm 环境变量改为: export PATH=$PATH:/home/zgh/Desktop/ns-all ...

  5. 【图像处理】H.264开源解码器评测

    转自:http://wmnmtm.blog.163.com/blog/static/38245714201142883032575/ 要播放HDTV,就首先要正确地解开封装,然后进行视频音频解码.所以 ...

  6. smoothscroll

    smoothscroll是一款jQuery插件,可以平滑地滚动到指定的地方. 可以解决chrome锚点失效的问题. 官方网站 http://iamdustan.com/smoothscroll/ gi ...

  7. 实习第一个月总结(const关键字、条件编译、volatile关键字、#和##的作用、函数指针)

    C语言中const关键字的作用: 修饰局部变量或者全局变量,表示变量n的值不能被改变了 修饰指针,分为常量指针与指针常量,也可以两者结合 常量指针指向的值不能改变,但是这并不是意味着指针本身不能改变, ...

  8. WijmoJS 中自定义 React 菜单和列表项模板

    WijmoJS 中自定义 React 菜单和列表项模板 在V2019.0 Update2 的全新版本中,React 框架下 WijmoJS 的前端UI组件功能再度增强. WijmoJS的菜单和类似列表 ...

  9. 小程序api使用报错

    小程序连接api报错: 如若已在管理后台更新域名配置,请刷新项目配置后重新编译项目,操作路径:“项目-域名信息” 解决办法如下: 点击设置—-项目设置—勾选如下选项即可解决

  10. 小记--------spark的Master的Application注册机制源码分析及Master的注册机制原理分析

    原理图解: Master类位置所在:spark-core_2.11-2.1.0.jar的org.apache.spark.deploy.master下的Master类   //截取了部分代码 //处理 ...