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 | Collectionofidentical MyISAM tables |NO|NO|NO|08.| BLACKHOLE | YES | /dev/nullstorage engine (anything you writetoit disappears) |NO|NO|NO|09.| MyISAM | YES | MyISAM storage engine |NO|NO|NO|10.| MEMORY | YES | Hash based, storedinmemory, usefulfortemporarytables |NO|NO|NO|11.| ARCHIVE | YES | Archive storage engine |NO|NO|NO|12.| InnoDB |DEFAULT| Supports transactions, row-levellocking,andforeignkeys | YES | YES | YES |13.| FEDERATED |NO| Federated MySQL storage engine |NULL|NULL|NULL|14.+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+15.9rowsinset(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 statuslike'table_lock%';02.+-----------------------+-------+03.| Variable_name | Value |04.+-----------------------+-------+05.| Table_locks_immediate | 70 |06.| Table_locks_waited | 0 |07.+-----------------------+-------+08.2rowsinset(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的更多相关文章
- mysql基础之存储引擎
原文:mysql基础之存储引擎 数据库对同样的数据,有着不同的存储方式和管理方式,在mysql中,称为存储引擎 常用的表的引擎 Myisam ,批量插入速度快, 不支持事务,锁表 Innodb, 批量 ...
- MySQL基础之 存储引擎
MyISAM存储引擎 缺点:不支持事务,不支持外键.只支持表级锁. 优点:访问速度快,多用于select.insert语句的高负载操作.仅仅支持全文索引. MyISAM缓存在内存的是索引,不是数据.而 ...
- 转!!MySQL中的存储引擎讲解(InnoDB,MyISAM,Memory等各存储引擎对比)
MySQL中的存储引擎: 1.存储引擎的概念 2.查看MySQL所支持的存储引擎 3.MySQL中几种常用存储引擎的特点 4.存储引擎之间的相互转化 一.存储引擎: 1.存储引擎其实就是如何实现存储数 ...
- mysql中的存储引擎
MySQL中常用的几种存储引擎:innoDB.bdb.myisam.memory以及这几个引擎的讲解: InnoDB存储引擎: (1) innodb存储引擎该mysql表提供了事务,回滚以及系统崩溃修 ...
- 如何查看MySQL的当前存储引擎?
如何查看MySQL的当前存储引擎? 一般情况下,mysql会默认提供多种存储引擎,你可以通过下面的查看: 看你的mysql现在已提供什么存储引擎: mysql> show engines; ...
- MySql的多存储引擎架构, 默认的引擎InnoDB与 MYISAM的区别(滴滴)
1.存储引擎是什么? MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力.通过选择不同的技术, ...
- MySQL事务以及存储引擎
MySQL事务以及存储引擎 目录 MySQL事务以及存储引擎 一.事务 1. 事务的概念 2. 事务的ACID特点 (1)原子性 (2)一致性 (3)隔离性 ①事务之间的相互影响 ②MySQL事务支持 ...
- mysql缓存、存储引擎
一. mysql查询缓存 查询缓存不是mysql的子系统,却是查询优化和执行子系统不可缺少的组成部分.它不仅可以缓存查询结果,还可以缓存查询结果本身.如果某个查询的结果就在缓存里, 系 ...
- MySQL数据库InnoDB存储引擎多版本控制(MVCC)实现原理分析
文/何登成 导读: 来自网易研究院的MySQL内核技术研究人何登成,把MySQL数据库InnoDB存储引擎的多版本控制(简称:MVCC)实现原理,做了深入的研究与详细的文字图表分析,方便大家理解I ...
随机推荐
- 使用C#分层查询多个表数据
下面我来给大家叙述一下视野分层加载多张表数据: 首先创建一个StudentExtends类: 在DAL层studentDAL类写如下代码: 在BLL层写如下代码,引用DAL层的LoadStudentI ...
- C 语言中的关键字 - 数据类型、数据修饰符及逻辑结构
C 语言中有 32 个关键字.这是留个编译器用的特殊字符串,用户不可以使用. 特殊关键字 sizeof 和 return 是 C 语言中的两个特殊关键字. sizeof sizeof 用于计算变量所占 ...
- Spring Boot-配置
Spring 官方完整文档:https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle Spring 官方配置文档:htt ...
- js实现上传文件实时显示缩略图
<input name="coverImage" onClick="" onchange="setImagePreview(this);&quo ...
- virtualbox压缩虚拟机硬盘文件vhd
命令如下: VBoxManage modifyhd D:\pc1\pc1.vhd --compact 当提示以下内容时,将整个虚拟机文件夹拷贝盘符根目录下,将[D:\pc1\pc1.vhd]改为相应 ...
- 本地项目代码上传至github
初始化本地目录:git init cd到个人本地项目代码文件目录下,执行git init命令 添加项目文件到本地仓库:git add . git commit -m "提交说明" ...
- 使用Postwoman
postman的脱单产品postwoman 一.安装 1.使用git进行安装: git clone https://github.com/liyasthomas/postwoman cd postwo ...
- 给定一个英文字符串,请编写一个PHP函数找出这个字符串中首先出现三次的那个英文字符(需要区分大小写),并返回
给定一个英文字符串,请编写一个PHP函数找出这个字符串中首先出现三次的那个英文字符(需要区分大小写),并返回 //统计字符串中出现的字符的出现次数 public function strNum(){ ...
- MySQL---数据库切分
3.切分 水平切分 水平切分又称为sharding,它是将同一个表的记录拆分到多个结构相同的表中.当一个表的数据不断的增加的时候,sharding是必然的选择,它可以将数据分布到集群的不同节点上, ...
- spring security OAuth2.0之客户端Client的实现
项目代码:https://github.com/hankuikuide/microservice-spring-security-oauth2 网上多数的项目客户端都是采用纯js写,或用postman ...