MySQL系列(三) MySQL的约束

  • 约束

    数据完整性 constraint

    • 实体完整性保证表中有一个主键,还可以编写触发器保证数据完整性
    • 域完整性保证数据每列的值满足特定条件,可以通过一下途径来保证: 选择适合的数据类型,外键,编写触发器,还可以用default 约束作为强制域完整性的一个方面
    • 参照完整性保证两张表之间的关系

    约束的创建和查找:

    • 创建有两种方式:

      • 表建立时就定义约束条件
      • 利用 alter table 来进行约束的更新
    • 唯一索引的默认约束名与列名相同。

    约束和索引的区别:

    • 约束是一个逻辑上的概念,用来保证数据的完整性
    • 索引是一个数据结构,既有逻辑上的概念,在数据库中还代表物理存储的方式

    对错误数据的约束:

    • 数据库没有对数据的正确性进行限制。比如对null 的插入,系统会将其转化为合法的值。

    enum 和 set 约束:

    • 只限于对离散数值的约束。如果要对域进行约束,还需要通过触发器来实现

    触发器与约束:

    • 只有具备super权限的 MySQL 数据库用户才可以执行这条命令
    • 最多可以对一个表建立6个触发器

    外键约束:

    • 外键用来保证参照完整性。一般来说,被引用的表为父表,引用的表成为子表
    • 可定义的子表操作有:
      • cascade, 表示当父表发生delete 和 update 操作时,对相应的子表中的数据也进行操作
      • set null,表示当父表发生delete 和 update,相应的子表数据被更新为null值,且子表的值必须允许null
      • no action,表示当父表发生 delete 和update,抛出错误,不允许此操作
      • restrict, 表示没有定义 on delete 和 on update 时,默认的外键设置
    • 这些操作都是即时检查,有些数据库支持延时检查。
    • 对于参照完整性约束,外键能起到很好的作用。但是对于数据库的导入操作时,外键往往导致在外键约束的检查上花费大量时间,因为是即时检查,所以对每一行都要进行外键检查

    视图 view:

    • 是一个可以当表使用的虚表,没有实际的物理存储。
    • 视图的作用: 主要用来当作一个抽象装置,特别是对有些应用程序,不需要获取基表,只需要按照视图定义来完成数据或更新数据。视图可以在一个程度上起到一个安全层的作用。

    物化视图:

    • oracle 支持物化视图,其是根据几表实际存在的实表,即物化视图的数据存储在非易失性的存储设备上。
    • 物化视图用于预先计算并保存多表的连接 join, 和聚集 group by等耗时较多的操作,这样就可以避免这些耗时的操作,从而快速得到结果。

原文地址:https://www.cnblogs.com/wang-kai-1994/p/10810383.html

时间: 2024-08-26 08:15:36

MySQL系列(三) MySQL的约束的相关文章

mysql系列之三MySQL编译安装

mysql 安装: 专用软件包管理器包 deb,rpm rpm: RHEL(Oracle Linux),CentOS SUSE 通用二进制格式包 gcc:x86,x64 源代码 5.5,5.6 cmake编译 选择GA版本 mysql-client提供客户端 mysql-devel开发组建 mysql-server服务器端 mysql-shared共享库 mysql-shared-compat兼容库 mysql-test 测试组件 最后一次读取的配置优先级最高 /etc/my.cnf /etc/

Linux命令:MySQL系列之三--mysql数据类型及SQL结构化查询语句使用

MySQL 存储引擎,也被称为表类型:    MyISAM表:无事务处理功能,支持表锁 .frm:表结构定义文件 .MYD:表数据文件 .MYI:表索引文件 InnoDB表:支持事务处理功能,支持行锁 .frm:表结构定义文件 .ibd:表空间(包含数据和索引文件) MySQL常用的查询命令: SHOW ENGINES;  #查看数据库支持的引擎及状态. SHOW TABLE STATUS LIKE 'user' \G  #查看表user的属性信息,\G竖排显示 mysqld --help --

Linux命令:MySQL系列之四--MySQL管理表和索引

SQL语句: 数据库 表 索引 视图 DML语句 单字段:    PRIMARY KEY 主键 UNIQUE KEY 唯一键 单或者多字段:    PRIMARY KEY(col,...) UNIQUE KEY(col,...) INDEX(col,...) 数据类型: data_type: BIT[(length)] 比特 | TINYINT[(length)] [UNSIGNED] [ZEROFILL] 非常小的整数(1字节) | SMALLINT[(length)] [UNSIGNED]

[mysql系列03]mysql常用函数

一.数学函数 ABS(x)   返回x的绝对值 BIN(x)   返回x的二进制(OCT返回八进制,HEX返回十六进制) CEILING(x)  返回大于x的最小整数值EXP(x)   返回值e(自然对数的底)的x次方 FLOOR(x)   返回小于x的最大整数值 GREATEST(x1,x2,...,xn)返回集合中最大的值 LEAST(x1,x2,...,xn)      返回集合中最小的值 LN(x)                    返回x的自然对数 LOG(x,y)返回x的以y为底

[mysql系列02]mysql常用语法

本文结合具体的实例讲解mysql基础常用语法 CREATE DATABASE CREATE DATABASE db_name CREATE DATABASE用给定的名字创建一个数据库,创建数据库mysqllearn. create database mysqllearn; CREATE TABLE CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)] [table_options] [select_

Linux命令:MySQL系列之八--MySQL事务相关内容

MySQL,ODBC    数据库事务 多事务同时执行:彼此之间互不影响的方式进行并行:事务之间交互,通过数据集. START TRANSACTION;  启动事务命令   数据库只有启动了事务才允许回滚撤销等操作. 且数据的engine引擎必须是innodb,才支持事务 ROLLBACK 回滚事务,mysql只要没有提交开启了事务都可以进行回滚操作. COMMIT:事务提交,事务提交后无法进行回滚操作. 如果没有明确启动事务:  autocommit能实现自动提交,每一个操作都直接提交: 所以

[mysql系列01]mysql数据类型

1.整型 MySQL数据类型 含义(有符号) tinyint(m) 1个字节  范围(-128~127) smallint(m) 2个字节  范围(-32768~32767) mediumint(m) 3个字节  范围(-8388608~8388607) int(m) 4个字节  范围(-2147483648~2147483647) bigint(m) 8个字节  范围(+-9.22*10的18次方) 取值范围如果加了unsigned,则最大值翻倍,如tinyint unsigned的取值范围为

MySQL系列(四) MySQL的索引和算法

11 表结构 表是关于特定实体的数据集合,这也是关系型数据库的核心. 在InnoDB中,表都是根据主键顺序组织存放的,这种存储方式的表成为索引组织表. 所有数据都被逻辑的存放在一个空间中,称之为表空间 tablespace. 表空间又由段 segment, 区 extent, 页page 组成. 页在一些文档中有时也称之为块 block. 一个区一般为1M,一个页总是16KB,即一个区一共有64个连续的页. InnoDB中数据是按行进行存放的.每个页存放的行是有硬性规定规定的,最多运行存放16

MySQL并发复制系列三:MySQL和MariaDB实现对比

http://blog.itpub.net/28218939/viewspace-1975856/ 并发复制(Parallel Replication) 系列三:MySQL 5.7 和MariaDB 10的parallel replication对比 作者:沃趣科技MySQL数据库工程师  麻鹏飞 经过上两篇关于MySQL/MariaDB 的Binary Log Group Commit的发展历程和enhanced multi-threaded slave的介绍,相信大家对MySQL 基于Bin