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. Native Fullscreen JavaScript API (plus jQuery plugin)

    http://johndyer.name/native-fullscreen-javascript-api-plus-jquery-plugin/ HTML5 <video> is gre ...

  2. 【转】IOS 怎么获取外设的广播数据AdvData

    原文网址:http://www.deyisupport.com/question_answer/wireless_connectivity/bluetooth/f/103/t/73443.aspx N ...

  3. HTTP请求中的缓存(cache)机制

    http://www.chaorenmao.com/blog/?p=79 流程 当资源第一次被访问的时候,HTTP头部如下 (Request-Line)  GET /a.html HTTP/1.1Ho ...

  4. IIS7配置https

    To Install an SSL Certificate in Microsoft IIS 7 Click Start, mouse-over Administrative Tools, and t ...

  5. 开始同时在cnblog和BAE上写博客

    研究生第一学期已过一半,开始理论学习,当然不能忘了实践学习. \[\frac{{ - b \pm \sqrt {{b^2} - 4ac} }}{{2a}}\]  

  6. 察看so文件的依赖关系

    使用arm-linux-androideabi-readelf 察看依赖动态库 /android-ndk-r8d/toolchains/arm-linux-androideabi-4.7/prebui ...

  7. 【转】由DFT推导出DCT

    原文地址:http://blog.sina.com.cn/s/blog_626631420100xvxd.htm 已知离散傅里叶变换(DFT)为: 由于许多要处理的信号都是实信号,在使用DFT时由于傅 ...

  8. 【Java基础】Java中的持久属性集Properties

    Properties 类的介绍 Properties 类表示了一个持久的属性集.Properties 可保存在流中或从流中加载.属性列表中每个键及其对应值都是一个字符串.一个属性列表可包含另一个属性列 ...

  9. 并查集 poj1611&poj2492

    poj1611 简单题 代码中id记录父节点,sz记录子树规模.一个集合为一棵树. #include <iostream> #include <cstdio> using na ...

  10. 给新手的 10 个有用 Linux 命令行技巧

    我记得我第一次使用 Linux 的时候,我还习惯于 Windows 的图形界面,我真的很讨厌 Linux 终端.那时候我觉得命令难以记忆,不能正确使用它们.随着时间推移,我意识到了 Linux 终端的 ...