1.事务隔离级别:多个连接开启各自事务操作数据库中数据时,数据库系统要负责隔离操作,以保证各个连接在获取数据时的准确性。如果不考虑隔离性,可能会引发脏读、不可重复读、幻读。 脏读:就是一个事务读到另一个事务没有提交的数据。不可重复读:指一个线程中的事务读取到了另外一个线程中提交的update的数据。幻读:指一个线程中的事务读取到了另外一个线程中提交的insert的数据。隔离级别有四种:读未提交(Read uncommitted)、读以提交(Read committed)、可重复读(Repeatable read)、可串行化(Serializable)
(1) 查看当前会话隔离级别
SELECT @@tx_isolation;
(2) 查看系统当前隔离级别
SELECT @@global.tx_isolation;
(3) 设置当前会话隔离级别
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
(4) 设置系统当前隔离级别
SET GLOBAL TRANSACTION ISOLATION LEVEL REPEATABLE READ;
演示mysql事务隔离级别开启2个控制台:
SELECT @@tx_isolation;
-- mysql> SELECT @@tx_isolation;
-- +-----------------+
-- | @@tx_isolation |
-- +-----------------+
-- | REPEATABLE-READ |
-- +-----------------+
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
-- mysql> SELECT @@tx_isolation;
-- +-----------------+
-- | @@tx_isolation |
-- +-----------------+
-- | READ-UNCOMMITTED |
-- +-----------------+
start transaction;
use fu_db02;
CREATE TABLE `account`(
id INT,
`name` VARCHAR(32),
money INT);
select * from account;
insert into account values(100,'tom',1000);
-- +------+------+-------+
-- | id | name | money |
-- +------+------+-------+
-- | 100 | tom | 1000 |
-- +------+------+-------+
2.事务的特性:
原子性:指处于同一个事务中的多条语句是不可分割的。一致性:事务必须使数据库从一个一致性状态变换到另外一个一致性状态。隔离性:指多线程环境下,一个线程中的事务不能被其他线程中的事务打扰。持久性:事务一旦提交,就应该被永久保存起来。
3.MySQL的表类型由存储引擎决定,主要包括MyISAM、innoDB、Memory等。MySQL数据表主要支持六种类型,分别是:CSV、Memory、ARCHIVE、MRG_MYISAM、MYISAM、InnoBDB。
innodb 存储引擎:1.支持事务 2.支持外键 3.支持行级锁
myisam 存储引擎:添加速度快 2.不支持外键和事务 3.支持表级锁
CREATE TABLE t24(
id INT,
`name` VARCHAR(32)) ENGINE MYISAM
START TRANSACTION;
SAVEPOINT t1;
INSERT INTO t24 VALUES(1,'jack');
SELECT * FROM t24;
ROLLBACK TO t1;
memory 存储引擎:数据存储在内存中[关闭了MySQL服务,数据丢失,但是表结构还在] 2.执行速度很快(没有IO读写) 3.默认支持索引(hash表)
CREATE TABLE t25(
id INT,
`name` VARCHAR(32)) ENGINE MEMORY
DESC t25;
INSERT INTO t25 VALUES(1,'tom'),(2,'jack'),(3,'milan');
SELECT * FROM t25;
修改存储引擎:alter table 表名 engine = 存储引擎;
4.视图是虚拟的表,视图是根据基表(可以是多个基表)来创建的。通过视图可以修改基表的数据。基表的改变,也会影响到视图的数据。
创建视图
create view 视图名 as select语句
修改视图
alter view视图名 as select语句
查看视图
show create view 视图名
删除视图
drop view 视图1,视图2
CREATE VIEW emp_view01
AS
SELECT empno,ename,job,deptno FROM emp;
DESC emp_view01;
SELECT * FROM emp_view01;
SHOW CREATE VIEW emp_view01;
DROP VIEW emp_view01;
UPDATE emp_view01
SET job = 'MANAGER'
WHERE empno = 7369;
SELECT * FROM emp;