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. 0921MySQL 报错 ERROR 1290 (HY000): running with the --secure-file-priv

    http://blog.itpub.net/26506993/viewspace-2121850/ mysql> show variables like '%secure%';+-------- ...

  2. less sass学习总结(——待续哦——)

    一:less.sass是为了解决什么?  为什么要让css以编程语言来书写呢?

  3. php上传sae路径问题

    我们写php时,会有 define('POOT_PATH', dirname(__FILE__)); 但是sea中没有用,所以我们要用 define("ROOT_PATH", $_ ...

  4. c# Winform 开发分屏显示应用程序

    分屏显示即可把一台主机内运行的多个程序分别显示在不同的两个(或多个)屏幕上.目前市面上主流的显卡都支持分屏显示(显示双屏幕),如果需要显示2个以上的屏幕,则应使用“拖机卡”类的硬件. 设置分屏显示的两 ...

  5. bzoj 1001

    Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一 ...

  6. Self Host WebApi服务传输层SSL加密(服务器端+客户端调用)

    接上篇<WebApi服务URI加密及验证的两种方式>,在实际开发中,仅对URI进行加密是不够的,在传输层采用SSL加密也是必须的. 如果服务寄宿于IIS,那对传输层加密非常简单仅需要配置一 ...

  7. js-新窗口打开页面

    window.open(basePath+"/web/homeIndex?code="+code); 1.超链接<a href="http://www.xxx.ne ...

  8. ps还能用脚本切片?

    最近在慕课网上看有关于ps切图的视频,发现ps 切片的水还挺深的.这相当于我的一篇学习笔记吧.对于ps的基本切图我觉得对于前端人员来说就是a piece of cake.但是对于ps的精准切图,我不知 ...

  9. css-css权威指南学习笔记1

    第一章 CSS和文档 1.结构化HTML:(个人理解) 1.内容.样式.行为分离 2.标签语义化,什么样的标签做什么样的事 3.符合web标准 4.结构清晰,header.content.footer ...

  10. win10前面板耳机没声音

    首先去装Relteck的驱动,windows64位的下载地址是: http://12244.wpc.azureedge.net/8012244/drivers/rtdrivers/pc/audio/0 ...