mysql中的视图
视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。
视图的操作
定义一个视图:
格式: CREATE VIEW 视图名 AS sql语句
示例:CREATE VIEW test_view AS SELECT name, school from table1
使用视图:
格式: select * FROM 视图名 (*表示视图中的所有字段名,也可以使用需要查询的字段名)
示例:select * FROM test_view
修改视图:
格式:ALTER VIEW 视图名 AS 新的sql语句
示例:ALTER VIEW test_view AS SELECT name, age FROM table1
删除视图:
格式:drop VIEW 视图名
示例:drop VIEW test_view
mysql中的索引
索引用于快速找出在某个列中有一特定值的行,不使用索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大,查询数据所花费的时间就越多,如果表中查询的列有一个索引,MySQL能够快速到达一个位置去搜索数据文件,而不必查看所有数据,那么将会节省很大一部分时间。
索引的操作
索引 index:加速数据查询
普通索引:index
创建索引:
格式:CREATE INDEX 索引名 ON 表名(字段名(字段长度))
示例:CREATE INDEX test_index ON table1(name(20))
CREATE INDEX index_1 on table1(name, age) # 也可以添加两个字段
查看索引:
格式:show INDEX FROM 表名
示例:show INDEX FROM table1
删除索引:
格式:DROP INDEX 索引名 on 表名
示例:DROP INDEX test_index on table1
创建唯一索引:
格式:CREATE UNIQUE 索引名 on 表名(字段名)
示例:CREATE UNIQUE index_3 on table1(t1)
删除索引:
同普通索引
mysql中的事务
一个最小的不可再分的工作单元,通常一个事务对应一个完整的业务(如:银行的转账业务)
一个完整的业务需要批量的DML(Insert, delete, update)语句共同联合完成
事务只和DML语句有关,或者说DML语句才有事务,根据业务逻辑的不同DML的语句个数也不同
rollback 回滚
commit 提交
事务的四大特性:
原子性:事务是最小单位,不可再分
一致性:事务要求DML语句操作的时候,必须保证同时成功或失败
隔离性:事务A和事务B之间具有隔离性
持久性:是事务的保证,植物中介的标志(内存的数据持久保存到硬盘文件中)
术语:
开始事务:start transaction
提交事务:commit
回滚事务:rollback
创建恢复点:savepoint 恢复点名
使用方法:
首先进行开启事务:start transaction 可以直接在命令行输
开启方式有两种还有(begin)也是开启事务
然后再进行修改数据,可以看到,再没有进行事务提交(commit)之前,修改数据是没有生效的
不想提交时则使用回滚事务rollback
创建恢复点 savepoint a 再进行删除表中的数据,使用恢复点之前需要先开启事务
回滚到之前的恢复点 rollback to 恢复点
事务的使用
操作流程:
-- 开始事务
start TRANSACTION
-- 事务中的操作
UPDATE table2 SET money = money-500 WHERE NAME="张三"
UPDATE table2 SET money = money + 500 WHERE NAME = "李四"
SELECT * from table2
--提交事务
COMMIT
事务中断提交
BEGIN # 开始事务
INSERT INTO table2(name, money) VALUES("王五", 3000) # 执行操作
SAVEPOINT a # 定义保存点a
UPDATE table2 SET money = money-500 WHERE NAME="张三" # 执行操作
UPDATE table2 SET money = money + 500 WHERE NAME = "李四" # 执行操作
SAVEPOINT b # 定义保存点b
DELETE FROM table2 WHERE name = "张三" # 执行操作
SELECT * FROM table2 # 查询数据
ROLLBACK TO b # 回滚到保存点b,没有提交功能
COMMIT # 提交事务
ROLLBACK # 回到事务开启之前的状态,同时提交事务(即不修改数据)
两个事务同时开启,相互之间具有隔离性;
table2