• MySQL基础day03_存储引擎和外键-MySQL 5.6

    外键的条件:

    1,表的存储引擎为innodb存储引擎

    2,表中外键字段的类型要与参考表的字段类型一致

    3,外键字段要是索引类型中的一种

    MySQL数据库的存储引擎

    存储引擎:是mysql结构中的组成部分

    mysql体系结构:

    由8部分组成:连接池、Sql接口、分析器、优化器、缓存和缓冲、存储引擎、管理工具、物理存储设备

    1.客户端:mysql

    2.连接器: NativeC API 本地C语言接口、JDBCJAVA的数据库连接器、ODBC开放式数据库互联,非常底层 Oracle,SOLServer都支持

    3.连接池(conetcionpool):它的后方是MYSQL的真正功能

    4.SQL接口:用户通过sql客户端发过来的命令,由sql接口接收(DML数据操作语言:查询,修改,升级数据等DDL数据定义语言:创建一个新的数据库,新的索引,删除一个用户等存储过程视图触发器)

    5.Parser:分析器(查询 事务 对象权限)

    6.optimizer:(访问路径 、 生成执行树)

    7.caches&buffers:缓存和缓存 (优化里最重要的是缓存的优化)

    8.pluggablestroage engines存储引擎(插件式):将逻辑结构转换为物理结构的程序

    9.ManagementServices & Utilites工具:备份,恢复,安全,移植,集群等,这些工具一般和文件系统打交道,不需要和mysql-server打交道,它们对应的都是命令。

    查看当前mysql服务器所支持的存储引擎:show engines;

    01.mysql> show engines;
    02.+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
    03.| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
    04.+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
    05.| PERFORMANCE_SCHEMA | YES     | PerformanceSchema                                             NO           NO   NO         |
    06.| CSV                | YES     | CSV storage engine                                             | NO           NO   NO         |
    07.| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           NO   NO         |
    08.| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           NO   NO         |
    09.| MyISAM             | YES     | MyISAM storage engine                                          | NO           NO   NO         |
    10.| MEMORY             | YES     | Hash based, stored in memory, useful for temporarytables      | NO           NO   NO         |
    11.| ARCHIVE            | YES     | Archive storage engine                                         | NO           NO   NO         |
    12.| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreignkeys     | YES          | YES  | YES        |
    13.| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         NULL NULL       |
    14.+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
    15.rows in set (0.00 sec)
    16.mysql>

    指定存储引擎:

    1,建表时指定存储引擎

    create table 表名(字段列表)engine=存储引擎名;

    注:在指定之前需要用showengine;查看所支持的引擎,Support列为是否支持!

    2,建表之后修改使用的存储引擎,建表时没有指定则为默认的:

    alter table 表名 engine=存储引擎名;

    查看一个表的存储引擎:(即查看表的创建过程)

    show create table 表名;

    存放表结构的文件为/var/lib/mysql/库名/表名.frm

    存放表数据的文件为/var/lib/mysql/库名/表名.ibd

    事务:对表中数据的一次操作,从开始到结束的过程称作事务;

    事务回滚:如果操作没有成功,则恢复到之前的状态;

    InnoDB支持事务回滚;

    锁机制:(解决多个用户对数据库记录并发访问问题)

    所得类型:读锁、写锁

    读锁(共享锁):不会引起数据内容的改变;

    写锁(互斥锁/排它锁),锁定的程度为锁粒度;

    注:写锁的优先级高于读锁;

    锁粒度:表锁、行锁、页锁

    表锁:myisam存储引擎支持表锁

    行锁:innodb存储引擎支持行锁

    页级锁定:查询的数据存放存的存储单位为页(单位默认为M)

    row-level-locking 行级锁定(行锁);

    写锁的优先级高于读锁;

    myisam存储引擎:

    特点:

    支持表锁,不支持行锁;

    不支持事务;

    独享表空间;(每一个表都有相应的三个相关文件存储)

    多用在查询、插入操作较多的表。

    相关文件:表名.frm(表结构文件)、表名.MYI(存放索引)、表名.MYD(存放表记录)

    InoDB存储引擎:

    特点:

    支持表锁、行锁;

    支持事务、支持外键;

    共享表空间;()

    相关文件:

    表名.frm(表结构文件)、表名.ibd(索引和表记录文件)

    ibdata1(支持回滚)

    ib_logfile0、ib_logfile1

    设置mysql服务器默认支持的存储引擎:

    在配置文件/etc/my.cnf

    在mysqld字段添加:

    default-storage-engine=存储引擎

    default-storage-engine=myisam(默认的为innodb)

    查看当前的锁状态:

    即检查Table_lock开头的变量,%作为通配符;

    show status like'table_lock%';

    01.mysql> show status like 'table_lock%';
    02.+-----------------------+-------+
    03.| Variable_name         | Value |
    04.+-----------------------+-------+
    05.| Table_locks_immediate | 70    |
    06.| Table_locks_waited    | 0     |
    07.+-----------------------+-------+
    08.rows in set (0.00 sec)
    09.mysql>

    外键的条件:

    1,表的存储引擎为innodb存储引擎

    2,表中外键字段的类型要与参考表的字段类型一致

    3,外键字段要是索引类型中的一种

    创建外键字段的语法格式

    foreign key(字段名) references 参考表的表名(字段名)

    同步更新、同步删除

    在建表的时候指定同步更新、删除:

    ON UPDATE CASCADE 同步更新

    ON DELETE CASCADE 同步删除

    示例过程:

    create database engine; //创建一个名为engine的数据库

    create table engine.yg( //在engine库中创建yg表

    yg_id int(3) primary key auto_increment,

    name varchar(10) not null

    )engine=innodb; //指定存储引擎为innodb

    create table engine.gz( //在engine库中创建yg表

    gz_id int(3),

    gz float(7,2) not null default 0.00,

    foreign key(gz_id) references engine.yg(yg_id) //指定外键字段为gz_id和yg的ge_id对应

    on update cascade on delete cascade //指定同步更新,同步删除

    )engine=innodb;

    use engine; //切换到engine数据库

    1:要求:

    在yg表中插入名字为jim、tom两个名字的条目;

    再插入一个名字为tom的条目。

    desc yg;

    insert into yg(name)values('jim');

    insert into yg(name)values('tom');

    insert into yg(name)values('tom');

    2:要求:

    在gz表中添加第2和第3个人的工资为10000,和12000;

    desc gz;

    insert into gz values(2,10000);

    insert into gz values(3,12000);

    3:要求:

    在yg表中添加一个员工,名字为lucy;

    在gz表中插入lucy的工资为4000;

    删除yg表中lucy的员工信息;注:删除之后gz表中将没有gz_id=4的工资信息

    使用select * from gz;查看gz中是否还有gz_id为4的条目。

    insert into yg(name)values('lucy');

    insert into gz vlaues(4,4000);

    delete from yg where yg_id=4;

    select * from gz;

    4:要求

    更新yg表中的yg_id为2的员工信息;

    update yg set yd_id=8 where yg_id=2;

    5,要求:

    删除gz表中的外键;

    注:在删除外键的时候,首先使用show create table from gz;来查看一下外键的名字(注:在创建外键的时候使用的字段名为gz_id,gz_id并不是外键名)。

    show create table from gz; //首先查看建表过程查找froeign key字段

    alter table gz drop foreign key gz_ibfk_1; //删除外键

    show create table from gz; //再次查看外键已经被删除

    总结:想要创建一个外键,必须先了解一下MySQL的存储引擎,只有innodb存储引擎才支持创建外键,在MySQL5.6里面,默认的存储引擎为innodb!!!

MySQL基础day03 存储引擎和外键MySQL 5.6的更多相关文章

  1. mysql基础之存储引擎

    原文:mysql基础之存储引擎 数据库对同样的数据,有着不同的存储方式和管理方式,在mysql中,称为存储引擎 常用的表的引擎 Myisam ,批量插入速度快, 不支持事务,锁表 Innodb, 批量 ...

  2. MySQL基础之 存储引擎

    MyISAM存储引擎 缺点:不支持事务,不支持外键.只支持表级锁. 优点:访问速度快,多用于select.insert语句的高负载操作.仅仅支持全文索引. MyISAM缓存在内存的是索引,不是数据.而 ...

  3. 转!!MySQL中的存储引擎讲解(InnoDB,MyISAM,Memory等各存储引擎对比)

    MySQL中的存储引擎: 1.存储引擎的概念 2.查看MySQL所支持的存储引擎 3.MySQL中几种常用存储引擎的特点 4.存储引擎之间的相互转化 一.存储引擎: 1.存储引擎其实就是如何实现存储数 ...

  4. mysql中的存储引擎

    MySQL中常用的几种存储引擎:innoDB.bdb.myisam.memory以及这几个引擎的讲解: InnoDB存储引擎: (1) innodb存储引擎该mysql表提供了事务,回滚以及系统崩溃修 ...

  5. 如何查看MySQL的当前存储引擎?

    如何查看MySQL的当前存储引擎? 一般情况下,mysql会默认提供多种存储引擎,你可以通过下面的查看:   看你的mysql现在已提供什么存储引擎: mysql> show engines; ...

  6. MySql的多存储引擎架构, 默认的引擎InnoDB与 MYISAM的区别(滴滴)

    1.存储引擎是什么? MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力.通过选择不同的技术, ...

  7. MySQL事务以及存储引擎

    MySQL事务以及存储引擎 目录 MySQL事务以及存储引擎 一.事务 1. 事务的概念 2. 事务的ACID特点 (1)原子性 (2)一致性 (3)隔离性 ①事务之间的相互影响 ②MySQL事务支持 ...

  8. mysql缓存、存储引擎

    一.         mysql查询缓存 查询缓存不是mysql的子系统,却是查询优化和执行子系统不可缺少的组成部分.它不仅可以缓存查询结果,还可以缓存查询结果本身.如果某个查询的结果就在缓存里, 系 ...

  9. MySQL数据库InnoDB存储引擎多版本控制(MVCC)实现原理分析

    文/何登成 导读:   来自网易研究院的MySQL内核技术研究人何登成,把MySQL数据库InnoDB存储引擎的多版本控制(简称:MVCC)实现原理,做了深入的研究与详细的文字图表分析,方便大家理解I ...

随机推荐

  1. linux fedora原生的快捷键操作

    显示桌面: ctrl+alt+d 运行终端程序: gnome-terminal : 可以自定义快捷键: ctrl+T 等等.

  2. Linux_LVM、RAID_RHEL7

    目录 目录 LVM逻辑卷管理 把物理分区初始化为物理卷 创建卷组 建立逻辑卷 格式化 挂载 vg拓展操作 lv扩展操作 RAID RAID 类型 RAID0条带化 RAID1镜像 RAID5条带冗余 ...

  3. lgb模板

    一 回归 1 提取训练集和测试集 2 制作标签,并检查标签是否有异常值 2 划分数据 https://www.jb51.net/article/152574.htm 3 建立model,写评价函数 h ...

  4. Jmeter之循环控制器

    在使用Jmeter测试时,部分接口需要循环执行多次,这时候就可以使用循环控制器去控制执行. 循环控制器如下图: 说明 : (1.名称:标识,建议明确此循环控制器的使用的作用是什么(如:登录循环控制) ...

  5. Jedis源码浅析

    1.概述 Jedis是redis官网推荐的redis java client,代码维护在github https://github.com/xetorthio/jedis. 本质上Jedis帮我们封装 ...

  6. if you wanna the rainbow, you have to deal with the rain.

    bulk. n. 大量 reluctant. adj. 不情愿的 terrorist. n. 恐怖分子 recognition. n. 认出 tout.v. 兜售 conceal.v. 隐藏 dras ...

  7. Arm-linux-gcc-4.3.2安装步骤 (转)

    http://blog.chinaunix.net/uid-26119896-id-3302233.html 安装交叉编译工具链: 1.首先以root用户登入 2.复制arm-linux-gcc-4. ...

  8. Canvas入门04-绘制矩形

    使用的API: ctx.strokeRect(x, y, width, height) 给一个矩形描边 ctx.fillRect(x, y, width, height) 填充一个矩形 ctx.cle ...

  9. 红帽学习笔记[RHCSA] 第九课[文件归档、硬盘、分区以及自动挂载、Swap、链接]

    文件归档 tar是什么 通过tar命令可以将大型文件汇集成一个文件(归档),注意没有压缩功能. 压缩方式 gzip 通过gzip过滤文档,使用最广泛 bzip2 通常比gzip压缩小,但是不如gzip ...

  10. hive数据去重

    Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能 hive的元数据存储:通常是存储在关系数据库如 mysql(推荐) , derby(内嵌 ...