MySQL基础(三)——约束
MySQL基础(三)——约束
约束是在表上强制执行的数据校验规则,主要用于维护表中数据的完整性以及当数据之间有以来关系时,保护相关的数据不会被删除。
根据约束对列的限制,可以划分为:单列约束(只约束一列)和多列约束(同时约束多列)。
约束可以在创建表时,为对应的数据列增添约束,也可以在创建表后,用修改表的方式来增加约束。
1.not null约束
非空约束。
确保指定的列不为空,此约束只能作为列级约束使用。在SQL中,所有的数据类型的值都可以是null,但是要注意空字符串不是null,0也不是null。
#创建表时为字段添加not null约束 create table stu( s_id int not null, s_name ) ); #修改表结时为字段添加not null约束 alter table stu modify s_name ) not null;
2.unique约束
唯一约束,用于保证指定列或者指定列的组合不出现重复值,但是要注意的是,虽然被unique约束的列或者列组合不许出现重复值,但是可以出现多个null值。
创建表时建立唯一约束:
#创建表时,使用列级约束语法建立约束 create table student( #使用列级约束语法建立唯一约束 s_name ) unique ); #创建表时,使用表级约束语法建立约束 create table studetn( s_id int not null, s_username ), s_password ) #使用表级约束建立唯一约束(这里是组合约束) constraint uk unique (s_username,s_password) );
修改表时使用add关键字或者modify关键字增加约束
#新建一个表,没有任何约束 create table teacher( t_id int, t_username ), t_password ) ); #使用add关键字在修改表时,为列添加unique约束,这里是列组合 alter table teacher add unique(t_username,t_password); #使用modify关键字在修改列定义时,增加unique约束 alter table teacher modify t_id int unique;
3.primary key约束
primary key约束的效果为not null约束效果和unique约束效果之和,即不允许出现null也不允许出现重复值。如果对多列组合进行primary key约束,则多列里包含的每一列都不能为null,但只要求这些列组合不能重复。这个是什么意思嘞。。。就是在同一列可以有重复的值,但是嘞,把这些列的值组合到一起不能有重复的。。。
在创建了主键约束时,MySQL会在主键约束所在的列或者列组合上建立对应的唯一索引。
#创建表时建立列的主键约束,使用列级语法 create table stu( #使用列级语法建立主键约束 s_id int primary key, s_name ) ); #创建表时建立列组合的主键约束,只能使用表级约束语法 create table teacher( t_id int, t_name ), #在MySQL中指定主键约束名是无效的,无论如何指定 #他的约束名都是primary primary key(t_id,t_name) );
删除主键约束
#在修改表中删除指定表的主键约束 alter table stu drop primary key;
增加主键约束
#修改表时通过使用modify关键字,用列级语法添加primary key约束 alter table stu modify s_name ) primary key; #修改表时通过使用add关键字,用表级语法添加primary key约束 alter table stu add primary key(s_id,s_name);
自增长:MySQL对主键列支持自增长的特性,即如果某个数据列的类型是整型,而且该列作为主键列,则可指定该列具有自增长功能。指定自增长功能通常用于设置逻辑主键列——该列的值没有任何物理意义,仅仅用于标识每行记录。MySQL使用auto_increment来设置自增长。
#一旦指定了某列具有自增长特性,则向该表插入记录时可不为该列指定值 #该列的值由数据库系统自动生成 create table test( #建立主键约束,使用自增长 id int auto_increment primary key, name ), pass ) );
4.foreign key约束
外键约束主要用于保证一个或者两个数据表之间的参照完整性,外键是构建于一个表的两个字段或者两个表的两个字段之间的参照关系。外键确保相关的两个字段的参照关系:子表外键列的值必须在主表被参照列的值范围内,或者为空。
当主表的记录被从表记录参照时,主表在从表中参照该记录的所有记录删除之前,不能删除此记录。只有当从表里参照该记录的所有记录全部删除后,才可以删除主表中的该记录,也可以删除主表记录时级联删除从表中所有参照该记录的从表记录。
foreign key约束的主要作用是防止表之间的连接被破坏;同时,由于外键列的值只能是被参照列的值的范围内的值,这样也防止了在外键列插入非法的数据。
foreign key在一对一关系中的使用:
可以在任意一张表上建立外键列。
foreign key在一对多关系中的使用:
在一对多的关系中,外键列通常被设置在多的一端,例如一个老师对应许多的学生,那么我们在学生端设置外键列,该列保存该学生对应的老师端的主键值。
例:
#简单的两张表 #教师表:教师id 姓名 create table teacher( #列级约束,指定主键 t_id int primary key, t_name ) ); #学生表:学号 姓名 教师id create table student( #列级约束,指定主键 s_id int primary key, s_name ), tea_id int references teacher(t_id) );
哈哈,上边的列级语法的foreign key在MySQL中不会生效的,在MySQL中只能用表级约束语法,才会使foreign key生效。所以我们把学生表的创建改成使用表级约束语法。
foreign key在多对多关系中的使用:
5.check约束
MySQL基础(三)——约束的更多相关文章
- 04 mysql 基础三 (进阶)
mysql 基础三 阶段一 mysql 单表查询 1.查询所有记录 select * from department; select * from student; select * from ...
- mysql基础三(视图、触发器、函数、存储过程、事务、防注入)
一.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用. 1.创建视图 -格式:CREATE ...
- mysql基础(三)——中级查询
创建表 CREATE TABLE DEPT( DEPTNO ) PRIMARY KEY, DNAME ) , LOC ) ) ; ,'ACCOUNTING','NEW YORK'); ,'RESEAR ...
- 总结: MySQL(基础,字段约束,索引,外键,存储过程,事务)操作语法
1. 显示数据库列表 show databases; # 查看当前所有数据库 show databases \G #以行的方式显示 2. 在命令行中,执行sql语句 mysql -e 'show ...
- mysql基础之约束
约束的目的: 1.约束保证数据的完整性和一致性. 2.约束分为表级约束 和 列级 约束.(针对约束字段的数目的多少来确定的) 3.约束类型包括 not null (非空约束) primary key( ...
- Mysql基础(三)
#DML语言 /* 数据操作语言 插入:insert insert into 表名(列名,...) values(值1,...); insert into 表名 set 列名=值, 列名=值,... ...
- MySQL 基础三 函数(聚合、字符串、时间、条件判断)
1.聚合 其它:GROUP_CONCAT.avg.sum.count.max.min SELECT typeid,GROUP_CONCAT(goodsname) FROM `goods` GROUP ...
- Mysql基础(三):MySQL基础数据类型、完整性约束、sql_mode模式
目录 2.MySQL基础数据类型.完整性约束.sql_mode模式 1. MySQL常用数据类型 2. 完整性约束 3. MySQL的sql_mode模式说明以及设置 2.MySQL基础数据类型.完整 ...
- { MySQL基础数据类型}一 介绍 二 数值类型 三 日期类型 四 字符串类型 五 枚举类型与集合类型
MySQL基础数据类型 阅读目录 一 介绍 二 数值类型 三 日期类型 四 字符串类型 五 枚举类型与集合类型 一 介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己 ...
随机推荐
- firefox中 checkbox属性checked="checked"已有,但复选框却不显示打钩的原因
最近在调试复选框的应用,在ie没有问题,考虑到兼容性,试试了firefox,遇到了问题. 复选框绑定了click事件,点一次选中,再点击取消选中,依次类推.这个功能在ie中没问题,但是在firefox ...
- linux tomcat 配置
http://www.cnblogs.com/xdp-gacl/p/4097608.html
- paper 8:支持向量机系列五:Numerical Optimization —— 简要介绍求解求解 SVM 的数值优化算法。
作为支持向量机系列的基本篇的最后一篇文章,我在这里打算简单地介绍一下用于优化 dual 问题的 Sequential Minimal Optimization (SMO) 方法.确确实实只是简单介绍一 ...
- EBS多OU和多帐套客户化总结
(一) 多OU总结 . Form多OU实现 ) 创建一个Table,以CUX_AP_CHECK_HEADER_ALL为例 ) 创建Table的两个Synonym(一个不含_ALL,一个以_ALL结尾) ...
- 10.Java设计模式 工厂模式,单例模式
Java 之工厂方法和抽象工厂模式 1. 概念 工厂方法:一抽象产品类派生出多个具体产品类:一抽象工厂类派生出多个具体工厂类:每个具体工厂类只能创建一个具体产品类的实例. 即定义一个创建对象的接口(即 ...
- [MaxOSX] 路由操作
查看当前路由情况 netstat -nr 添加路由 sudo route -n add x.x.x.x/24 x.x.x.x 可以简单这样子理解: 第1个参数 x.x.x.x/24是远程地址 第2个参 ...
- yii2添加自定义字段
在模型model文件中,添加 public $attributes;即可,$attributes 为要添加的新字段
- IE7/8浏览器都不能显示PNG格式图片
方法一:重新注册pngfilt.dll文件.这个方法是PNG格式开发商官方网站上的推荐方法之一,抱着试试的想法按网站推荐的方法试了,一试成功.方法如下:使用 开始->运行,在运行输入框中输入 “ ...
- SQL SERVER2012秘钥
来自网络: MICROSOFT SQL SERVER 2012 DEVELOPER 版(开发版)序列号:YQWTX-G8T4R-QW4XX-BVH62-GP68YMICROSOFT SQL SERVE ...
- scrapy学习记录
scrapy是一个用来爬取一个或多个网站的数据,提取数据的应用框架.下载过程非常复杂,而且会遇到各种问题.所以写个博客来记录下. 安装好python2.7之后,就可以开始.安装scrapy前还需要安装 ...