01、DDL 数据定义语言 create alter drop truncate 02、DML 数据操作语言 insert delete update select 03、TCL 事务控制语言 commit rollback 04、DCL 数据控制语言 rovoke grant
A(Atomicity):原子性 一个事务是一个不个分割的工作单位,要么所有的语句都执行成功, 要么所有的语句都不执行。 C(Consistency):一致性 事务必须是是一个数据库从一个一致性状态变到另一个一致性状态。 I(Isolation):隔离性 一个事务的执行不能被其他事务干扰,在一个事务中添加修改的数据, 不能被另一个事务读取或修改。 D(Durability):持久性 指一个事务提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
1 Read Uncommitted(读取未提交内容) 2 在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读(Dirty Read)。 3 4 Read Committed(读取提交内容)Oracle默认的级别 5 这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。这种隔离级别也支持所谓的不可重复读(Nonrepeatable Read),因为同一事务的其他实例在该实例处理其间可能会有新的commit,所以同一select可能返回不同结果。 6 7 Repeatable Read(可重读) 8 这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。不过理论上,这会导致另一个棘手的问题:幻读(Phantom Read)。简单的说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题。 9 10 Serializable(可串行化) 11 这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。
数据库设计(Database Design):针对用户特定的需求,我们能够创建最合适的数据库模型,然后将数据有效的存储! 数据库涉及的内容:01、需求分析 02、概念结构设计 03、逻辑结构设计 04、物理结构的设计 05、数据库的实施 06、数据库的运行和维护 数据库的三大范式: 01、确保每列的原子性:每一列的值都是不可再分的最小数据单元! 02、在满足第一范式的前提下,确保列中的每列都和主键相关! 03、在满足第二范式的前提下,确保每列都和主键有直接关系,而不是间接依赖! A>B B>C B依赖于A,C依赖于B,我们就说C间接依赖于A,这种关系我们称之为:传递依赖。
1、建议不用“*”代替所有的列名 2、删除所有的数据用TRUNCATE代替DELETE 3、用NOT EXISTS 代替 NOT IN 4、用EXISTS 代替 IN 5、用EXISTS 代替 DISTINCT 6、驱动表的选择 6.1、from 后面靠右的那个表是驱动表(表都没索引的情况) 6.2、再有索引的情况下,应该是没索引的那张表是驱动表 6.3、驱动表要选择小表(过滤后的数据量小) 7、where 子句的连接顺序 7.1、过滤记录越多的条件子句应放置到后面 7.2、表连接关系放在前面 8、索引-通过索引,执行效率更高 8.1、单列索引:就是一个列的索引 8.2、组合索引:就是多列索引 8.3、分区索引:基于分区表 8.4、B树索引:普通索引 8.5、唯一索引:在索引里面增加了唯一约束 8.6、反向键索引 8.7、位图索引 8.8、函数索引 9、表分区 把表中数据划分成若干部分,并存储在不同的位置 优点: 改善查询性能 表更容易管理 便于备份和恢复 提高数据安全性 表分区种类 散列分区:根据hash值自动分配 列表分区:明确的指定列表 复合分区:上面几种的复用 其他分区:例如外键分区
数据库对象: 数据库对象-模式对象 逻辑结构的集合,最基本的数据库对象是表 同义词 视图 序列 索引-通过索引,执行效率更高DBLink 约束 触发器 存储过程 ... 数据库对象-视图 视图View-虚拟的表 限制对表中的一组行为访问 隐藏数据的复杂性 简化了用户的SQL 基表定义修改隔离 通过重命名列,从另一个角度提供了数据 DML操作的限制 只能对基表进行操作 注意权限问题 数据字典 静态数据字典 dba_***:包含了数据库拥有的所有对象和权限的信息 all_***:包含了用户当前可以访问的全部对象和权限的信息 user_***:包含了用户拥有的对象的信息 常用的: select * from user_tables --用户表 select * from user_tab_cols -- 表的列 select * from user_tab_comments; --查看表的注释 select * from user_views; --所有的视图 select * from user_sequences; --所有序列 select * from dba_data_files; --需要dba权限, 才可以查看所有用户的tablespace以及其数据文件的存放位置 动态数据字典 v$** v$sqlarea --通过这个查看sql,优化sql v$session --通过这个查看当前都哪些用户登录连接着数据库还可以看到实例 v$tablespace --查看表空间 v$database --查看数据库 v$instance --查看实例 ... 数据库对象-DBLink DBLink 访问远程数据库(只读权限) 创建步骤: 为远程数据库建立网络服务名(Net Manager) 创建DBLink 注:一般的dblink都是公用的,所以使用system用户创建DBLink即可 数据库对象-同义词 同义词(Synoyms) 匿名,屏蔽对象的名字及其持有者 为用户简化SQL语句 不同数据库之间通过DBLink访问,建立同义词 同一数据库下不同用户之间,建立同义词 分类 公用 专用