约束 CONSTRAINT
约束用于限制加入表中数据的类型
约束的种类:
非空约束(NOT NULL):约束列不接受NULL值,强制字段始终包含值。
唯一约束(UNIQUE):约束一列或一组列中的数据是唯一的。表中可以有多个唯一约束。
主键约束(PRIMARY KEY):约束一列或一组列中的数据是唯一的,且不能改动,一个表中只能有一个主键约束。
外键约束(FOREIGN KEY):外键是表中的一列,其值必须列在另一个表的主键中。只有InnoDB支持。
默认值约束(DEFAULT):约束向列提供默认值。
检查约束(CHECK):用于保证一列或一组列中的数据满足一组指定的条件。用于约束列中值的合法取值范围。MySQL不支持该约束。
非空约束 NOT NULL
默认情况下列值是可以接受NULL值得。
创建表示添加非空约束:在类的类型后面添加NOT NULL
create table 表名 (
列1 数据类型 not null,
列2 数据类型 not null
);
修改表添加非空约束
alter table 表名 add 列名 数据类型 not null;
--
alter table 表名 modify 列名 数据类型 not null;
删除非空约束
alter table 表名 modify 列名 数据类型 null;
唯一约束 UNIQUE
唯一约束与主键约束的区别
--表中可以包含多个唯一约束但只能包含一个主键
--唯一约束列可以包含NULL值,但主键不可以
--唯一约束列可以修改或更新,但是主键不可以
--唯一约束列的值可删除后重复使用,但是主键不可以
--唯一约束列不可以用来定义外键
创建表示使用UNIQUE(列名) 指定唯一约束,有以下4方式
create table 表名(
列名 数据类型,
列名 数据类型 unique,
);
--
create table 表名(
列名 数据类型,
列名 数据类型,
unique(列名,列名)
);
--
create table 表名(
列名 数据类型,
列名 数据类型
unique key 唯一索引名(列名,列名,...)
);
--
create table 表名(
列名 数据类型,
列名 数据类型,
constraint 约束名 unique(列名,列名,...)
);
向已有表中添加唯一约束
alter table 表名 add unique key 唯一索引名(列名,列名,...)
alter table 表名 add unique(列名,列名, ...)
alter table 表名 add constraint 约束名 unique(列名,列名,...)
修改表中的某列为唯一索引
alter table 表名 modify 列名 数据类型 unique;
删除表中的唯一约束
alter table 表名 drop index 唯一索引名; -- 唯一索引名可通过show create table 表名查询获得
主键约束 PRIMARY KEY
表中任意类只要满足以下条件,都可以用于主键
--任意两行的主键都不相同
--每行都具有主键值(即列中不允许NULL值)
--包含主键的列从不修改或更新
--主键值不能重用
创建表时指定主键
create table 表名(
列名 数据类型,
列名 数据类型,
[constraint [索引名]] PRIMARY KEY(列名)
);
--
create table 表名(
列名 数据类型 PRIMARY KEY,
列名 数据类型
);
向已有表中增加主键约束
alter table 表名 add 列名 数据类型 primary key; -- 向表中增加一列,并且将其设为主键
--
alter table 表名 add primary key(列名); --将表中已有的列变为主键
--
alter table 表名 add constraint [约束名] primary key(列名); --将表中已有的列变为主键
删除主键约束
alter table 表名 drop primary key;
外键约束 FOREIGN KEY 只有InnoDB支持外键约束
在创建表示定义外键约束
create table 主表名(
列名 数据类型,
列名 数据类型,
primary key(列名)
);
create table 附表名(
列名 数据类型,
列名 数据类型,
constraint [约束名] foreign key(列名) references 主表名(主表的primary key列名)
);
向已有表中添加外键约束
alter table 表名 add constraint [约束名] foreign key(列名) references 主表名(主表的primary key列名);
删除表中的外键约束
alter table 表名 drop foreign key 外键约束名;
默认值约束 DEFAULT
create table 表名(
列名 数据类型 default 默认值,
列名 数据类型
);
向已有表添加默认值约束或修改默认值约束
alter table 表名 modify 列名 数据类型 [default 默认值];
--
alter table 表名 alter 列名 set default 默认值;
删除默认值约束
alter table 表名 alter 列名 drop default;
检查约束 CHECK
MySQL不支持CHECK约束,解决的办法有两种:
1)如果需要设置CHECK约束的字段范围小,并且比较容易列举全部的值,可考虑将该字段的类设置为枚举类型enum()或者集合类型set()。比如性别字段、爱好字段等可以这样设置。
create table checkDemoTable(
id int auto_increment,
name varchar(45),
sex enum('男', '女'), -- 使用enum()限制取值范围,进行约束
interest set('上网', '旅游', '美食', '健身', '电影', '阅读', '音乐'), -- 使用set()限制取值范围,进行约束
primary key(id)
);
insert into checkDemoTable(name, sex, interest)
values('lily', '女', '上网, 电影, 音乐'), ('Tom', '男', '旅游, 健身, 电影');
-- 超出enum()和set()范围之外值是无法插入到表中的
-- enum()和set()的区别:
-- enum()每次只能选择一个成员;而set()可以选择一个或者多个成员但是不能重复选择同一个成员
2)如果需要CKECK约束的字段是连续型的,不易列举时,可采用触发器来实现CHECK的功能
create table test(
id int auto_increment,
num int,
primary key(id)
);
-- 使用触发器来限制插入
delimiter $$
create trigger triggerTest before insert on test for each row
begin
if new.num < 0 then
set new.num = 0;
end if;
end;
$$
delimeter ;
测试

约束 CONSTRAINT的更多相关文章
- SQL基础--> 约束(CONSTRAINT)
--============================= --SQL基础--> 约束(CONSTRAINT) --============================= 一.几类数据完 ...
- SQL Server - 约束 CONSTRAINT
总结 约束放置在表中,以下五种约束: NOT NULL 非空约束C 指定的列不允许为空值 UNIQUE 唯一约束U 指定的列中没有重复值,或该表中每一个值或者每一组值都将是唯一的 PRIMARY KE ...
- Oracle约束(Constraint)详解
概述 约束是数据库用来确保数据满足业务规则的手段,不过在真正的企业开发中,除了主键约束这类具有强需求的约束,像外键约束,检查约束更多时候仅仅出现在数据库设计阶段,真实环境却很少应用,更多是放到程序逻辑 ...
- Oracle11g温习-第十四章:约束( constraint )
2013年4月27日 星期六 10:48 1.约束的功能 通过一些强制性商业规则,保证数据的完整性.一致性 2.约束的类别 1 ) not null 不允许为空 2 ) check ...
- MySQL——约束(constraint)详解
该博客说说关于数据库中一个重要的知识点——约束 一.什么是约束约束英文:constraint 约束实际上就是表中数据的限制条件 二.约束作用表在设计的时候加入约束的目的就是为了保证表中的记录完整和有效 ...
- SQL 约束
先用设计器创建约束.再用代码创建约束.数据库约束是为了保证数据的完整性(正确性)而实现的一套机制见文件Employee.sql非空约束(选择复选框)主键约束(PK) primary key const ...
- Oracle--数据库中的五种约束
数据库中的五种约束 数据库中的五种约束及其添加方法 五大约束 1.--主键约束(Primay Key Coustraint) 唯一性,非空性 2.--唯一约束 (Unique Counstraint ...
- SQL笔记-第六章,索引与约束
一.索引 CREATE INDEX 索引名 ON 表名(字段1, 字段2,……字段n) CREATE INDEX idx_person_nameage ON T_Person(FName,FAge) ...
- MySQL基础(三)——约束
MySQL基础(三)--约束 约束是在表上强制执行的数据校验规则,主要用于维护表中数据的完整性以及当数据之间有以来关系时,保护相关的数据不会被删除. 根据约束对列的限制,可以划分为:单列约束(只约束一 ...
随机推荐
- sudo su到root或到其它用户报这种错
一般不会出现这种情况,除非你进入的这个目录已经被删了.然后切换用户就找不到这个目录,所以报错. 这种情况下我们只要去到一个正常的目录就好了,比如:cd ~ 然后再切换,ok.
- maven自动部署Tomcat错误排除
转自:https://blog.csdn.net/wuha0/article/details/18658113 在Maven与Tomcat配合部署过程中,最常见的错误有三种,折腾了半天,终于找到三种错 ...
- 大型运输行业实战_day14_1_webserivce简单入门
1.简单使用 1.1.服务端 1.编写接口 package com.day02.sation.ws; /** * Created by Administrator on 1/12. */ public ...
- Python 多继承与MRO-C3算法
继承关系图:树结构 广度优先遍历:先找A,再找B.C,最后找D.E.(顺序:A.B.C) 深度优先遍历:先找A,再找B,接着找D.E(把B里面找完):然后找C.(顺序:A.B.D.E.C) MRO-C ...
- Excel学习之图表创建
前言:由于工作的需要,现在需要恶补Excel知识,温故而知新,不记录下来自己的学习的点点滴滴怎么能行 Excel版本:2016 一.插入如下图所示的数据源: 1.勾选图表区域范围 2.选中区域范围后直 ...
- Archlinux 遇到的坑
1.系统更新之后pip炸了,解决方案是用官方的get-pip安装,同时配置文件,避免使用sudo安装 2.grub不如syslinux配置快捷,入了syslinux的坑 3.平铺式桌面搭配快捷键,Hi ...
- Linux下鼠标滚轮速度调整
安装imwheel 于home下创建.imwheelrc gedit ~/.imwheelrc 在.imwheelrc中粘贴以下内容 ".*" None, Up, Button4, ...
- 齐博CMS:最常用的一些变量名,方便二次开发.必须要熟悉的
ROOT_PATH程序所在硬盘目录的绝对地址,等同于以前的PHP168_PATH$webdb网站的全局变量,模块的全局变量也是这个$onlineip当前用户的IP$timestamp当前时间$WEBU ...
- elasticsearch ik安装
/usr/share/elasticsearch/bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-ana ...
- 思维+并查集 hdu5652
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5652 题意: 输入T,接下来T个样例,每个样例输入n,m代表图的大小,接下来n行,每行m个数,代表图, ...