0%

数据库中索引+事务+sequence

#web开发/czh_blog/数据库
2017年8月31日 下午2:35

索引

  1. 主键索引,唯一索引(unique)
  2. 索引: index 建立索引是为了提高查询速度 但是对于频繁改动的字段添加索引会降低性能
  3. 在创建表或者改变表内字段约束时, primary key 和 unique 约束会自动为该字段创建对应索引
  4. 索引的用途: 在查询时将索引字段用于条件判断可以提升速度(性能)
  5. 慎用!!
  6. 索引的创建 与 删除
    1
    2
    3
    create index stu_s_name on stu(s_name)

    drop index stu_s_name

事务在不同数据库中的不同

  1. MYSQL和Windows sqlSEVER 默认开启自动提交
  2. MySQL 命令行的默认设置下,事务都是自动提交的,即执行 SQL 语句后就会马上执行 COMMIT 操作。
  3. 因此要显式地开启一个事务务须使用命令 BEGINSTART TRANSACTION,或者执行命令 SET AUTOCOMMIT=0,用来禁止使用当前会话的自动提交。
  4. 当使用begin时,就不会自动提交了
  5. ORACL中需要手动的commit进行提交,不会默认进行提交
  6. 参考MySQL 事务 | 菜鸟教程
    1. 在没有commit之前,是可以回滚的
    2. 但是commit之后就不可以回滚了,同时,前面设置的回滚点也会失效

注:

  1. 在一个查询窗口中,没有commit的insert操作是不写入磁盘的。这时的insert的操作只是影响内存的数据
  2. 在PL/SQL中(软件),如果一个sql insert执行完没有commit,在当前查询窗口中,查询select是可以出表的变化的。
  3. 但是,但如果换一个查询窗口,或者去表中去看,其实是没有插入的,这就是因为oracle不是自动commit事务,需要手动提交,
  4. 你在当前查询窗口中可以查询出表的变化,是因为在当前窗口中是从当前查询表对应的内存去查询,并不是去硬盘上去查询

sequence 序列

  1. mysql SQLServer 由表自身维护主键
  2. Oracle对象维护主键 需要有SQL进行配合(这里的对象指的是sequence对象)
  3. 不一定保证连续
  4. 每行调用nextval后都会自增
  5. 同一行多次调用后只会自增一次
  6. 想使用currval 必须先调用一次 nextval 否则序列不会自动初始化
1
2
3
4
5
6
7
8
9
10
11
 create sequence seq_stu
minvalue 15
start with 15
increment by 1;

insert into school values(seq_stu.nextval,'a','a');

commit;

select seq_stu.nextval from dual
select seq_stu.currval from dual

创建索引
自动创建索引

case
exists
sequence

用户 表空间 版本号