mysql支持存储过程吗簇表吗

MySql数据库(16)
3.1-数据库事务
什么是事务
一系列有序的数据库操作:
要么全部成功
要么全部回退到操作前的状态
中间状态对其他连接不可见
事务的基本操作:
start transaction
提交(全部完成)
回滚(回到初始状态)
start transaction;
insert into t values (1, 1, 1);
insert into t values (2, 1, 1);
insert into t values (3, 1, 1);
insert into t values (4, 1, 1);
insert into t values (1, 1, 1);
savepoint a1;
insert into t values (2, 1, 1);
rollback to a1;
autocommit可以在session级别设置
每个DML操作都自动提交
DDL永远都是自动提交,无法通过rollback回滚
事务的四个基本属性(ACID)
原子性(Atomicity)
一致性(Consistency)
隔离性(Isolation)
持久性(Durability)
事务的原子性
包含在事务中的操作要么全部被执行,要么都不执行
中途数据库或应用发生异常,未提交的事务都应该被回滚
事务的一致性
数据的正确性,合理性,完整性
数据一致性应该符合应用需要规则:
余额不能是负数
交易对象必须先有账号
用户账号不能重复
事务的结果需要满足数据的一致性约束
事物的持久性
提交完成的事务对数据库的影响必须是永久性的
数据库异常不会丢失事务更新
通常认为成功写入磁盘的数据即为持久化成功
事务的持久化的实现
数据文件持久化
随机同步刷新(慢)
事务日志持久化与实例恢复
顺序同步刷新(快) -& 事务日志
随机异步刷新 -& 磁盘
事务日志 -& 磁盘(实例恢复)
事务的隔离性
数据库事务在提交完成前,中间的任何数据变化对其他的事务都是不可见的。
数据库隔离现象
脏读(Dirty Read)
事务B读到事务A尚未提交的数据变更
不可重复读(NonRepeatable Read)
事务B读取前后两次读取一条记录之间该记录被事务A修改并提交,于是事务B读到了不一样的结果
幻读(Phantom Read)
事务B按条件匹配到了若干行记录并修改。但是由于修改过程中事务A新插入了符合条件记录,导致B更新完成后发现仍有符合条件却未被更新的记录。
数据库隔离等级
不可重复读
可串行化读
MySQL的事务隔离级别
InnoDB默认标记为可重复读
InnoDB并不是标准定义上的课重复读
InnoDB默认在可重复读的基础上避免幻读
MySQL事务隔离级别设置
可在global/session/下个事务,级别分别进行设置
建议使用Read committed(同Oracle)
或者建议使用默认的Repeatable read
set tx_isolation = ''
-- 设置隔离级别
事务与并发写
某个正在更新的记录再提交或回滚前不能被其他事务同时更新
事务回滚的实现
回滚段(rollback segment)与数据前像
3.2-存储引擎概述
MySQL程序层次架构
MySQL存储引擎
有多种可选方案,可插拔,可修改存储引擎
基于表选择使用何种存储引擎
主要存储引擎
主要,推荐
古老,偶尔有用,系统表
偶尔临时表有用,纯内存
不用来存放数据,个别特殊用处
新颖,个别特殊场景有奇效
新颖,分布式,内存,线上不要用
InnoDB存储引擎
索引组织表
支持行级锁
数据块缓存
日志持久化
稳定可靠,性能好,线上尽量使用InnoDB
MyISAM存储引擎
不支持事务
只维护索引缓存池,表数据缓存交给操作系统
锁粒度较大
数据文件可以直接拷贝,偶尔可能会用上
不建议线上业务数据使用
MWMORY存储引擎
数据全内存存放,无法持久化
不支持事务
适合偶尔作为临时表使用
create temporary table tmp (id int) engine =
BLACKHOLE存储引擎
数据不作任何存储
利用MySQL Replicate,充当日志服务器
在MySQL Replicate环境中充当代理主
分形树存储结构
压缩效率较高
适合大批量insert的场景
MySQL Cluster
多主分布式集群
数据节点间冗余,高可用
设计上易于扩展
面向未来,线上慎用
改变表的存储引擎
alter table m ENGINE=
3.3-InnoDB存储引擎
InnoDB存储引擎体系架构
InnoDB相关的磁盘文件
系统表空间
一个实例一个
innodb_data_home_dir
ib_logfile0/1
一个实例两个(可配置)
innodb_log_group_home_dir
表定义文件
每张表一个
Schema目录下
表数据文件
如果innodb_file_per_table = 1, 则每张表一个
Schema目录下
InnoDB系统表空间文件
ibdata1里存放了什么:
所有InnoDB表元数据信息
Double Write, Insert buffer dump等等….
自动扩展机制
InnoDB与磁盘文件有关的参数
innodb_data_home_dir
/data/mysql/node_1
数据主目录
innodb_log_group_home_dir
/data/mysql/node_1
innodb_data_file_path
ibdata1:512M:autoextned
请开启autoextned
innodb_autoextend_increment
MB,勿太大或太小
innodb_file_per_table
强烈建议开启
innodb_log_file_size
innodb_log_files_in_group
InnoDB数据文件存储结构
索引组织表(聚簇表)
根据表逻辑主键排序
数据节点每页16K
根据主键寻址速度很快
主键值递增的insert插入效率较好
主键值随机insert插入效率差
因此,InnoDB表必须指定主键,建议使用自增数字
InnoDB数据块缓存池
数据的读写需要经过缓存
数据以整页(16K)为单位读取到缓存中
缓存中的数据以LRU策略换出
IO效率高,性能好
InnoDB Buffer Pool相关参数
innodb_buffer_pool_size
根据总物理内存设置
InnoDB数据持久化与事务日志
事务日志实时持久化
内存变化数据(脏数据)增量异步刷出到磁盘
实例故障靠重放日志恢复
性能好,可靠,恢复快
InnoDB日志持久化相关参数
innodb_flush_log_at_trx_commit
可选:0:每隔1s写入并持久化一次日志。1:每次commit都写入并持久化日志。2:每次提交日志写到内存,每1s持久化一次
InnoDB行级锁
写不阻塞读
不同行间的写互相不阻塞
并发性能好
InnoDB与事务ACID
事务ACID特性完整支持
回滚段失败回滚
支持主外键约束
事务版本+回滚段=MVCC
事务日志持久化
默认可重复读隔离级别,可以调整
3.4-InnoDB事务锁
什么是计算机程序锁
计算机程序锁
控制对共享资源进行并发访问
保护数据的完整性和一致性
数据库中的锁
分为两个大类
latch/mutex
数据库逻辑内容
事务过程中
* 我们主要关心的是事务锁
数据库事务并发
对同一行记录的修改必须串行化
事务锁粒度
InnoDB, Oracle
SQL Server
MyISAM, Memory
InnoDB存储引擎中的锁模式与粒度
四种基本锁模式
共享锁(S) - 读锁 - 行锁
排他锁(X) - 写锁 - 行锁
意向共享锁(IS) - 表级
意向排他锁(IX) - 表级
意向锁总是自动先加,并且意向锁自动加自动释放
意向锁提示数据库这个session将要在接下来施加何种锁
意向锁和X/S锁级别不同,除了阻塞全表级别的X/S锁外其他任何锁
InnoDB锁模式互斥
数据库加锁操作
一般的select语句不加任何锁,也不会被任何事物锁阻塞
读的隔离性由MVCC确保
手动:select * from tb_tes
自动:insert前
手动:select * from tb_
自动:update,delete前
InnoDB行锁的实现
通过索引项加锁实现
只有条件走索引才能实现行级锁
索引上有重复值,可能锁住多个记录
查询有多个索引可以走,可以对不同索引加锁
是否对索引加锁实际上取决于MySQL执行计划
自增主键做条件更新,性能最好
没有索引的话会对整张表加锁。
InnoDB的gap lock
什么是幻读
gap lock消灭幻读
InnoDB消灭幻读仅仅为了确保statement模式replicate的主从一致性
小心gap lock
自增主键做条件更新,性能最好
什么是死锁
A、B两个事务,A先更新t1,同时B更新t2,A再更新t2,B再更新t1就发生了死锁。
死锁数据库自动解决
数据库挑选冲突事务中回滚代价较小的事务回滚
单表死锁可以根据批量更新里的更新条件排序
可能冲突的跨表事务尽量避免并发
尽量缩短事务长度
业务逻辑加锁
业务流程中的悲观锁
任何的并发修改都有可能造成我们的业务逻辑最终的错误,在事务流程中一开始就加锁,最后释放
如何缩短锁的时间
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1103296次
积分:16349
积分:16349
排名:第713名
原创:313篇
转载:785篇
译文:123篇
评论:277条
文章:39篇
阅读:77308
(92)(263)(123)(70)(75)(57)(45)(73)(25)(65)(9)(25)(28)(34)(31)(70)(58)(38)(10)(2)(2)(2)(1)(13)(3)(4)(1)(2)
如果你觉得我的文章对您有用,请随意打赏。
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'相关文章推荐
1簇是由一组共享相同数据块的多个表组成,它将这些表的相关行一起存储在相同数据块中,这样可以减少查询数据所需的磁盘读取量。
2对于单独使用的表也不应该使用簇。
3简单来说就是2个表...
MySQL学习笔记17:别名
在查询时,可以为表和字段取一个别名。这个别名可以代替其指定的表和字段
为表取别名
mysql> SELECT * FROM departm...
许多程序员认为查询优化是DBMS(数据库教程管理系统)的任务,与程序员所编写的SQL语句关系不大,这是错误的。一个好的查询计划往往可以使程序性能提高数十倍。查询计划是用户所提交的SQL语句的集合,查询...
数据库名:search
表名:auto
他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)更多频道内容在这里查看
爱奇艺用户将能永久保存播放记录
过滤短视频
暂无长视频(电视剧、纪录片、动漫、综艺、电影)播放记录,
按住视频可进行拖动
&正在加载...
收藏成功,可进入
查看所有收藏列表
当前浏览器仅支持手动复制代码
视频地址:
flash地址:
html代码:
通用代码:
通用代码可同时支持电脑和移动设备的分享播放
用爱奇艺APP或微信扫一扫,在手机上继续观看
当前播放时间:
一键下载至手机
限爱奇艺安卓6.0以上版本
使用微信扫一扫,扫描左侧二维码,下载爱奇艺移动APP
其他安装方式:手机浏览器输入短链接http://71.am/udn
下载安装包到本机:
设备搜寻中...
请确保您要连接的设备(仅限安卓)登录了同一爱奇艺账号 且安装并开启不低于V6.0以上版本的爱奇艺客户端
连接失败!
请确保您要连接的设备(仅限安卓)登录了同一爱奇艺账号 且安装并开启不低于V6.0以上版本的爱奇艺客户端
部安卓(Android)设备,请点击进行选择
请您在手机端下载爱奇艺移动APP(仅支持安卓客户端)
使用微信扫一扫,下载爱奇艺移动APP
其他安装方式:手机浏览器输入短链接http://71.am/udn
下载安装包到本机:
爱奇艺云推送
请您在手机端登录爱奇艺移动APP(仅支持安卓客户端)
使用微信扫一扫,下载爱奇艺移动APP
180秒后更新
打开爱奇艺移动APP,点击“我的-扫一扫”,扫描左侧二维码进行登录
没有安装爱奇艺视频最新客户端?
oracle网络公开课《Oracle 簇表与分区表的使用》
正在检测客户端...
您尚未安装客户端,正在为您下载...安装完成后点击按钮即可下载
, 可在设置中重新打开噢!
30秒后自动关闭
oracle网络公开课《Oracle 簇表与分区表的使用》">oracle网络公开课《Oracle 簇表与分区表的使用》
请选择打赏金额:
播放量12.7万
播放量数据:快去看看谁在和你一起看视频吧~
更多数据:
Copyright (C) 2017
All Rights Reserved
您使用浏览器不支持直接复制的功能,建议您使用Ctrl+C或右键全选进行地址复制
正在为您下载爱奇艺客户端安装后即可快速下载海量视频
正在为您下载爱奇艺客户端安装后即可免费观看1080P视频
&li data-elem="tabtitle" data-seq="{{seq}}"& &a href="javascript:void(0);"& &span>{{start}}-{{end}}&/span& &/a& &/li&
&li data-downloadSelect-elem="item" data-downloadSelect-selected="false" data-downloadSelect-tvid="{{tvid}}"& &a href="javascript:void(0);"&{{pd}}&/a&
选择您要下载的《
色情低俗内容
血腥暴力内容
广告或欺诈内容
侵犯了我的权力
还可以输入
您使用浏览器不支持直接复制的功能,建议您使用Ctrl+C或右键全选进行地址复制请教一个问题,Transparent table和Cluster table_百度知道
请教一个问题,Transparent table和Cluster table
RT!Transparent table和Cluster table什么区别?各做何用?在HR里有些东西存在透明表里比如员工主数据,有些存在簇表里,比如考勤、工资结果等等,员工主数据用SE16查询比较方便,但是簇表里的东西怎么查呢?SE16好像查不出来啊,SE16里只能查一个PCLn里的索引...
我有更好的答案
还是有点不明白,上面大牛们,谈很多关于cluster table缺点,但是还是没有说清楚cluster table具体有什么用处?
SAP的簇表和ORACLE数据库里的簇表应该不是一个概念。比如,SAP中的BSEG表就是由好几张相关的表组成的,我们访问簇表的时候系统会根据簇表的组成逻辑去分解查询,当中有个转换过程,因此,一般簇表的访问比透明表要慢点。而ORACLE数据库中的簇表是一种索引效率非常高的表,和SAP的不是一回事。
同样困惑。好像簇表不是SAP提出的概念,在Oracle数据库里就支持簇表。簇表不支持关联查询(JOIN)和查询计算(SUM/AVERAGE等),因此无法用于query。簇表是由几个透明表关联起来的,但是这个关联关系如何建立确从SE11里看不出来。
更新一下,SE16可以查询簇表内容。但簇表内容是压缩存储的,所以无法直接解读。针对楼上的问题。簇表主要用来解决稀疏数据存储的问题,同时可以大量减少物理数据库的字段数。
可以简单的理解成数据主表(A)和事务主表(T),数据主表用来存储不太变化的数据,事务主表存储经常变化的数据。
其他2条回答
为您推荐:
其他类似问题
transparent的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。}

我要回帖

更多关于 mysql支持中文吗 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信