1.约束是在表上强制执行的数据检验规则,约束主要用于保证数据库的完整性。

2.当表中数据有相互依赖性时,可以保护相关的数据不被删除。

3.大部分数据库支持下面五类完整性约束:

  - NOT NULL非空

  - UNIQUE Key唯一值

  - PRIMARY KEY主键

  - FOREIGN KEY外键

  - CHECK检查

4.约束作为数据库对象,存放在系统表中,也有自己的名字

5.创建约束的时机:

  -在建表的同时创建

  -建表后创建(修改表)

6.可定义列级约束或表级约束

        列级约束直接跟在列后面定义,不再需要指定列名,与列定义之间用空格分开

        表级约束通常放在所有的列定义之后定义,要显式指定对哪些列建立列级约束,与列定义之间采用英语逗号,隔开

        如果是对多列建联合约束,只能使用表级约束语法

    非空约束(NOT NULL)  栗子:NAME VARCHAR(18) NOT NULL

      列级约束:只能使用列级约束语法定义;确保字段值不允许为空;只能在字段级定义;    

      NULL值:所有数据类型的值都可以是NULL;空字符串不等于NULL;0也不等于NULL;

    唯一约束(UNIQUE)  栗子:NAME VARCHAR(18) UNIQUE NOT NULL

      唯一性约束条件确保所在的字段或者字段组合不出现重复值;

      唯一性约束条件的字段允许出现多个NULL;

      同一张表内可建多个唯一约束;

      唯一约束可由多列组合而成;

      建唯一约束时MySQL会为止建立对应的索引;

      如果不给唯一约束起名,该唯一约束默认与列名相同;

    主键约束(PRIMARY KEY)  栗子:id INT PRIMARY KEY AUTO INCREMENT

      主键从功能上看相当于非空且唯一

      一个表中之允许一个主键

      主键是表中唯一确定一行数据的字段

      主键字段可以是单字段或者是多字段组合

      当建立主键约束时,MySQL为主键创建对应的索引

      主键约束名总为PRIMARY KEY

    外键约束(FOREIGN KEY REFERENCE)  栗子:1>dept_id INT REFERENCE tb_dept(id)

                           2>表内  CONSTRAINT FOREIGN KEY 外键名(建议是表名_约束名) (外键) REFERENCE  主表 (字段)

                            CONSTRAINT FOREIGN KEY tb_eployee_fk (dept_id) REFERENCE tb_dept(dept_id)

                           3>表外  ALTER TABLE 表名 ADD [CONSTRAINT constraint] type (column);

                     ALTER TABLE tb_emp ADD CONSTRAINT FOREIGN KEY tb_eployee_fk (dept_id) REFERENCE tb_dept(dept_id)

      外键是构建一个表的两个字段或者两个表的两个字段之间的关系

      外键确保了相关的两个字段的两个关系

      子(从)表外键列的值必须在主表参照列值的范围内,或者为空(也可以加非空约束,强制不允许为空)

      当主表的记录被子表参照时,主表记录不允许被删除

      外键参照的只能是主表主键或者唯一键,保证子表记录可以准确定位到被参照的记录

      格式FOREIGN KEY(外键列名) REFERENCE 主表(参照列)

    CHECK约束  栗子:age INT CHECK(age>18 AND age<60) 或者 sex VARCHAR(2) (sex='男' OR sex='女') check约束在MySQL中不起作用

      既可作为列级约束,也可作为表级约束

      定义在字段上的每一记录都要满足的条件

      在CHECK中定义检查的条件表达式,数据需要符合设置的条件

      条件表达式不允许使用

      参照其他记录的值

7.增加约束(视频46分)  i> 在建表之后,即表外 ALTER TABLE table ADD [CONSTRAINT constraint] type (column);

       ii> 在建表的时候,即表内 CONSTRAINT FOREIGN KEY tb_eployee_fk (dept_id) REFERENCE tb_dept(dept_id)

    可增加或删除约束,但不能直接修改

    可使约束启用和禁用

    非空约束必须使用MODIFY子句增加

    只要是可以使用列级约束语法来定义的约束,都可以通过modify来增加该约束

8.插入数据测试,这两句执行一次添加一行数据

    INSERT INTO tb_emp(NAME,sex,age,addresss,email,dept_id)

    VALUE('a','男','23','gz','123@163.com',1);

9.有单列约束和多列约束

10.删除约束

    约束可被删除,删除约束不会对数据产生影响

    当删除被外键参照的主键时候,应该采用CASCADE关键字来级联删除外键,否则无法删除主键

    语法如下:ALTER TABLE 表名 DROP CONSTRAINT 约束名

#删除约束

#删除NOT NULL约束
ALTER TABLE tb_emp MODIFY NAME VARCHAR(18) #删除UNIQUE约束
ALTER TABLE tb_emp DROP INDEX email #删除PRIMAEY KEY约束 自动增长不能删除
ALTER TABLE tb_emp MODIFY id INT
ALTER TABLE tb_emp DROP PRIMARY KEY #删除外键约束
ALTER TABLE tb_emp DROP FOREIGN KEY tb_emp_ibfk_1

11.自动增长和默认值

  auto_increment只是MYSQL特有的,其他数据库里面没有,只能放在主键后面

  sex VARCHAR(2) DEFAULT '男',

MySQL学习笔记——约束的更多相关文章

  1. Mysql学习笔记(三)对表数据的增删改查。

    正文内容. 这一部分是最简单的,也是最麻烦的.简单是因为其实只包括增删该插四个部分.大体上看,增加数据.删除数据.修改数据.查询数据都不麻烦啊,我们日常都是常用的.这个谁不会呢?以前在培训机构学mys ...

  2. MySQL学习笔记一

    MySQL 学习笔记 一 一.数据库简单介绍 1. 按照数据库的发展时间顺序,主要出现了以下类型数据库系统: Ø 网状型数据库 Ø 层次型数据库 Ø 关系型数据库 Ø 面向对象数据库 上面4中数据库系 ...

  3. 【mysql学习笔记整理】

    /*mysql学习笔记整理*/ /*常用的数据库操作对象*/ #库的操作#创建#数据库的创建USE mysql;CREATE DATABASE db_x;#删除#删除数据库DROP DATABASE ...

  4. MySql学习笔记四

    MySql学习笔记四 5.3.数据类型 数值型 整型 小数 定点数 浮点数 字符型 较短的文本:char, varchar 较长的文本:text, blob(较长的二进制数据) 日期型 原则:所选择类 ...

  5. MySql学习笔记三

    MySql学习笔记三 4.DML(数据操作语言) 插入:insert 修改:update 删除:delete 4.1.插入语句 语法: insert into 表名 (列名1,列名2,...) val ...

  6. 一千行MySQL学习笔记 (转)

    出处:  一千行MySQL学习笔记 /* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权 ...

  7. mysql basic operation,mysql总结,对mysql经常使用语句的详细总结,MySQL学习笔记

    mysql> select * from wifi_data where dev_id like "0023-AABBCCCCBBAA" ; 1.显示数据库列表.show d ...

  8. Mysql学习笔记(二)数据类型 补充

    原文:Mysql学习笔记(二)数据类型 补充 PS:简单的补充一下数据类型里的String类型以及列类型... 学习内容: 1.String类型 2.列类型存储需求 String类型: i.char与 ...

  9. Mysql学习笔记(一)数据类型

    原文:Mysql学习笔记(一)数据类型 学习内容: Mysql基本数据类型. 1.数字类型.. i.整型     Mysql数据类型             含义(有符号)     tinyint(m ...

随机推荐

  1. 1021mysql 全外连接

    mysql 不支持全外连接,那么使用union all进行替换 -- 其他数据库 SELECT * FROM aa aFULL OUTER JOIN bb b ON a.col1=b.col1AND ...

  2. .net 使用memcache做缓存

    前段时间去一家公司面试,面试官问到我对缓存了解多少,因为我是做B/S开发的,所以把知道的都说了.比如:Application.Cache.页面缓存.文件缓存.然后面试官说“不止这些,还有呢?”,我后来 ...

  3. 一个Activity掌握Android4.0新控件 (转)

    原文地址:http://blog.csdn.net/lavor_zl/article/details/51261380 谷歌在推出Android4.0的同时推出了一些新控件,Android4.0中最常 ...

  4. Java垃圾收集算法介绍

    垃圾回收器GC(Garbage Collection) 一.引用计数算法(Reference Counting) 介绍:给对象添加一个引用计数器,每当一个地方引用它时,数据器加1:当引用失效时,计数器 ...

  5. Redis集群(一):基本概念

    一.使用版本:3.0.0.0 二.基本概念:  号至 11000 号的哈希槽, 这样集群就不会因为主节点 B 的下线而无法正常运作了. 异步复制(虽然是异步复制,但是执行写命令和复制命令到从节点几乎是 ...

  6. 网络爬虫讲解(附java实现的实例)

    本文转载http://blog.csdn.net/luojinping/article/details/6870898 转载过来主要是防止想百度文库一样突然停止运作,导致很多文库丢失而无法找寻 网络蜘 ...

  7. 控件(文本类): TextBox, PasswordBox

    介绍背水一战 Windows 10 之 控件(文本类) TextBox PasswordBox 示例1.TextBox 的示例 1Controls/TextControl/TextBoxDemo1.x ...

  8. 22 java当中的数组

    class Test { public static void main(String args[]) { //数组的静态声明法 int arr[]={5,2,7,9,0}; //数组的动态声明法 i ...

  9. 如果把表单数据的校验交给了javascript那么后台还有没有必要对数据做校验呢

    现在很多同事,包括我,我表单的数据验证交给了javascript来做,那么新的问题来了,如果交给了javascript那么后台还有没有必要对数据做校验呢

  10. 【bzoj2654】 tree

    http://www.lydsy.com/JudgeOnline/problem.php?id=2654 (题目链接) 题意 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有nee ...