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. 《锋利的jQuery》读书笔记

    jQuery理念:write less, do more! 第 一 章一:jQuery简介 a:轻量级 b:强大选择器 c:DOM封装 d:ajax封装 e:不污染顶级变量 只建立一个jQuery对象 ...

  2. Hibernate原生SQL映射MySQL的CHAR(n)类型到String时出错

    今天在用Hibernate通过原生SQL和ResultTransformer映射时,出现数据类型不匹配的错误.但是通过Entity映射,没有问题.在网上找了好多答案,终于解决了. 核心代码: Stri ...

  3. oracle游标调试结果显示位置

    在SQL窗口输入内容,按F8后,可以在下图看到

  4. Java垃圾收集算法介绍

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

  5. Shell命令_if

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 #if if [ 条件判断式 ] ...

  6. 100722C

    My birthday is coming up and traditionally I'm serving pie. Not just one pie, no, I have a number N ...

  7. AOPR弹出Order Now窗口怎么办

    当我们忘记了我们自己设置的office密码的时候,需要一款office密码破解软件来帮我们破解,Advanced Office Password Recovery就是这样的一款软件,其简称AOPR.试 ...

  8. iOS的网络环境判断

    网络环境的判断有两种方式 1.Reachability 2.AFNetWorking中 AFNetworkReachabilityManager Reachability步骤 (1)导入Reachab ...

  9. watch监听 chechbox 全选

    // 监控全选checkbox的状态 $scope.$watch('AllCheck', function (newValue, oldValue) { // 第一次不执行 if (newValue ...

  10. O(nlogn)LIS及LCS算法

    morestep学长出题,考验我们,第二题裸题但是数据范围令人无奈,考试失利之后,刻意去学习了下优化的算法 一.O(nlogn)的LIS(最长上升子序列) 设当前已经求出的最长上升子序列长度为len. ...