MySQL基础day03 存储引擎和外键MySQL 5.6

  • 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

时间: 2024-10-01 02:26:22

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

mysql基础之存储引擎

mysql 可以将数据以不同的技术存储在文件(内存)中,这种技术就称为存储引擎. 每一种存储引擎使用不同的存储机制.索引技巧.锁定水平,提供最广泛且不同的功能. mysql 支持的存储引擎: MyISAM .InoDB.Memory.CSV.Archive 相关知识之并发处理 并发控制 当多个连接对记录进行修改时保证数据的一致性和完整性. 注:对并发控制的理解:如果 两个用户同时访问数据库同一条记录,一个删除,一个读取,这个时候就会报错.这个时候就会用到并发控制. 在处理 并发读 或者 并发写时

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

MySQL中的存储引擎: 1.存储引擎的概念 2.查看MySQL所支持的存储引擎 3.MySQL中几种常用存储引擎的特点 4.存储引擎之间的相互转化 一.存储引擎: 1.存储引擎其实就是如何实现存储数据,如何为存储的数据建立索引以及如何更新,查询数据等技术实现的方法. 2.MySQL中的数据用各种不同的技术存储在文件(或内存)中,这些技术中的每一种技术都使用不同的存储机制,索引技巧,锁定水平并且最终提供广泛的不同功能和能力.在MySQL中将这些不同的技术及配套的相关功能称为存储引擎. 二.MyS

mysql中的存储引擎

MySQL中常用的几种存储引擎:innoDB.bdb.myisam.memory以及这几个引擎的讲解: InnoDB存储引擎: (1) innodb存储引擎该mysql表提供了事务,回滚以及系统崩溃修复能力和多版本迸发控制的事务的安全. (2)innodb支持自增长列(auto_increment),自增长列的值不能为空,如果在使用的时候为空的话怎会进行自动存现有的值开始增值,如果有但是比现在的还大,则就保存这个值. (3)innodb存储引擎支持外键(foreign key) ,外键所在的表称

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

一般情况下,mysql会默认提供多种存储引擎,你可以通过下面的查看: 看你的mysql现在已提供什么存储引擎:mysql> show engines; 看你的mysql当前默认的存储引擎:mysql> show variables like '%storage_engine%'; 你要看某个表用了什么引擎(在显示结果里参数engine后面的就表示该表当前用的存储引擎):mysql> show create table 表名; 如何查看Mysql服务器上的版本额 系统函数啊select v

细聊MySQL的Innodb存储引擎(一)

从MySQL5.5开始,Innodb就成为MySQL的默认存储引擎了.可想而知,Innodb已经成为MySQL的主要生产方式.那Innodb到底有什么本事能够击败其它几位存储引擎而荣登宝座呢?下面,我就来和大家一起探讨探讨牛逼的Innodb引擎.Innodb涉及到的知识点比较多,所以我会分几篇来叙述,此篇主要介绍Innodb的基本概念和架构. 要了解Innodb,首先需要了解MySQL的ACID模型.何为ACID?ACID指的是事务的原子性(A).一致性(C).隔离性(I).持久性(D). 原子

mysql常识以及存储引擎,锁和事务

常见的数据库系统: 1.甲骨文的Oracle 2.IBM的DB2 3.微软的Access和 SQL Server 4.开源PostgreSQL 5.开源MySQL mysql数据库三阶段: 初期开源数据库阶段 sun mysql阶段 oracle mysql阶段 OLTP:联机事务处理,面向基本的.日常的事务处理. OLAP:联机分析处理,数据仓库的主要应用. mysql分支版本(一些): MariaDB : Maria引擎室myisam存储引擎的升级版本,增加了对Hash join的支持和Se

mysql三:存储引擎

一 什么是存储引擎 mysql中建立的库===>文件夹 库中建立的表===>文件 现实生活中我们用来存储数据的文件应该有不同的类型:比如存文本用txt类型,存表格用excel,存图片用png等 数据库中的表也应该有不同的类型,表的类型不同,会对应mysql不同的存取机制,表类型又称为存储引擎. 存储引擎说白了就是如何存储数据.如何为存储的数据建立索引和如何更新.查询数据等技术的实现方法.因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型) 在O

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

文/何登成 导读:   来自网易研究院的MySQL内核技术研究人何登成,把MySQL数据库InnoDB存储引擎的多版本控制(简称:MVCC)实现原理,做了深入的研究与详细的文字图表分析,方便大家理解InnoDB存储引擎实现的多版本控制技术(简称:MVCC). 基本知识 假设对于多版本控制(MVCC)的基础知识,有所了解.MySQL数据库InnoDB存储引擎为了实现多版本的一致性读,采用的是基于回滚段的协议. 行结构 MySQL数据库InnoDB存储引擎表数据的组织方式为主键聚簇索引.由于采用索引

mysql几种存储引擎介绍

在数据库中存的就是一张张有着千丝万缕关系的表,所以表设计的好坏,将直接影响着整个数据库.而在设计表的时候,我们都会关注一个问题,使用什么存储引擎.等一下,存储引擎?什么是存储引擎? 什么是存储引擎? 关系数据库表是用于存储和组织信息的数据结构,可以将表理解为由行和列组成的表格,类似于Excel的电子表格的形式.有的表简单,有的表复杂,有的表根本不用来存储任何长期的数据,有的表读取时非常快,但是插入数据时去很差:而我们在实际开发过程中,就可能需要各种各样的表,不同的表,就意味着存储不同类型的数据,