mysql事务

数据库理论基础

倾然丶 夕夏残阳落幕 提交于 2019-12-05 11:27:01
一、什么是数据库 数据:描述事物的符号记录,可以是数字、文字、图形、图像、声音、语言等,数据有多种形式,它们都可以经过数字化后存入计算机。 数据库:存储数据的仓库,是长期存放在计算机内、有组织、可共享的大量数据的集合。数据库中的数据按照一定数据模型组织、描述和存储,具有较小的冗余度,较高的独立性和易扩展性,并为各种用户共享。 数据库特点如下: 数据结构化 数据的共享性高,冗余度低,易扩充 数据独立性高 数据由 DBMS 统一管理和控制(安全性、完整性、并发控制、故障恢复) DBMS:数据库管理系统(能够操作和管理数据库的大型软件,例如MySQL。) 二、数据库与文件系统区别 数据库系统:数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件, 用于建立、使用和维护数据库,简称 DBMS。它对数据库进行统一的管理和控制,以保证数据库的安全 性和完整性。 文件系统:文件系统是操作系统用于明确存储设备(常见的是磁盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。 2.1、对比与区别 2.1.1、管理对象不同 文件系统的管理对象是文件,并非直接对数据进行管理,不同的数据结构需要使用不同的文件类型进行保存,例如可执行文件为.exe,word文件为.doc。

JDBC_笔记

假如想象 提交于 2019-12-05 11:07:16
一、JDBC   步骤    1. 导入驱动jar包 2.注册驱动//DriverManager.registerDriver(new Driver() Class.forName("com.mysql.jdbc.Driver"); 3.获取数据库连接对象 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3", "root", "root");     参数:      * url:指定连接的路径      * 语法:jdbc:mysql://ip地址(域名):端口号/数据库名称      * 例子:jdbc:mysql://localhost:3306/db3      * 细节:如果连接的是本机mysql服务器,并且mysql服务默认端口是3306,则url可以简写为:jdbc:mysql:///数据库名称      * user:用户名      * password:密码 4.定义sql语句 String sql = "update account set balance = 500 where id = 1";        boolean execute(String sql) :可以执行任意的sql 了解       int executeUpdate

MySql笔记

你离开我真会死。 提交于 2019-12-05 11:06:28
1:创建时;【column】不能使用关键字 2:多对一,一对多:【name】与【classs】与【column】看准 进入命令行,windows cmd,连接: mysql -u 用户名 -p密码 -h 服务器IP地址 -P 服务器端MySQL端口号 -D 数据库名 SQL的分类: 数据查询语言DQL(查询) select 数据操纵语言DML(对数据增删改) insert,delete,update 数据定义语言DDL(对表结构增删改) create,drp,alter 事务控制语言TCL(事务提交回滚) commit,rollback 数据控制语言DCL(创建用户授权) grant,revoke show variables like '%char%'; --查看字符集 select version(); -- 查看数据库版本 CREATE DATABASE cs; -- 创建数据库 DROP DATABASE cs; -- 删除数据库 USE cs; -- 使用这个数据库 SELECT DATABASE(); -- 当前使用的数据库 source ***.sql; -- 导入sql文件,运行 SHOW TABLES; -- 查看数据库下的表 DESC 表名; -- 查看表结构 ALTER TABLE form1 DROP COLUMN 列名; -- 删除指定字段 ALTER

D011MySQL学习笔记-事务

五迷三道 提交于 2019-12-05 11:03:45
一、基本介绍 1、概念 如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败; 2、操作 ①开启事务:start transaction; ②回滚:rollback; ③提交:commit; 案例: 3、MySql数据库中事务默认自动提交 事务自动提交: 一条DML(增删改)语句会自动提交一次事务; 事务手动提交: 手动开启事务(start transaction),需要手动提交(commit); 修改事务的默认提交方式: -- 查看默认的提交方式 select @@autocommit; -- 1代表自动提交 0代表手动提交 -- 修改默认的提交方式 set @@autocommit = 0; 二、事务的四大特征(常见面试题) 1、原子性: 是不可分割的最小操作单位,要么同时成功,要么同时失败; 2、持久性: 当事务提交或回滚后,数据库会持久化地保存数据; 3、隔离性: 多个事物之间相互独立;(实际上,多个事物之间会产生影响,需要进行手动隔离(类似Java多线程里面,需要锁机制)) 4、一致性: 事务操作前后,数据总量不变; 三、事务的隔离级别(了解) 1、概念: 多个事务之间是相互独立的,但是多个事务同时操作同一批数据则会引发一些问题,设置不同的隔离级别就可以解决这些问题; 2、存在问题 ①脏读:一个事务读取到另一个事务中没有提交的数据;

一、数据库:mysql 数据库

一世执手 提交于 2019-12-05 10:57:41
一、SQL,不区分大小写 在数据库中进行操作的脚本,称为sql,结构化查询语言,当前关系型数据库都支持使用sql语言进行操作,也就是说可以通过 sql 操作 oracle,sql server,mysql,sqlite 等等所有的关系型的数据库。 sql语句主要分为: 1 DQL:数据查询语言,用于对数据进行查询,如 select 2 DML:数据操作语言,对数据进行增、删、查、改,如 insert 、update 、delete 3 TPL:事物处理语言,对事物进行处理,包括 begin transaction 、commit 、rollback 4 DCL:数据控制语言,进行授权与权限回收,如 grant 、revoke 5 DDL:数据定义语言,进行数据库、表的管理,如 creat 、drop 6 CCL:指针控制语言,通过控制指针完成表的操作,如 declare cursor 对于web程序员来说,重点是数据的增删查改,必须熟练掌握DQL 、DML 、DDL SQL是一门特殊的语言,专门用来操作关系数据库,且不区分大小写 二、mysql 对数据库的相关操作 1、mysql -u root -p 进入mysql操作界面 mysql -h 192.168.126.128 -u root -p 访问该主机地址的mysql 2、查看数据库: show databases; 2

[用事实说明两个凡是]一个由mysql事务隔离级别造成的问题分析

隐身守侯 提交于 2019-12-05 10:54:00
背景 最近要做一个批跑服务, 基本逻辑就是定时扫描数据库的记录, 有满足条件的就进行处理(一条记录代表一个任务,以下任务与记录含义相同). 要求支持多机部署批跑服务. 批跑支持多机部署实现方案 要实现多机部署, 只要保证每个批跑服务实例每次只获取一条记录, 处理完再获取下一条即可. 其中最种要的是避免不同的实例获取到同一条记录,即所谓抢任务. 先看表结构设计: create database if not exists ae; create table ae.task ( id int primary key, status int); -- status为0说明任务可处理,其它不可处理 以上是简化的表结构,但足以说明本文试图说明的问题. 要避免抢任务, oracle的做法, 直接 update ae.task set status=1 where status=0 and rownum = 1 returning id 即可. mysql的要啰嗦一点: select id from ae.task where status=0; -- 得到ID update ae.task where id = ${id} and status=0; 这两个sql,第一个sql用于获取符合条件的任务, 第二个sql用户将任务锁定. 在并发的场景下,

MySQL InnoDB 事务

元气小坏坏 提交于 2019-12-05 09:48:10
事务的定义 事务 :数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作; 事务是一组不可再分割的操作集合(工作逻辑单元)。 典型事务使用场景 :转账 update user_account set balance = balance - 1000 where userID = 3; update user_account set balance = balance + 1000 where userID = 1; MySQL 开启事务 : /* BEGIN / START TRANSACTION --手工 COMMIT / ROLLBACK --事务提交或回滚 SET SESSION autocommit = ON/OFF --设定会话级别事务是否自动开启 */ MySQL 默认是开启事务的,通过 SHOW VARIABLES like 'autocommit'; 可以查看 MySQL 的事务开启情况。 在 autocommit = ON(自动提交事务)的情况下,可以执行 BEGIN; 或者 START TRANSACTION; 命令,改为手动提交事务,执行完 SQL 语句后,需要通过 COMMIT 命令提交事务,或者通过 ROLLBACK 命令回滚事务。 在 autocommit = OFF(手动提交事务)的情况下,执行完 SQL 语句后,需要通过 COMMIT

数据库必知必会:锁和事务

旧城冷巷雨未停 提交于 2019-12-05 09:33:22
写在前面 这篇文章是在网络上看到其他作者的优秀博文,自己消化理解之后所做的记录。文章基于 MySQL 中的 InnoDB 存储引擎。 原博文地址: 点我 锁 锁知识概览 我们先看一张锁的概览图,方便后续的讲述: 我们的程序在一般情况下还是可以跑得好好的。因为这些锁数据库 隐式 帮我们加了;只在某些特定的场景下,才需要程序员手动加锁。 在执行「查询语句」 SELECT 前,会自动给涉及的所有表加「表级锁」中的 读锁 ;在执行「更新操作」 UPDATE、DELETE、INSERT 前,会自动给涉及的表加「表级锁」中的 写锁 对于 InnoDB ,且 使用了索引 的「更新操作」 UPDATE、DELETE、INSERT 语句;这时 InnoDB 会将「表锁」转换成「行锁」,也就是会自动给涉及数据集加「行级锁」中的 排他锁(X) 注意 :InnoDB 只有通过「索引」检索数据才使用「行级锁」,否则,InnoDB将使用表锁;也就是说,InnoDB 的 行锁基于索引 。 一种特殊情况 如果我们对表中的某列加的是「普通索引」,那也就意味着: 索引列属性可能重复 。 对于普通索引,当 重复率高 时,MySQL 不会把这个普通索引当做索引,即会造成一个没有索引的SQL,从而 形成表锁 。 锁的分类 从上图中,以锁的粒度出发,我们可以看到锁分为「表级锁」和「行级锁」 『表锁』:开销小,加锁快

redis事务

断了今生、忘了曾经 提交于 2019-12-05 08:59:28
1.redis的事务是基于队列实现的 mysql的事务是基于事务日志和锁机制实现的 redis是乐观锁机制 redis与mysql事务的区别:   mysql事务是一开始就在内存里面执行了,只是还没有提交。   而redis是把任务放在队列里,还没有执行。只有exec的时候,才是真正的执行了。 开启事务 multi #进入事务 command1 #要执行的命令 command2 #要执行的命令 command3 #要执行的命令 command4 #要执行的命令 exec #执行 discard #取消执行 4条语句作为一个组,并没有真正执行,而是被放入同一队列中。 如果,这时执行discard,会直接丢弃队列中所有的命令,而不是做回滚。 当执行exec时,队列中所有操作,要么全成功要么全失败 redis事务还有监听命令 watch key 乐观锁悲观锁 乐观锁:顾名思义很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量 悲观锁:顾名思义很悲观,每次去拿数据的时候都认为别人修改,所以每次在拿数据的时候都会上锁,这样如果中间有人想拿数据就会一直阻塞除非锁被释放获取到锁。传统的关系型数据库里,用到了很多种这种锁机制,比如行锁,表锁,写锁等 2

mysql事务与PDO事务处理-转载

风流意气都作罢 提交于 2019-12-05 08:49:56
1、MySQL事务   MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!     1)在MySQL中只有使用了Innodb数据库引擎的数据库或表才支持事务     2)事务处理可以用来维护数据库的完整性,保证成批的SQL语句要么全部执行,要么全部不执行     3)事务用来管理insert,update,delete语句一般来说,事务是必须满足4个条件(ACID): Atomicity(原子性)、Consistency(稳定性)、Isolation(隔离性)、Durability(可靠性)       1、事务的原子性:一组事务,要么成功;要么撤回。       2、稳定性 : 有非法数据(外键约束之类),事务撤回。       3、隔离性:事务独立运行。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。       4、可靠性:软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit选项 决定什么时候吧事务保存到日志里。 ———————————————— 在Mysql控制台使用事务来操作