约束

作用:保证数据的完整性,唯一性

根据字段:分为表级约束(针对2个或者2个以上字段使用),列级约束(针对1个字段使用)

约束类型:NOT NULL 非空约束

PRIMARY KEY  主键约束

UNIQUE KEY  唯一约束

DEFAULT 默认约束

FOREIGN KEY 外键约束

外键约束:保持数据一致性完整性,实现一对一或一对多关系

创建外键约束的要求:

1.父表(子表参照的表)和子表(具有外键列的表)必须具有相同存储引擎,禁止使用临时表

2.存储引擎只能为InnoDB

3.外键列(有FOREIGN KEY关键词)和参照列(外键所参照的那一列)必须具有相似的数据类型。数字的长度和是否有符号位要相同,字符长度可以不同

4.外键列和参照列必须创建索引。如果外键列不存在索引的话,MySQL将自动创建索引。

外键的字段数据类型和所参照的表中的数据类型不同,所以报错。

这里数据类型长度和符号都相同,所以外键创建成功了。


外键约束的参照操作

CASCADE:从父表删除或更新且自动删除或更新子表中匹配的行

SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL。如果使用该选项,必须保证子表列没有指定NOT NULL

RESTRICT:拒绝对父表的删除或更新操作

NO ACTION:在MySQL中与RESTRICT相同

CASCADE

必须先在父表中插入记录,子表才能插入记录。

←父表中插入三条省份数据。

←子表中插入三条记录,但是由于其中一条插入error但是id已经自增了,所以没有2

←删除父表中的id=3的数据,然后子表中的为3的省份记录也不见了

实际工作中很少有这样用物理约束的,

一般都用逻辑来约束。

一般都是定义逻辑外键,而不是物理外键,不去使用FOREIGN KEY这个关键词进行定义。


列级约束:对于一个列所创建的约束叫做列级

表级约束:对于2个或2个以上则成为表级

NOT NULL, DEFAULT 只有列级约束

MySQL学习笔记(3)的更多相关文章

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

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

  2. MySQL学习笔记一

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

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

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

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

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

  5. 初识mysql学习笔记

    使用VMVirtualBox导入Ubuntu后,可以通过sudo apt-get install mysql-server命令下载mysql. 在学习过程中,我遇到了连接不上Xshell的问题.最终在 ...

  6. MySQL学习笔记-锁相关话题

    在事务相关话题中,已经提到事务隔离性依靠锁机制实现的.在本篇中围绕着InnoDB与MyISAM锁机制的不同展开,进而描述锁的实现方式,多种锁的概念,以及死锁产生的原因.   Mysql常用存储引擎的锁 ...

  7. MySQL学习笔记-事务相关话题

    事务机制 事务(Transaction)是数据库区别于文件系统的重要特性之一.事务会把数据库从一种一致状态转换为另一个种一致状态.在数据库提交工作时,可以确保其要么所有修改都已经保存了,要么所有修改都 ...

  8. MySQL学习笔记-数据库文件

    数据库文件 MySQL主要文件类型有如下几种 参数文件:my.cnf--MySQL实例启动的时候在哪里可以找到数据库文件,并且指定某些初始化参数,这些参数定义了某种内存结构的大小等设置,还介绍了参数类 ...

  9. MySQL学习笔记-数据库内存

    数据库内存 InnoDB存储引擎内存由以下几个部分组成:缓冲池(buffer pool).重做日志缓冲池(redo log buffer)以及额外的内存池(additional memory pool ...

  10. MySQL学习笔记-数据库后台线程

    数据库后台线程 默认情况下讲述的InnoDB存储引擎,以后不再重复声明.后台线程有7个--4个IO thread,1个master thread,1个锁监控线程,1个错误监控线程.IO thread的 ...

随机推荐

  1. NSInteger到底是什么数据类型

    看iOS SDK 方法返回的类型都是NSInteger,但是官方给出的示例代码一般for循环的计数器就都是int了. - (NSInteger)tableView:(UITableView *)tab ...

  2. hdu 2769 uva 12169 Disgruntled Judge 拓展欧几里德

    //数据是有多水 连 10^10的枚举都能过 关于拓展欧几里德:大概就是x1=y2,y1=x2-[a/b]y2,按这个规律递归到gcd(a,0)的形式,此时公因数为a,方程也变为a*x+0*y=gcd ...

  3. wxAui Frame Management用法

    wxAui Frame Management用法:1. 总体步骤# 安装wxpython2.8.*.*后import wx.aui# 初始化一个wxAui管理框架对象mgr = wx.aui.AuiM ...

  4. vpn pptp配置

    安装 yum install pptpd 配置pptpd 改动/etc/pptpd.conf设置 localip 192.168.20.1 remoteip 192.168.20.234-238,19 ...

  5. 系统学习Linux的11点建议

    一.从基础开始 常常有些朋友在 Linux 论坛问一些问题,不过,其中大多数的问题都是很基础的.例如为什么我使用一个命令的时候,系统告诉我找不到该目录,我要如何限制使用者的权限等问题,这些问题其实都不 ...

  6. 利用js_API 运行对html文档元素的属性的CRUD操作

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. 修改SharePoint平台登录者显示名称

    protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { //提升权限,拿系统服务帐号来执行此段代码 ...

  8. Oracle 性能优化 — 统计数据收集[Z]

    ORACLE优化器的优化方式有两大类,即基于规则的优化方式(Rule-Based Optimization,简称为RBO)和基于代价的优化方式(Cost-Based Optimization,简称为C ...

  9. Java Tomcat Glassfish Weblogic远程debug(remote debug)

    tomcat ./catalina.sh jpda start 这条命令启动tomcat,它就会监听8000端口,等待调试器的连接. 默认监听8000端口,通过设置环境变量JPDA_ADDRESS指定 ...

  10. Programming C#.Inheritance and Polymorphism

    继承 C#中,创建派生类要在派生类的名字后面加上冒号,后面再跟上基类的名字: public class ListBox : Control 提示:C++程序员注意了,C#没有私有或者保护继承 多态 继 ...