innodb_flush_log_at_trx_commit:(mysql写事物日志的方式) 0 log buffer 会每秒写入到日志文件中,并刷新到磁盘  (提交方式与事物无关,性能最好) 1 事物提交就写入到日志文件中,并刷入到磁盘   (最安全,速度最慢) 2 事物提交就记录到日志文件中,日志文件每1秒刷新到磁盘   ----------------------------------------------------------------- sync_binlog:(mysql写二…
MySQL多表查询.事务.DCL 多表查询 * 查询语法: select 列名列表 from 表名列表 where.... * 准备sql # 创建部门表 CREATE TABLE dept( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20) ); INSERT INTO dept (NAME) VALUES ('开发部'),('市场部'),('财务部'); # 创建员工表 CREATE TABLE emp ( id INT PRIMARY…
上一篇文章我介绍了在关闭binlog的情况下,事务提交的大概流程.之所以关闭binlog,是因为开启binlog后事务提交流程会变成两阶段提交,这里的两阶段提交并不涉及分布式事务,当然mysql把它称之为内部xa事务(Distributed Transactions),与之对应的还有一个外部xa事务.内部xa事务我理解主要是mysql内部为了保证binlog与redo log之间数据的一致性而存在的,这也是由其架构决定的(binlog在mysql层,而redo log 在存储引擎层):而外部xa…
MYSQL 解锁与锁表 - 专注it - 博客园 https://www.cnblogs.com/wanghuaijun/p/5949934.html 2016-10-11 16:50 MYSQL 解锁与锁表 MySQL锁概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制.比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking):BDB存储引擎采用的是页面锁(page-level locking),但也支持…
MySQL 系列(三)事务 一组要么同时执行成功,要么同时执行失败的 SQL 语句.是数据库操作的一个执行单元! 事务开始于: 连接到数据库上,并执行条 DML 语句(INSERT. UPDATE 或 DELETE). 前一个事务结束后,又输入了另外一条 DML 语句. 如果 JDBC 连接是在自动提交模式下,它在默认情况下,那么每个 SQL 语句都是在其完成时提交到数据库. 事务结束于: 执行 COMMIT 或 ROLLBACK 语句 执行条 DDL 语句,例如 CREATE TABLET 语…
mysql:视图.触发器.事务.存储过程.函数 一.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的临时表摘出来,用视图去实现,这样以后再想操作该临时表的数据时就无需重写复杂的sql了,直接去视图中查找即可,但视图有明显地效率问题,并且视图是存放在数据库中的,如果我们程序中使用的sql过分依赖数据库中的视图,即强耦合,那就意味着扩展sql极为不便,因…
我的个人博客 http://www.haxianhe.com/ 数据库系统引入事务的主要目的:事务会把数据库从一种状态转换为另一种一致状态.在数据库提交工作时,可以确保要么所有修改都已经保存了,要么所有修改都不保存. InnoDB存储引擎中的事务完全符合ACID特性.ACID是以下4个词的缩写: 原子性(atomicity) 一致性(consistency) 隔离性(isolation) 持久性(durability) 本篇文章主要关注事务的原子性这一概念,并说明怎样正确使用事务及编写正确的应用…
函数 MySQL中提供了许多内置函数: 内置函数 一.数学函数 ROUND(x,y) 返回参数x的四舍五入的有y位小数的值 RAND() 返回0到1内的随机值,可以通过提供一个参数(种子)使RAND()随机数生成器生成一个指定的值. 二.聚合函数(常用于GROUP BY从句的SELECT查询中) AVG(col)返回指定列的平均值 COUNT(col)返回指定列中非NULL值的个数 MIN(col)返回指定列的最小值 MAX(col)返回指定列的最大值 SUM(col)返回指定列的所有值之和 G…
mysql 视图 触发器 存储过程 函数事务 索引 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用. 子查询 SELECT * FROM ( SELECT id, NAME FROM user WHERE id ) AS A WHERE A. NAME = 'anner'; 1.创建视图 CREATE VIEW v1 AS SELECT id,age FROM user WHERE i…
关于事务 我们在数据库中需要执行一个系列的操作的时候,要保证这个系列执行的连续性和完整性,要么整个系列的执行都成功,要么就全部失败(只要有一个步骤失败,其他均回滚到之前的状态), 保证不会存在一部分成功一部分失败的情况.这就是我们事务的职责.下面举个分苹果的例子: A同学有3个苹果,B同学有2个苹果,如果A同学给一个苹果给B同学,那么A同学只剩下2个苹果,而B同学有了3个.步骤如下 1 update tname set apples=apples-1 where name = "A":…
由于事务操作的数据通常跨多个物理节点,在分布式数据库中,类似方案即称为分布式事务. TDSQL MySQL版 支持普通分布式事务协议和 XA 分布式事务协议.TDSQL MySQL版(内核5.7或以上版本)默认支持分布式事务,且对客户端透明,像使用单机事务一样方便. TDSQL MySQL版 分布式事务采用两阶段提交算法(2PC)保证事务的原子性(Atomicity)和一致性(Consistency),隔离级别配置为 Read committed.Repeatable read 或 Serial…
一.锁的种类 MySQL中锁的种类很多,有常见的表锁和行锁,也有新加入的Metadata Lock等等,表锁是对一整张表加锁,虽然可分为读锁和写锁,但毕竟是锁住整张表,会导致并发能力下降,一般是做ddl处理时使用. 行锁则是锁住数据行,这种加锁方法比较复杂,但是由于只锁住有限的数据,对于其它数据不加限制,所以并发能力强,MySQL一般都是用行锁来处理并发事务 二.锁粒度 为了尽可能提高数据库的并发度,每次锁定的数据范围越小越好,理论上每次只锁定当前操作的数据的方案会得到最大的并发度,但是管理锁是…
Mysql 视图 触发器 存储过程 游标 游标是从数据表中提取出来的数据,以临时表的形式存放在内存中,在游标中有一个数据指针,在初始状态下指向的是首记录,利用fetch语句可以移动该指针,从而对游标中的数据进行各种操作,然后将操作结果写回数据表中.由 SELECT 语句返回的行集包括所有满足该语句 WHERE 子句中条件的行.由语句所返回的这一完整的行集被称为结果集.应用程序,特别是交互式联机应用程序,并不总能将整个结果集作为一个单元来有效地处理.这些应用程序需要一种机制以便每次处理一行或一部分…
问题: mysql用binary log来保证主从同步的可靠性和安全性,在mysql中,主从同步是异步线程和异步任务来保证的. (在这点上,其它存储引擎有另外的选项,比如mongoDB和ElasticSearch的核心存储可以执行同步选项.mongoDB甚至支持同步到所有的从库后返回值,这样能够保证主从同步是没有延迟的.) 回到mysql,binary log是如何生成的?哪些操作会记录,哪些操作不会记录? 比如我有个疑问就是,对于事务操作,mysql是如何记录binary log的呢? 这个需…
1.事务(Transaction): 事务是将一系列数据操作绑成一个整体进行统一管理. 如果一事务执行成功,则咋子该事务中进行的所有数据更改均会提交,称为数据库中的永久成部分. 如果事务执行是遇到错误且必须取消或回滚,则数据将全部恢复到操作前的状态,所有数据的更改均被清除. 定义: 事务是一种机制.一个操作序列,包含了一组数据库操作命令,并且把所欲的命令作为一个整体起向系统提交侧小操作请求,即这一组数据库命令要么都执行,要么都不执行.   Eg: 转账过程就是一个整体 它需要两条UPDATE语句…
一.事务机制 1.事务的概念 事务是指一组互相依赖的操作单元的集合,用来保证对数据库的正确修改,保持数据的完整性,如果一个事务的某个单元操作失败,将取消本次事务的全部操作. 比如将A账户的资金转入B账户,在A中扣除成功,在B中添加失败,导致数据失去平衡,事务将回滚到原始状态,即A中没少,B中没多. 事务必须具备以下特征,简称ACID: 原子性(Atomicity):每个事务是一个不可分割的整体,只有所有的操作单元执行成功,整个事务才成功:否则此次事务就失败,所有执行成功的操作单元必须撤销,数据库…
多表查询: 查询语法: select 列名列表 from 表名列表 where.... 例子: 创建部门表 CREATE TABLE dept( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20) ); INSERT INTO dept (NAME) VALUES ('开发部'),('市场部'),('财务部'); 创建员工表 CREATE TABLE emp ( id INT PRIMARY KEY AUTO_INCREMENT, NAME V…
一.视图 1.什么是视图 视图就是通过查询得到一张虚拟表,然后保存下来,下次直接使用即可 2.为什么要用视图 如果频繁使用一张虚拟表,可以不用重复查询 3.如何使用视图 create view teacher2course as #把下面查询的结果放在视图teacher2course中 select * from teacher inner join course on teacher.tid = course.teacher_id; 注意: 1.视图只有表结构,视图中的数据还是来源于原来的表…
表连接查询 什么是多表查询 # 数据准备 # 多表查询的作用 * 比如:我们想查询孙悟空的名字和他所在的部门的名字,则需要使用多表查询 # 如果一条 SQL 语句查询多张表,因为查询结果在多张不同的表中,每张表取 1 列或多列 # 多表查询的分类 笛卡尔积现象 # 什么是笛卡尔积现象? # 如何消除笛卡尔积现象的影响 * 我们发现不是所有的数据组合都是有用的,只有员工表.dept_id = 部门表.id 的数据才是有用的.所以需要通过条件过滤掉没用的数据 内连接 用左边表的记录去匹配右边表的记录…
今日内容 1. 多表查询 2. 事务 3. DCL 多表查询: * 查询语法: select 列名列表 from 表名列表 where.... * 准备sql # 创建部门表 CREATE TABLE dept( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20) ); INSERT INTO dept (NAME) VALUES ('开发部'),('市场部'),('财务部'); # 创建员工表 CREATE TABLE emp ( id IN…
38.1.python之pymysql模块: 1.说明: pymsql是Python中操作MySQL的模块,其使用方法和py2的MySQLdb几乎相同. 2.模块安装: pip install pymysql 3.在pycharm中添加pymysql模块: File-->settings-->Project:python-->Project Interpreter-->点击"+"-->输入pymysql-->Install Package 4.执行s…
mysql是一种关系型数据库,关系型数据库一个重要的特性就是支持事务,这是区别于no-sql产品的一个核心特性.当然了,no-sql产品支持键值查询,不能支持sql语句,这也是一个区别.今天主要讨论下事务的提交流程,由于mysql插件式存储架构,导致开启binlog后,事务提交实质是二阶段提交,通过两阶段提交,来保证存储引擎和二进制日志的一致.本文仅讨论binlog未打卡状态下的提交流程,后续会讨论打开binlog选项后的提交逻辑.源码调试环境如下: 测试环境: OS:windows DB:my…
前提 在线执行一些大事务或锁表操作(给某个核心级表加一列或者执行修改操作),此时不但主库从库要长时间锁表,主从延迟也会变大.未避免大事务sql对整个集群产生影响,,我们希望一条SQL语句只在Master数据库上执行,而不复制到Slave数据库.这时候,sql_log_bin这个参数正是需要的.我们就可以这样操作: 1.先在备库执行 原slave mysql>set sql_log_bin=0; 原slave mysql>大事务sql 2.切换主备节点 3.在原主库再执行 原master mys…
1. 事务的隔离级别引入: 数据库是多线程并发访问的,所以很容易出现多个线程同时开启事务的情况,这样的就会出现脏读.重复读以及幻读的情况.在数据库操作中,为了有效保证并发读取数据的正确性,需要为事务设置隔离级别.在MySQL中,事务有4种隔离级别,如下: (1)Read Uncommitted Read UnCommitted(读未提交)是事务中最低的级别,该级别下的事务可以读取到另一个事务中未提交的数据,也被称为脏读(Dirty Read),这是相当危险的.由于该级别较低,在实际开发中避免不了…
1. 脏读 所谓的脏读就是指一个事务读取了另一个事务未提取的数据. 试想一下:a账户要给b账户100元购买商品,如果a账户开启一个事务,执行下面的update语句做了如下转账的工作: update account set money=money-100 where name='a'; update account set money=money+100 where name='b'; 如果a账户先不提交事务,通知b账户来查询,由于b的隔离级别比较低,此时就会读取a事务中未提交的数据,发现a确实给…
1. 事务概念引入: 现实生活中,我们往往经常会进行转账操作,转账操作可以分为两部分来完成,转入和转出.只有这两部分都完成了才可以认为是转账成功.在数据库中,这个过程是使用两条语句来完成的,如果其中任意一条语句出现了异常没有执行,则会导致两个账号的金额不同步,造成错误. 为了防止上面可能出现的情况,MySQL引入了事务,所谓事务就是针对数据库的一组操作,它可以由一条或者多条SQL语句组成,同一个事务的操作具备同步的特点,如果其中有一条语句不能执行的话,那么所有的语句都不会执行,也就是说,事务中的…
select * from INFORMATION_SCHEMA.INNODB_TRX\G The INNODB_TRX table contains information about every transaction (excluding read-only transactions) currently executing inside InnoDB, including whether the transaction is waiting for a lock, when the tr…
※存储过程存储过程是保存在数据库上的一段可执行代码.1.定义存储过程的语法是:Create procedure sp_name (参数..)Begin SQL语句End;2.调用它的方法:Call sp_name(参数-); //空参时则括号中不填内容 3.演示1)不带参数定义(delimiter用于定义结束符):DELIMITER $$CREATE PROCEDURE p1()BEGIN INSERT INTO person2 VALUES('P05','李四',0); SELECT * FR…
为什么需要锁? 因为数据库要解决并发控制问题.在同一时刻,可能会有多个客户端对Table1.rown进行操作,比如有的在读取该行数据,其他的尝试去删除它.为了保证数据的一致性,数据库就要对这种并发操作进行控制,因此就有了锁的概念. 锁的分类 从对数据操作的类型(读\写)分 读锁(共享锁):针对同一块数据,多个读操作可以同时进行而不会互相影响. 写锁(排他锁):当当前写操作没有完成前,它会阻断其他写锁和读锁. 从锁定的数据范围分 表锁 行锁 为了尽可能提高数据库的并发度,每次锁定的数据范围越小越好…
一.视图 视图是一个虚拟表并不是(正实存在的) 创建老师表 create table teacher( id int primary key auto_increment, tname varchar() ); 创建课程表 create table course( id int primary key auto_increment, cname varchar(), teacher_id int, foreign key(teacher_id) references teacher(id) on…