约束 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基础(三)--约束 约束是在表上强制执行的数据校验规则,主要用于维护表中数据的完整性以及当数据之间有以来关系时,保护相关的数据不会被删除. 根据约束对列的限制,可以划分为:单列约束(只约束一 ...
随机推荐
- JVM 图解--1.6,1.7,1.8
- Java将一个字符串的首位改为大写后边改为小写的实现,String
Java将一个字符串的首位改为大写后边改为小写的实现,String 思路: 获取首字母, charAt(0) substring(0,1) 转成大写 toUpperCase() 转大写hellO=== ...
- asp.net mvc areas
http://www.codeproject.com/Articles/714356/Areas-in-ASP-NET-MVC
- centos6.8下配置https服务器
centos6.8下配置https服务器 1.1 环境 l 系统环境:内核环境为2.6.32版本 64位的CentOS release 6.8 (Final) [root@localhost ~] ...
- cdh 安装系列2--cdh manager product 安装
前期准备工作: 准备三台centos7 地址分别为 192.168.20.163:192.168.20.162:192.168.20.161 用163这台机器链接外网,并安装manager以及mana ...
- asp.net之发送邮件1
/// <summary> ///发邮件给用户 /// </summary> /// <param name="userEmail">用户的邮件 ...
- 关于OPEN_MAX宏undeclared的问题
最近在看unp时,I/O复用-poll一章的代码使用到了OPEN_MAX.据书中描述,这一宏定义在limits.h头文件中,指代一个进程在任意时刻能打开的最大描述符数目.但在代码编译时遇到了错误,提示 ...
- 【Django】ModuleNotFoundError: No module named 'books_ordersschool'
Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x00000 ...
- 22. Generate Parentheses (backTracking)
Given n pairs of parentheses, write a function to generate all combinations of well-formed parenthes ...
- twitter oa
字符串括号匹配有效性: 要求从直接return改成了返回yes or no.需要添加到list后break,然后每次循环之前,boolean要重新初始化. array index报错是什么鬼?算了,脑 ...