1、SQL语句分类:
DML语句(数据库操作语言):完成数据的增删改查
insert、delect、update、select
DDL语句(数据库定义语言):管理数据库对象
create table、drop table、truncate table
create view index sequence synonyn同义词
DCL语句(数据库控制语言):提交,回滚,保存点
commit、rollback、savepoint
2、权限、角色、用户
角色:是一组权限的集合,将角色赋给一个用户(授权),这个用户就拥有了这个角色中的所有权限。
3、投影
投影是从表中选择需要的属性列;
4、模式(三级模式结构)
在数据库三级模式结构中,描述数据库中全体逻辑结构和特性的是( 模式)
外模式也称子模式(Subschema)或用户模式,是数据库用户(包括应用程序员和最终用户)能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。理解:①一个数据库可以有多个外模式;②外模式就是用户视图;③外模式是保证数据安全性的一个有力措施。
内模式又称存储模式,对应于物理级,它是数据库中全体数据的内部表示或底层描述,是数据库最低一级的逻辑描述,它描述了数据在存储介质上的存储方式和 物理结构 ,对应着实际存储在外存储介质上的数据库。内模式由内模式描述语言来描述、定义所有内部记录类型、索引和文件的组织方式,以及数据控制方面的细节,它是数据库的存储观。
概念模式 (Conceptual Schema)是数据库中全部数据的整体逻辑结构的描述。它由若干个概念记录类型组成,还包含记录间联系、数据的完整性、安全性等要求。 描述概念模式的数据定义语言称为“模式DDL”。
5、数据不一致性
并发操作可能破坏事务的隔离性,带来的数据不一致性包括三类:丢失修改、不可重复读、读“脏”数据。
(1)赃读(Dirty Read)—— 可能发生的隔离级别:读未提交的事务
脏读意味着一个事务读取了另一个事务未提交的数据,而这个数据是有可能回滚。
(2)不可重复读 (Unrepeatable Read)—— 可能发生的隔离级别:读提交的事务、读未提交的事务
不可重复读意味着,在数据库访问中,一个事务范围内两个相同的查询却返回了不同数据。这是由于查询时系统中其他事务修改的提交而引起的。例如:事务B中对某个查询执行两次,当第一次执行完时,事务A对其数据进行了修改。事务B中再次查询时,数据发生了改变。
(3)丢失修改/幻读(phantom read)—— 可能发生的隔离级别:不可重复读、读已提交的事务、读未提交的事务
幻读,是指当事务不是独立执行时发生的一种现象。例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样。对新插入的数据没有进行修改。
6、事务的四大特性
数据库事务的四大特性:原子性、一致性、隔离性、持久性
(1)原子性(Atomicity)
事务中包含的程序作为数据库的逻辑工作单位,它所做的对数据修改操作要么全部执行,要么完全不执行。这种特性称为原子性。即,事务所包含的操作,要么全部执行,要么都不执行。
(2)一致性
在一个事务执行之前和执行之后,数据库都必须处于一致性状态。
(3)隔离性
并发的事务,是相互隔离的。即一个事务内部的操作及正在操作的数据必须封锁起来,不被其它企图进行修改的事务看到。假如并发交叉执行的事务没有任何控制,操纵相同的共享对象的多个并发事务的执行可能引起异常情况。
(4)持久性
一个事务一旦成功完成,它对数据库的改变必须是永久的,即使是在系统遇到故障的情况下也不会丢失。对已提交事务的更新能恢复。持久性通过数据库备份和恢复来保证。
7、数据库系统必须提供的-数据控制功能
安全性控制,完整性控制,恢复控制,并发控制。
8、索引
索引:是对数据库中,一列或多列的值,进行排序的一种结构。
索引能快速找出在某一列中有一特定值的行。不使用索引,mysql必须从第一条记录开始查找,直到找到相关的行。如果表中查询的列有一个索引,mysql能快速到达某个位置去搜索数据文件,而不必查看所有数据。
索引和表是单独存放的,删除索引不影响表
索引:用来提高检索(查)速度,但是会降低增、删、改的效率。通过地址进行快查。
主键、唯一约束,本身就是索引,是系统自动创建的。
索引是数据库dbms自动维护的,使用者只需要创建即可。
什么时候创建索引?
(1)当表比较大,并且经常需要按某一列或某多列进行查询时。
(2)列中数据值分布范围很广;
(3)列经常在 where 子句 或者 连接条件中出现;
(4)表经常被访问 而且 数据量很大,访问的数据大概占数据总量的 2% 到 4%。
不要创建索引?
(1)表很小
(2)表经常更新
//创建索引
create index index_name
on table_name (column_name)
//删除索引
drop index index_name
on table_name
9、聚集索引和非聚集索引
聚集索引:以主键创建的索引
非聚集索引:以非主键创建的索引
10、序列
序列 —— 用于提供唯一的数值,一般用来提供主键。
提前放在内存里,可以自动增长。
create sequence seq_name [参数表]
drop sequence seq_name;
seq.nextval,使用该语句提供主键,序列当前值会不断增长。
seq.currval,查看当前值。
序列刚创建时,curr 指针位于头部,不是第一个,没有值,第一个操作必须是 next。
多个表使用同一个序列,可能造成表的主键不连续。
插入数据也可能造成主键不连续。
11、视图
将查询语句用一个视图代表,用于简化查询,但并不能提高查询性能。
(1)创建视图,事先需要让超级用户来分配创建视图的权限。
create view view_name
as
select ...
(2)通过视图查询
select * from view_name;
(3)删除视图
drop view view_name;
12、约束
创建表时使用,对每个字段加约束。
主键约束:primary key
非空约束:not null
唯一约束:unique
检查约束:check()
create table teacher (
id number constraint teacher_id_pk primary key,
name varchar(12) constraint teacher_name_notnull not null,
email varchar(20) constraint teacher_email_notnull not null
constraint teacher_email_unique unique,
sex number constraint teacher_sex_check check(sex in (1,2)),
age number constraint teacher_age_check check(age > 20)
)
insert into teacher (id, name, email, sex, age) values (1, 'tom', '10001@163.com', 1, 21);
主外键约束:在子表中,创建一个表级的约束。
create table teacher (
id number constraint teacher_id_pk primary key,
name varchar(12) constraint teacher_name_notnull not null,
email varchar(20) constraint teacher_email_notnull not null
constraint teacher_email_unique unique,
sex number constraint teacher_sex_check check(sex in (1,2)),
age number constraint teacher_age_check check(age > 20),
deptno number constraint teacher_deptno_pk references dept(deptno)
)
on delete cascade:当删除父表时,级联删除子表记录;
on delete set null; 当删除父表时,将子表的相关依赖记录的外键置为 null;