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. ViewPager

    1.ViewPager的功能为实现视图滑动 在主布局里边加入: <android.support.v4.view.ViewPager 这个组件,注意这个组件是用来显示左右滑动的界面的,如果不加载 ...

  2. iOS开发中的错误整理,AFN框架和MJRefresh框架搭配应该注意的问题

    注意问题一:每次请求之前先将之前的请求取消                            注意问题二:请求成功之后要判断footer或者header的显示状态 首次下拉刷新,要判断是否已经全部 ...

  3. 日期处理-将String 转为Date

    package com.test; import java.text.DateFormat; import java.text.ParseException; import java.text.Sim ...

  4. 总结Controller向View传值的方式(转)

    总结发现ASP.NET MVC中Controller向View传值的方式共有6种,分别是: ViewBag ViewData TempData 向普通View页面传一个Model对象 向强类型页面传传 ...

  5. Entity Framework Code First (四)Fluent API - 配置属性/类型

    上篇博文说过当我们定义的类不能遵循约定(Conventions)的时候,Code First 提供了两种方式来配置你的类:DataAnnotations 和 Fluent API, 本文将关注 Flu ...

  6. Input checkbox 添加样式背景

    <style type="text/css"> .chk_1 { width: 20px; height: 20px; position: absolute; top: ...

  7. 让webstorm支持avalon语法自动补全

    在file菜单下选择Settings,选择Editor ——> Inspections ——> Html ——> Unknown HTML tag attibute添加以下标签ms- ...

  8. 自定义不等高cell—storyBoard或xib自定义不等高cell

    1.iOS8之后利用storyBoard或者xib自定义不等高cell: 对比自定义等高cell,需要几个额外的步骤(iOS8开始才支持) 添加子控件和contentView(cell的content ...

  9. Java数组操作利器:Arrays工具类

    java.util.Arrays提供大量的工具方法来操作数组,这些方法全是静态方法. 1 便捷创建List public static <T> List<T> asList(T ...

  10. 【poj1041】 John's trip

    http://poj.org/problem?id=1041 (题目链接) 题意 给出一张无向图,求字典序最小欧拉回路. Solution 这鬼畜的输入是什么心态啊mdzz,这里用vector储存边, ...