oracle 执行每条 sql 语句都要 commit 提交后才会生效,有的工具启用了自动 commit,所有直接执行语句就可以了,但是 Oracle SQL Developer 等工具就没有默认启用,...show autocommit 可以查看自动提交有没有启用。 如果显示 immediate 就是启用了,off 就是关着呢。 set autocommit on 可以启用自动提交功能。...set autocommit on 就是关闭自动提交功能。 ?
相关 《Oracle/Mysql迁移到Postgresql事务回滚行为差异及改造方法》 《Oracle与Postgresql在PLSQL内事务回滚的重大差异》 这个差异点非常容易造成Oracle...1 总结 先放总结 Oracle:在PLSQL内如果语句执行失败,进入异常处理程序后,PL程序正常退出。那么在执行失败语句前面的SQL不会回滚,执行结果都正常提交了。...Postgresql:在PLPGSQL内如果语句执行失败,进入异常处理程序后,PL正常退出。...那么整个PL内的所有SQL自动回滚,因为: PG不支持PL内写SAVEPOINT (Oracle在每个语句前有隐式的savepoint) PL整体包装在一个大事务内。
包涵的传播级别有: REQUIRED, 如果当前线程已经在一个事务中,则加入该事务,否则新建一个事务。 SUPPORT, 如果当前线程已经在一个事务中,则加入该事务,否则不使用事务。...MANDATORY(强制的),如果当前线程已经在一个事务中,则加入该事务,否则抛出异常。...REQUIRES_NEW,无论如何都会创建一个新的事务,如果当前线程已经在一个事务中,则挂起当前事务,创建一个新的 NOT_SUPPORTED,如果当前线程在一个事务中,则挂起事 NEVER,如果当前线程在一个事务中则抛出异常... Update 时是怎么获取...TransactionSystemException("Could not roll back JDBC transaction", ex); } } 同一个连接执行不同的SQL
mysqldump -u用户 -p 数据库名 > xx.sql; 导出数据库文件,保存 mysql -u用户 -p密码 数据库名< xx.sql;导入数据库文件(也可以选择登录进去,在选择数据库后...alter view 视图名称 as sql语句; 修改结果集 drop view 视图名称; 删除视图 4.索引 定义:索引(Index)是帮助MYSQL高效获取数据的数据结构 索引的作用:约束,加速查找...mysql中如何控制事务 通过select @@autocommit;语句查询自动提交是否开启,1表示开启,0表示没有开启 当查询结果为1时,自动提交开启,执行sql语句(insert into,alter...),系统默认提交确认,在物理表生效 当查询结果为0时,自动提交关闭,执行sql语句,系统会等待用户手动提交确认(commit;),否则可以撤回修改,回滚为原状态(rollback;) 开启事务 一般@@...事务的四大特性(ACID) A 原子性:事务是最小的不可分割的工作单元 C 一致性:在一个事务中,事务前后数据的完整性必须保持一致,sql语句要么全部成功,要么失败,回滚到原状态。
当一个事务获取共享锁后,其他事务也可以获取相同的共享锁。 共享锁之间是兼容的,多个事务可以并发地持有共享锁,在进行读取操作时也不会对其他事务造成阻塞。...意向锁也分为两类: 意向共享锁(IS Lock):当事务想要获取一张表中某几行的行级共享锁(S锁)时,MySQL会先自动获取该表的意向共享锁。...给表加意向锁之后,就能很好的解决这个问题: 在事务获取表中行级S锁之前,必须先获取该表的意向共享锁(IS Lock)或者更强级别的锁 在事务获取表中行级X锁之前,必须先获取该表的意向排他锁(IX Lock...间隙锁(Gap Lock) 在介绍间隙锁之前,首先得说一下为什么需要间隙锁?在事务中,我们知道会有幻读这个问题,简单来讲,就是在一个事务中,在不同时间段,对于同一范围内的查询,查询到的数据条数不一样。...间隙锁 我们在Session A中,执行如下SQL,使用“锁定读”的方法查询id在(-∞, 1)范围内的数据: mysql> begin; Query OK, 0 rows affected (0.00
where后面不能跟聚合函数条件,聚合函数条件只能跟在having关键字后 limit 起始记录, 每页查询的记录数 多表查询 内连接查询 隐式内连接 SELECT 列名 FROM 表名1,表名2...PROCEDURE [IF EXISTS] 存储过程名称; 存储过程语法 - 变量 定义变量 DECLARE 变量名 数据类型 [DEFAULT 默认值]; 变量赋值方式一 SET 变量名 = 变量值...InnoDB 存储引擎:支持事务和外键操作,支持并发控制,占用磁盘空间大。(MySQL 5.5版本后默认) 使用场景:对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,读写频繁的操作!...语句在检索时分别会使用以下索引进行数据匹配 (name,address,phone) (name,address) (name) 索引字段出现的顺序可以是任意的,MySQL 优化器会帮我们自动的调整...ibd文件中的 myisam是将索引存储在.myi文件中,将数据存储在.myd文件中,先去myi文件中找到数据的磁盘地址,再去myd文件中根据地址直接获取数据。
在插入时,如果不明确给字段赋值,那么系统会把设置的默认值自动赋值给字段。...约束类型: 默认约束:插入时如果没有指定值,则插入默认值 主键约束:保证数据的唯一性 外键约束:预防破坏表之间连接的行为 非空约束 :字段值不能为空 唯一性约束:字段值不能重复 自增约束:字段在插入时自动...rollback回滚:在一个事务中,如果有一个SQL语句执行失败,那么当前事务便不会提交,相当于当前事务中的SQL并没有执行。...张三在⻔店消费结算的时候,开启了⼀个事务A,包括这样3个操作: 1. 读取卡内⾦额为100; 2. 更新卡内⾦额为0; 3. 插⼊⼀条销售流⽔。...张三的爱⼈在⽹上购物,开启了⼀个事务B,也来读取卡内⾦额。如果B读取卡内⾦额的操作,发⽣在A更新 卡内⾦额之后,并且在插⼊销售流⽔之前,那么B读出的⾦额应该是多少呢?
插入意向锁 insert intention lock, 是在插入新的记录之前通过 INSERT 操作设置的一种间隙锁,该锁以这样一种方式发出插入意图的信号,即如果多个事务要插入的数据在同一间隙内但不是相同的位置...自增锁 AUTO-INC锁是一种特殊的表级锁,如果一个表中有 AUTO_INCREMENT列,则要插入该表的事务在插入之前会先获取该锁,该锁是表级锁,但不是事务级锁,插入语句执行完后就会立刻释放,不会等待事务提交才释放...“简单插入”(预先知道要插入的行数)通过在互斥量(轻型锁)的控制下获得所需数量的自动增量值来避免表级AUTO-INC锁定 仅在分配过程的整个过程中才保留,直到语句完成为止。...混合模式插入”,如果用户为多行“简单插入”中的某些行 (但不是所有行) 的AUTO_INCREMENT列提供显式值,InnoDB分配的自动增量值会多于要插入的行数。...但是,自动分配的所有值都是由最近执行的上一条语句生成的自动增量值连续生成的,因此“多余的”号码就会丢失。
元数据锁( meta data lock,MDL) MDL加锁过程是系统自动控制,无需显式使用,在访问一张表的时候会自动加上。...2.排他锁(X)∶允许获取排他锁的事务更新数据,阻止其他事务获得相同数据集的共享锁和排他锁。...1已经获取数据A的写锁,想要去获取数据B的写锁,然后事务2获取了B的写锁,想要去获取A的写锁,相互等待形成死锁。...第一次请求获取token 第二次请求带着这个token,完成业务操作。 具体步骤: 1 用户访问页面时,浏览器自动发起获取token请求。...6 在redis中token会在过期时间之后,被自动删除。**
,其中有一个字段是自增的,那么在JDBC这边怎么在添加之后直接获取到这个自增的值 * PreparedStatement是Statement的子接口。...* Statement接口中有一些常量值: * (1)Statement.RETURN_GENERATED_KEYS * * 要先添加后获取到自增的key值: * (1)PreparedStatement...获取连接 1. 获取到 Statement1. 开启事务 1. 使用 PrepareStatement 执行 SQL1. 提交或回滚事务 1. 处理结果集 1....关闭资源 # 4.4 案例代码 /* * mysql默认每一个连接是自动提交事务的。...区分层次的目的即为了 “高内聚低耦合” 的思想。 在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。
--可选配置:配置jpa实现方的配置信息 显示SQL :false,true 自动创建数据库表:hibernate.hbm2ddl.auto...mysql * 底层数据库必须支持自动增长(底层数据库支持的自动增长方式,对id自增) GenerationType.SEQUENCE...mysql * * 底层数据库必须支持自动增长(底层数据库支持的自动增长方式,对id自增) * GenerationType.SEQUENCE : 序列...或者from Customer */ @Test public void testFindAll(){ //将第一第二步封装起来, //在@test执行之前执行Before //3.获取事务对象,开启事务...*/ @Test public void testCondition(){ //将第一第二步封装起来, //在@test执行之前执行Before //3.获取事务对象,开启事务 EntityTransaction
-- 配多个 ## 注意 - 使用此种方式时,接口与映射文件需再同一路径下 - IDEA 在使用这种方式时...,若将映射文件写道 java 文件夹内时,IDEA 不会获取静态资源 【pom加如下配置使其能够获取静态资源】 ...-- sql 语句 #{} 为占位符,内填类的属性名,为单一值时可任意 --> select * from user where id = #{value} ...* openSession(boolean):为 true 时,自动提交事务 */ SqlSession sqlSession = factory.openSession();.../* 普通方式执行 sql 此处增删改方法可以混用 原因:方法分为两类,增删改底层调用同一种方法 - update : 增、删、改
目录 MySQL快速入门(三) 多表查询 多表查询练习1 多表查询练习题2 pymysql模块 光标移动 sql注入问题 解决sql注入问题 完整的sql配置 视图 注意 触发器 基本语法 事务 存储过程...因为怕构造出特定的语句入侵数据库,不安全 ''' # 敏感的数据不要做拼接 解决sql注入问题 # 将要获取比对的数据,以元组的形式放在sql后面,交给execute方法 sql = 'select...(.frm文件),没有表数据,数据还是来自之前的表 视图一般只用来查询,里面的数据不要修改,可能会影响了原来的表 视图的使用频率不太高,不方便维护 触发器 在满足对表数据进行增、删、改的情况下,自动触发的功能...使用 触发器可以帮助我们实现监控、日志···· 触发器可以在六种情况下自动触发,增前、增后、删前、删后、改前、改后 基本语法 create trigger 触发器的名字 before/after...开启一个事务可以包含多条sql语句,要么同时成功,要不同时失败(连坐),称之为事务的原子性 事务的作用?
如何获取当前数据库版本? char 和 varchar 的区别是什么? float 和 double 的区别是什么? mysql 的内连接、左连接、右连接有什么区别?...第三范式:在1NF基础上,除了主键以外的其它列都不传递依赖于主键列,或者说: 任何非主属性不依赖于其它非主属性 (在2NF基础上消除传递依赖) 一张自增表里面总共有 7 条数据,删除了最后 2 条数据...因为内存或者数据库文件存储都是自增主键最大ID 如何获取当前数据库版本? 使用 select version() 获取当前 MySQL 数据库版本。 char 和 varchar 的区别是什么?...9 MySQL底层会自动判断,如果全表扫描快,则直接使用全表扫描,不走索引。...然而存储过程是一个编译过的代 码块,所以执行效率要比 T-SQL 语句高。2.一个存储过程在程序在网络中交互时可以替代大 堆的 T-SQL 语句,所以也能降低网络的通信量,提高通信速率。
这是关于peewee orm的机制,"你若不指定(primary key)",它就会"自动"为你创建一个 "名为 id", "类型为 int", 并设置为 "primary" 的 "自增(auto_increment...BaseModel): # 宠物类 owner = ForeignKeyField( Owner, backref='owner_conn', # 通过引用名获取对象...他的宠物也会随之自动删除。..., 都必须注意: 每层事务,只管自己层内的 rollback(),才有效, 不能管其他层的。...就算你用 commit() 夹, 如果自己层内没有 rollback(), 那么你的 commit()是无效的(夹不住) 事务就差不多这些,官档还有一些用法和语法,但最终功能结果都是一样的。
自增(auto_increment) 1.3.3. 非空(not null) 1.3.4. 注释 1.4. 事务 1.4.1. 关闭自动提交 1.4.2. 验证 1.4.3....也可以赋值为null,数据库会自动为这个主键赋值(在原来的基础上自增+1) 非空(not null) create table user(id int primary key,age int not...数据库中sql语句执行的最小单元 不能分割执行事务内的sql语句,只能是同时执行成功,或者同时执行失败,否则可能出现安全性问题 一个事务中的代码块包含多条sql语句,只有一起执行成功才能成功,只要有一条出现错误都会失败...,因为开启事务的话,每操作的一条语句产生的结果都是存储在内存中的,没有及时更新到数据库中,只有提交之后才能更新到数据库中 关闭自动提交 mysql的自动提交属性自动是开启的,就是每执行一次sql语句就会自动提交...,如果需要使用事务功能,那么需要将其关闭,因为一旦提交了,数据就会发生改变,但是事务的功能就是当所有的sql语句都执行完才提交,因此要将其关闭。
当一个事务A获取了行R的共享锁,另外的事务B也可以立即获得行R的共享锁,这种情况称为“锁兼容”。...insert、update、delete操作,InnoDB会自动给其加上排他锁,对于select操作需要手动设置排他锁。...当一个事务对表添加意向排他锁后,另外一个事务在加锁前就会通过该表的意向排他锁得知已经有事务在对该表进行独占操作,从而等待。 可以发现,意向锁是一种表级锁,可较为方便地判断表中是否存在被锁定的数据行。...在InnoDB中,意向锁是引擎自动维护的,用户不能对其进行操作,这种锁可看作引擎对加锁性能的优化。...(5)自增锁(AUTO-INC Locks) 自增锁是一种特殊的表级锁,当一个事务正在向表中插入数据时,其他事务都会被阻塞,确保插入数据的连续自增性。
=1 (表示下一次插入数据时,如果需要自动生成自增值,会生成 id=1。)...大家可以发现这个操作并没有进行原子操作,如果SQL语句执行失败,那么自增是不是就不会连续了呢?...如果插入数据时 id 字段指定为 0、null 或未指定值,那么就把这个表当前的 AUTO_INCREMENT 值填到自增字段; 当我们第二次在执行以下SQL语句时,就会出现错误。...执行以下SQL语句(在表t中先新增了4条数据,在创建表tt把表t数据进行批量新增) insert into t values(null, 1,1); insert into t values(null,...并且在事务向蕴含了 AUTO_INCREMENT 列的表中新增数据时就会去持有自增锁,假如事务 A 正在做这个操作,如果另一个事务 B 尝试执行 INSERT语句,事务 B 会被阻塞住,直到事务 A 开释自增锁
,因为IX锁是表锁且IX锁之间是兼容的,因而事务一和事务二都能同时获取到IX锁和间隙锁。...接着事务一请求插入意向锁,这时发现事务二已经获取了一个区间间隙锁,而且事务一请求的插入点在事务二的间隙锁区间内,因而只能等待事务二释放间隙锁。...这个时候事务二也请求插入意向锁,该插入点同样位于事务一已经获取的间隙锁的区间内,因而也不能获取成功,不过这个时候,MySQL已经检查到了死锁,于是事务二被回滚,事务一提交成功。...这段话表明自增锁是一种特殊的表级锁,主要用于事务中插入自增字段,也就是我们最常用的自增主键id。通过innodb_autoinc_lock_mode参数可以设置自增主键的生成策略。...statement模式: 在statement模式下,每一条会修改数据的sql都会记录到master的binlog中,slave在复制的时候sql进程会解析成和原来master端执行多相同的sql再执行
领取专属 10元无门槛券
手把手带您无忧上云