MySQL中约束保存在information_schema数据库的table_constraints中,可以通过该表查询约束信息;

常用5种约束:

  not null: 非空约束,指定某列不为空

  unique:  唯一约束,指定某列和几列组合的数据不能重复

  primary key:  主键约束,指定某列的数据不能重复、唯一

  foreign key:  外键,指定该列记录属于主表中的一条记录,参照另一条数据

  check: 检查,指定一个表达式,用于检验指定数据

MySQL不支持check约束,但可以使用check约束,而没有任何效果;

根据约束数据列限制,约束分为:

  单列约束:每个约束只约束一列

  多列约束:每个约束约束多列数据

一、not null约束

非空约束用于确保当前列的值不为空值,非空约束只能出现在表对象的列上。

Null类型特征:

  所有的类型的值都可以是null,包括int、float 等数据类型

create table temp(
id int not null,
name varchar(255) not null default 'abc',
sex char null
)
//上面的table 加上了非空约束,也可以用alter来修改或增加非空约束 //增加非空约束
alter table temp
modify sex varchar(2) not null; //取消非空约束
alter table temp modify sex varchar(2) null; //取消非空约束,增加默认值
alter table temp modify sex varchar(2) default 'abc' null;

二、unique

唯一约束是指定table的列或列组合不能重复,保证数据的唯一性。

唯一约束不允许出现重复的值,但是可以为多个null。

同一个表可以有多个唯一约束,多个列组合的约束。

在创建唯一约束时,如果不给唯一约束名称,就默认和列名相同。

唯一约束不仅可以在一个表内创建,而且可以同时多表创建组合唯一约束。

MySQL会给唯一约束的列上默认创建一个唯一索引;

create table temp(
id int not null,
name varchar(25),
password varchar(16),
--使用表级约束语法
constraint uk_name_pwd unique(name, password)
);
//表示用户名和密码组合不能重复 //添加唯一约束
alter table temp add unique (name, password);
alter table temp modify name varchar(25) unique; //删除约束
alter table temp drop index name;

三、primary key

主键约束相当于   唯一约束 + 非空约束  的组合,主键约束列不允许重复,也不允许出现空值。

每个表最多只允许一个主键,建立主键约束可以在列级别创建,也可以在表级别创建。

当创建主键的约束时,系统默认会在所在的列和列组合上建立对应的唯一索引。

MySQL的主键名总是PRIMARY。

//列模式
create table temp(
/*主键约束*/
id int primary key,
name varchar(25)
); create table temp2(
id int not null,
name varchar(25),
pwd varchar(15),
constraint pk_temp_id primary key(id)
); //组合模式
create table temp2(
id int not null,
name varchar(25),
pwd varchar(15),
constraint pk_temp_id primary key (name, pwd)
); //alter删除主键约束
alter table temp drop primary key; //alter添加主键约束
alter table temp add primary key(name, pwd); //alter 修改列为主键
alter table temp modify id int primary key; //设置主键自增
create table temp(
id int auto_increment primary key,
name varchar(20),
pwd varchar(16)
);
//auto_increment自增模式,设置自增后插入数据的时候就不需要给该列插入值了。

四、foreign key约束

外键约束是保证一个或两个表之间的参照完整性,外键是构建于一个表的两个字段或是两个表的两个字段之间的参照关系

//创建外键约束
//主表
create table classes(
id int auto_increment primary key ,
name varchar(20),
);
//从表
create table student(
id int anto_increment,
name varchar(22),
constraint pk_id primary key(id),
classes_id int references class(id)
);
//通常先建主表,然后再建从表,这样从表的参照引用的表才存在 //表级别创建外键约束:
create table student(
id int auto_increment primary key,
name varchar(25),
classes_id int,
foreign key (classes_id) references classes(id)
);
//上面的创建外键的方法没有指定约束名称,系统会默认给外键约束分配外键约束名称,命名为student_idfk_n
其中student是表名, n是当前约束从1开始的整数 //指定约束名称
create table student(
id int auto_increment primary key,
name varchar(25),
classes_id int,
/*指定约束名称*/
constraint fk_classes_id foreign key(classes_id) references classes(id)
); //多列外键组合,必须用表级别约束语法
create table classes(
id int,
name varchar(20),
number int,
primary key(name,number)
);
create table student(
id int auto_increment primary key,
name varchar(20),
classes_name varchar(20),
classes_number int,
/*表级别联合外键*/
foreign key(classes_name, classes_number) references classes(name, number)
); //删除外键约束
alter table student drop foreign key student_idfk_1;
alter table student drop foreign key fk_student_id; //增加外键约束
alter table student add foreign key(classes_name, classes_number) references classes(name, number); //自引用、自关联(递归表、树状表)
create table tree(
id int auto_increment primary key,
name varchar(50),
parent_id int,
foreign key(parent_id) references tree(id)
); //级联删除:删除主表的数据时,关联的从表数据也删除,则需要在建立外键约束的后面增加on delete cascade或on delete set null, 前者是级联删除,后者是将从表的关联列的值设置为null
create table student(
id int auto_increment primary key,
name varchar(20),
classes_name varchar(20),
classes_number int,
/*表级别联合外键*/
foreign key(classes_name, classes_number) references classes(name, number) on delete cascade
);

五、check约束

MySQL可以使用check约束,但check约束对数据验证没有任何作用。

create table temp(
id int auto_increment,
name varchar(20),
age int,
primary key(id),
/*check约束*/
check(age > 20)
);
//上面check约束要求age必须大于0,但没有任何作用。创建table的时候没有任何错误或警告。

MySQL约束的更多相关文章

  1. MySQL 约束的讲解

    MySQL 约束 作用:保证数据的完整性和一致性按照约束的作用范围分为:表级约束和行级约束.常见的约束类型包括: Not null(非空约束) Primary key (主键约束) Unique ke ...

  2. MySQL 约束和数据库设计

    1.MySQL 约束: 1.约束的概念: 约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性.唯一性. MySQL中,常用的几种约束: 约束类型: 非空 主键 唯一 外键 默认值 ...

  3. MySQL 约束

    MySQL中约束保存在information_schema数据库的table_constraints中,可以通过该表查询约束信息: 约束主要完成对数据的检验,保证数据库数据的完整性:如果有相互依赖数据 ...

  4. SQLServer与MySQL约束/索引命名的一些差异总结

    约束是数据库完整性的保证,主要分为:主键/外键/唯一键/默认值/check等类别,约束是一个逻辑概念,表示数据的某些特性(不能为空,唯一,必须满足某些条件等等),索引是一个逻辑与物理概念的结合,逻辑上 ...

  5. mysql约束以及数据库的修改

    一.约束 1.约束保证数据完整性和一致性. 2.约束分为表级约束和列级约束. (1)表级约束(约束针对于两个或两个以上的字段使用) (2)列级约束(针对于一个字段使用) 3.约束类型有: (1)NOT ...

  6. MySQL 约束、表连接、表关联、索引

    一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性. 外键:是另一表的唯一性 ...

  7. mysql 约束和外键约束实例

    1.约束保证数据的完整性和一致性. 2.约束分为表级约束和列级约束.(根据约束所针对的字段的数目的多少来决定) 列级约束:对一个数据列建立的约束 表级约束:对多个数据列建立的约束 列级约束即可以在列定 ...

  8. MySQL——约束(constraint)详解

    该博客说说关于数据库中一个重要的知识点——约束 一.什么是约束约束英文:constraint 约束实际上就是表中数据的限制条件 二.约束作用表在设计的时候加入约束的目的就是为了保证表中的记录完整和有效 ...

  9. MySQL约束笔记

    MySQL 查看约束,添加约束,删除约束 添加列,修改列,删除列 · 查看表的字段信息:desc 表名; · 查看表的所有信息:show create table 表名; 添加主键约束:alter t ...

随机推荐

  1. Windows系统中IIS 6.0+Tomcat服务器环境的整合配置过程

    IIS6.0+Tomcat整合 1.首先准备工作 Windows IIS 6.0 apache-tomcat-7.0.26.exe tomcat-connectors-1.2.33-windows-i ...

  2. .net,sessionState的Session共享问题解决方案

    最近项目因为要负载均衡所以就使用了sessionState的Session共享,但是却发现多台服务器中有个别服务器的Session没有共享,于是就有了这篇文章,下面开始说说. 这个基本上就分两种情况: ...

  3. 浏览器加载和渲染html的顺序-css渲染效率的探究

    1.浏览器加载和渲染html的顺序1.IE下载的顺序是从上到下,渲染的顺序也是从上到下,下载和渲染是同时进行的.2.在渲染到页面的某一部分时,其上面的所有部分都已经下载完成(并不是说所有相关联的元素都 ...

  4. ASP.NET MVC 開發心得分享 (21):Routing 觀念與技巧

    ASP.NET MVC 預設在 Global.asax 所定義的 RegisterRoutes 方法中可以輕易的定義你希望擁有的網址格式,嚴格上來講這並非 ASP.NET MVC 的專利,而是從 AS ...

  5. [Bhatia.Matrix Analysis.Solutions to Exercises and Problems]ExI.2.1

    For fixed basis of in $\scrH$ and $\scrK$, the matrix $A^*$ is the conjugate transpose of the matrix ...

  6. SSL双向认证(高清版)

    介绍了SSL双向认证的一些基本问题,以及使用Nginx+PHP基于它搭建https的Webservice. 之前的方式只是实现1:1的模式,昨天同事继续实现了n:1的模式,这里我再整理记录下. 由于n ...

  7. [转]ASP.NET MVC 入门2、项目的目录结构与核心的DLL

    我们新建一个ASP.NET MVC的Web Application后,默认的情况下,项目的目录结构如下: App_Data :这个目录跟我们一般的ASP.NET website是一样的,用于存放数据. ...

  8. JDK1.5新特性(二)……Static Import

    援引 Static Import - This facility lets you avoid qualifying static members with class names without t ...

  9. oracle rac IP详解

    rac环境下vip/public/private IP的区别 每个节点要2块网卡, 3个IP,虚拟IP或者叫做业务IP,单个网卡当掉可以“漂”到其他网卡是继续提供服务 在Oracle RAC环境下,每 ...

  10. Clean Code – Chapter 3: Functions

    Small Blocks and Indenting The blocks within if statements, else statements, while statements, and s ...