视图

  • 视图视图是一个虚拟表,从一个或者多个表中导出,视图的行为与表非常相似。
  • 在视图中可以使用select语句查询数据,以及使用insert、update和delect语句修改记录。
  • 视图操作、使用方便,而且可以保证数据库系统的安全(可以限制表中的机密数据)。
  • 视图一经定义遍储存在数据库中,与其相应的数据并没有像表那样在数据库中再储存一份,通过视图看到的数据只是存放在基本表中的数据。对视图的操作与对表的操作一样可以对其进行查询、修改和删除。当对通过视图看到的数据进行修改时,相应的基本表的数据也要发生变化;同时,对基本表中的数据进行修改的时候,这种变化也自动地反映到视图中。
  • 视图的作用
  • 提高了重用性,就像一个函数
  • 对数据库重构,却不影响程序的运行
  • 提高了安全性能,可以对不同的用户
  • 让数据更加清晰
  • 创建视图
  • 单个表上创建视图、多个表上创建视图
  • 创建的语法形式
  • creat view 视图名称 (视图的字段名称表) as select语句;
  • 建议视图名称以 v_开头
# 示例一:
cteate view v_new_table (id, name, glass) 
    as select table1.id, table1.name, table2.glass 
    from table1, table2 where table1.g_id=table2.id;

# 示例二:
create view v_new_table 
    as select table1.*, table2.name 
    from table1 left join table2 
    on table1.g_id=table2.id;
  • 查看数据库中所有表(show tables),会把视图表显示出来。
  • 查看视图
  • select * from 视图表名称;
  • 修改视图
  • create or replace view 语句修改视图
  • 该语句与创建视图语句一样:
  • 当视图存在的时候,修改语句对视图进行修改;
  • 当视图不存在的时候,创建视图。
  • alter 语句修改视图
  • alter view 视图名 as select语法;
  • 删除视图
  • drop view [if exists] 视图名;

事务

  • 所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位
  • 例如:银行转账工作:从一个账号扣钱并使一个账号赠款,这两个操作要么都执行,要么都不执行。所以,应该把他们(扣款、赠款)看成一个事务。
  • 事务是数据库维护数据一致性的单位,每个事务结束时,都能保持数据一致性。
  • 事务四大特效(简称ACID)
  • 原子性(Atomicity)
  • 一个事务必须被视为一个不可分割的最小工作单元,整个事务中所有的操作要么全部执行,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作,这就是事务的原子性。
  • 一致性(Consistency)
  • 数据库总是从一个一致性的状态转换到另一个一致性的状态。(相当于前面的例子,要么所有的操作要么全部执行,要么全部失败回滚)
  • 隔离性(Isolation)
  • 通常来说,一个事务所做的修改在最终提交以前,对其他的事务视而不见。
  • 持久性(Durability)
  • 一旦事务提交,则其所做的修改会永久保存到数据库。(此时即使系统崩溃,修改的数据也不会丢失。)
事务命令
  • 重点:数据表的引擎必须是innodb类型才可以使用事务,这是mysql表的默认引擎。
  • 查看表的创建语句,就可以看到表的引擎engine。
  • 开启事务
  • 开启事务后执行修改命令,变更会维护到本地缓存中,而不会维护到物理表中。
  • begin; 或者 start transaction;
  • 提交事务
  • 将缓存的书库提交变更维护到物理表中。
  • commit;
  • 回滚事务
  • 放弃缓存中的变更数据
  • rollback;

索引操作

  • 何为索引?
  • 索引是一个单独的、存储在磁盘上的数据结构,包含对数据表李所有记录的引用指针。
  • 更通俗一点来说,数据库索引就好比是一本XX字典的目录,能加快数据的查询速度。
  • 查看索引
  • show index from 表名;
  • 给表中某个字段创建索引
  • 注意:当数据表创建主键和外键的时候,会自动创建索引
  • 因此用主键和外键搜索数据,相当快。
  • create index 创建的索引名 on 表名(字段名(长度))
  • 若字段名是字符串需要带上长度,且尽量与定义字段时的长度相同。
  • alter table 表名 add index 索引名(字段名(长度))
  • 删除索引
  • drop index 索引名称 on 表名;
  • alter table 表名 drop index 索引名;