MySQL约束
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约束的更多相关文章
- MySQL 约束的讲解
MySQL 约束 作用:保证数据的完整性和一致性按照约束的作用范围分为:表级约束和行级约束.常见的约束类型包括: Not null(非空约束) Primary key (主键约束) Unique ke ...
- MySQL 约束和数据库设计
1.MySQL 约束: 1.约束的概念: 约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性.唯一性. MySQL中,常用的几种约束: 约束类型: 非空 主键 唯一 外键 默认值 ...
- MySQL 约束
MySQL中约束保存在information_schema数据库的table_constraints中,可以通过该表查询约束信息: 约束主要完成对数据的检验,保证数据库数据的完整性:如果有相互依赖数据 ...
- SQLServer与MySQL约束/索引命名的一些差异总结
约束是数据库完整性的保证,主要分为:主键/外键/唯一键/默认值/check等类别,约束是一个逻辑概念,表示数据的某些特性(不能为空,唯一,必须满足某些条件等等),索引是一个逻辑与物理概念的结合,逻辑上 ...
- mysql约束以及数据库的修改
一.约束 1.约束保证数据完整性和一致性. 2.约束分为表级约束和列级约束. (1)表级约束(约束针对于两个或两个以上的字段使用) (2)列级约束(针对于一个字段使用) 3.约束类型有: (1)NOT ...
- MySQL 约束、表连接、表关联、索引
一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性. 外键:是另一表的唯一性 ...
- mysql 约束和外键约束实例
1.约束保证数据的完整性和一致性. 2.约束分为表级约束和列级约束.(根据约束所针对的字段的数目的多少来决定) 列级约束:对一个数据列建立的约束 表级约束:对多个数据列建立的约束 列级约束即可以在列定 ...
- MySQL——约束(constraint)详解
该博客说说关于数据库中一个重要的知识点——约束 一.什么是约束约束英文:constraint 约束实际上就是表中数据的限制条件 二.约束作用表在设计的时候加入约束的目的就是为了保证表中的记录完整和有效 ...
- MySQL约束笔记
MySQL 查看约束,添加约束,删除约束 添加列,修改列,删除列 · 查看表的字段信息:desc 表名; · 查看表的所有信息:show create table 表名; 添加主键约束:alter t ...
随机推荐
- WordPress Backdoor未授权访问漏洞和信息泄露漏洞
漏洞名称: WordPress Backdoor未授权访问漏洞和信息泄露漏洞 CNNVD编号: CNNVD-201312-497 发布时间: 2013-12-27 更新时间: 2013-12-27 危 ...
- 基于WebForm+EasyUI的业务管理系统形成之旅 -- 构建Web界面(Ⅴ)
上篇<基于WebForm+EasyUI的业务管理系统形成之旅 -- 数据统计>,主要介绍系统数据统计所采用图形.报表工具. 本篇将如何构建Web界面以及新增.编辑.导出数据等功能. 一.在 ...
- Enum 枚举
一: 1. foreach (int val in Enum.GetValues(typeof(AppEnum.HarbourStatus))) { ddlStatus.Items.Add(new L ...
- HDU 4746 Mophues 莫比乌斯反演
分析: http://blog.csdn.net/acdreamers/article/details/12871643 分析参见这一篇 http://wenku.baidu.com/view/fbe ...
- [liu yanling]软件测试的过程
测试过程按4个步骤进行,即单元测试.组装测试.确认测试和系统测试.
- Problem - 433C - Codeforces解题报告
对于这题本人刚开始的时候的想法是:先把最大两数差的位置找到然后merge计算一个值再与一连串相同的数做merge后计算一个值比较取最大值输出:可提交后发现不对,于是本人就搜了一下正解发现原来这题的正确 ...
- 【CSS】Intermediate6:Display
1display :inline/block/none 2.inline value Cause all list items in a list to appear next to each oth ...
- 一个老站长对HTML5认识
新的一年开始,各个领域都在悄悄发生着一些变化.在移动互联网领域也在发生着很多变化,其中HTML5的技术在多年的实践和国内巨头公司的大力推广下,HTML5的webapp几乎可以和原生态的app分庭抗礼了 ...
- Esper系列(五)Order by、Limit、构建事件流、Updating an Insert Stream
Order by 与SQL语法类似类似,默认为升序排列; 注意: 如果order by的子句中出现了聚合函数,那么该聚合函数必须出现在select的子句中. 出现在select中的expression ...
- HDU3727 - Jewel(主席树)
题目大意 对一个序列进行以下四种操作: 1.Insert x 在序列尾部插入x 2.Query_1 s t k 查询区间[s,t]的第k小 3.Query_2 x 查询x的在序列中排名 4.Query ...