约束 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基础(三)--约束 约束是在表上强制执行的数据校验规则,主要用于维护表中数据的完整性以及当数据之间有以来关系时,保护相关的数据不会被删除. 根据约束对列的限制,可以划分为:单列约束(只约束一 ...
随机推荐
- java第一课总结
转眼间开学了,我们也正式进入了大二.心里既有激动,又有些感慨,还带有一些担忧.激动的是我们褪去了大一的稚气成为了一名大二的学长了,第一次体会到了大学学长的感觉,心里很是激动.感慨的是我们又成长了一岁, ...
- HashMap、LinkedHashMap、ConcurrentHashMap、ArrayList、LinkedList 底层实现
HashMap相关问题 1.你用过HashMap吗?什么是HashMap?你为什么用到它? 用过,HashMap是基于哈希表的Map接口的非同步实现,它允许null键和null值,且HashMap依托 ...
- target=_blank攻击
[target=_blank攻击] 在<a>标签中加入 rel="noopener noreferrer" 来避免. 参考:https://mathiasbynens. ...
- c# list批量添加 对象 到数据库的sql
public void AddList(List<ProModule.Model.pro_manifest_item> list) { Hashtable SQLStringList = ...
- django实现分页
分页实现思路: 1.接口拉取库内数据,进行分页 2.页面实现分页组件,切换不同链接 一.接口实现: from django.core.paginator import Paginator p=Pagi ...
- js中获取一个对象里面的方法和属性的javascript
<script type="text/javascript"> var obj = { attribute:1, method:function() { alert(& ...
- leetcode 数组类型题总结
1,removeDuplicates(I) int removeDuplicatesI(vector<int>& nums){ // 重新组织数组,同 removeDuplicat ...
- STL::unordered_map/unordered_multimap
unordered_map: 和 unorder_set 相似,该容器内部同样根据 hash value 把键值对存放到相应的 bucket(slot)中,根据单个 key 来访问 value 的速度 ...
- DBCP连接数据库了解一下
---恢复内容开始--- package com.kevin.Utils; import javax.sql.DataSource; import org.apache.commons.dbcp.Ba ...
- IE浏览器调试工具不能使用
Mac 使用VMware Fusion虚拟机,安装Windows 7 Service Pack 1 (SP1). 移除自带的IE8,下载并安装IE11(64位). IE 11 调试工具不能使用,并且调 ...