演变:
最开始是手工来管理数据,之后是通过文件来管理数据,由于文件管理数据有很多弊端,比如不便于数据的修改以及数据之间的共享,数据大量增加时不可能一直用文件管理,所以最后发展为数据库管理数据。
1.什么是数据库?
按照数据结构来组织、管理、存储数据的仓库;
数据库管理系统(DBMS):管理数据库的软件;
2.数据库有哪些?
数据库分为关系型数据库和非关系型数据库。
关系:描述2个元素间的关联或对应关系的
表:一个关系型数据库由多个二维表组成,表是关系型数据
库的基本存储结构。表由行(记录)和列(字段)组成,
表和表之间存在关联关系。
常见的关系型数据库有哪些?
oracle oracle 商用收费
mysql oracle 免费,规模较oracle/DB2小
DB2 IBM
SQL Server 微软
Sybase Sybase
3.SQL
SQL:Structured Query Language,结构化查询语言,SQL语言是在关系型数据库上执行数据操作、检索、维护所使用的标准语言。
SQL语言可分为:
数据定义语言DDL
创建(CREATE)、修改(ALTER)、删除(DROP)数据库对象
的结构
a)创建表
CREATE TABLE emp(
id NUMBER(4),
name VARCHAR2(10),
brith DATE,
salary NUMBER(7,2)
);
b)修改表结构
ALTER TABLE emp --增加字段
ADD(age NUMBER(3));
ALTER TABLE emp --删除字段
DROP(age);
ALTER TABLE emp --修改字段
MODIFY(salary NUMBER(7,2) DEFAULT 0.00)
c)删除表 DROP TABLE emp;
d)查看表结构 DESC emp;
e)修改表名 RENAME emp TO emp1;
数据操纵语言DML
插入数据(INSERT)、更新数据(UPDATE)、删除数据(DELETE)
注:DML语句是伴随事物操作的
a)插入数据
INSERT INTO emp
(id,name,brith,salary)
VALUES
(1,'jack',TO_DATE('2008-08-08','YYYY-MM--DD'),50000.00);
COMMIT;
b)更新数据
UPDATE emp
SET salary=10000.00
WHERE name='jack';--如果不加限定条件则是对所有数据进行修改i
COMMIT;
c)删除数据
DELETE FROM emp
WHERE name='jack';
COMMIT;
事物控制语言TCL
Transaction Control Language,都是伴随事物控制的,只有提交了事物之后,对数据的操作才有效,否则事物会回滚,不会对数据库中相应的数据信息更改。
commit:提交事物,只有提交了事物对数据的更改才有效。
rowllback:事物回滚,取消已经更改的数据(若已提交则不能修改)。
savepoint:回滚点,当前事物可以回退到指定的点,可以实现部分改变。
数据查询语言DQL
Data Query Language
SELECT * FROM emp;
有关联查询、高级查询等,比较多,后面会详细列举
数据控制语言DCL
Data Control Language ,主要用于权限的授予与回收。
CREATE user:创建用户
GRANT:用于给用户或者角色授予权限
REVOKE:用于回收用户或者角色已有的权限
4.oracle数据库对象
表:关系型数据库存储数据最基本的结构
视图:VIEW,也叫虚拟表,是一张不存在的表,是一条查询
语句所对应的结果集的映射,其中结果集的名字就是视
图名。视图不包含任何数据,基表数据发生变化则视图
数据也会发生变化。视图也分为简单视图(不包含单行
函数、表达式、分组函数等)、复杂视图(包含函数
等)、连接视图(多个表关联)
视图的作用:简化复杂查询、限制数据访问
授予用户创建视图的权限:GRANT CREATE VIEW TO user;
创建简单视图: CREATE VIEW v_emp
AS
SELECT id,name,salary
FROM emp
WHERE name='jack';
查看视图结构:DESC v_emp;
查看视图:SELECT * FROM v_emp;
简单视图可以进行DML操作,复杂视图不能进行DML操作即,如果视图定义中包含了函数、表达式、分组语句、ROWNUM伪列、DISTINCT关键字,则不能对视图进行DML语句操作。
对简单视图进行DML操作,就是对基表进行DML操作,但视图对其不可见,只是在基表中可以看到数据发生改表,INSERT INTO /UPDATE操作都会污染基表数据,删除视图本身不会影响基表,但是删除视图中的数据会将基表中的数据也删除。
为了避免对简单视图进行DML操作出现污染基表数据的情况,可以对视图添加检查选项,WITH CHECK OPTION/只读选项WITH READ ONLY
索引:是一种允许直接访问表中某一数据行的树形结构,是为了提高查询效率而引入,是与表相互独立的数据库对象。
索引记录中存有索引关键字和指向表中数据的指针;
对索引进行I/O操作比对表进行操作要少很多;
索引是提高查询效率的一种机制;
索引一旦建立就会被oracle系统自动维护,查询语句中不用指定使用哪个索引。
创建索引:CREATE INDEX idx_emp_id ON emp;
给多个字段添加索引:CREATE INDEX idx_emp ON emp(name,salary);
删除索引:DROP INDEX idx_emp_id;
重建索引:ALTER INDEX idx_emp_id REBUILD;
合理使用索引可以提高查询效率,建立索引的原则:
a.不要在小表上建立索引
b.限制表上索引数目,索引不是越多越好
c.删除很少被用的不合理的索引
d.经常做DML操作的表不用建立索引,因为索引很快会被打乱,无意义。
序列:SEQUENCE,生成一组数字,常用于表的主键字段生成值使用。
创建序列:CREATE SEQUENCE seq_emp_id
START WITH 100
INCREMENT BY 10;
删除序列:DROP SEQUENCE seq_emp_id;
序列支持2个伪列:
CURRVAL,当前值,不会发生步进,但是新建序列必须调用NEXTVAL后才能调用CURRVAL;
NEXTVAL,下一个值,会发生步进。
序列不会回退。
UUID:32位不重复字符串,也是主键生成方式的一种。
约束
CONSTRAINT,全称是约束条件,也称作完整性约束条件。
约束是在数据表上强制执行一些校验规则的,当对数据进行DML操作时必须遵守约束条件,否则无法执行操作。
约束可以保证表中数据的完整性,也可以保证数据间的完整逻辑。
约束的分类:
非空约束 Not Null NN(简称)
唯一性约束 Unique UQ
主键约束 Primary Key PK
外键约束 Foregin Key FK(不推荐)
检查约束 Check CK
Not Null,在建表或修改表时建立,如果某一字段是非空约束,则在插入数据时该字段必须给有效值;
Unique,唯一性约束可以在建表时建立,也可以在之后添加。某一字段为唯一性约束时,则该字段不能出现重复,但可以是null值;
Primary key,主键约束在功能上看可以看成Not Null 和 Unique的组合。一个表只允许建立一个主键约束,而其他约束个数则没有限制。主键字段可以是单字段也可以是多字段组合(即多字段组合不能为空并且不能重复)。
主键选取的原则:
a.主键除了一行的唯一标识之外再无其他用途
b.主键应该让系统自动生成,而不要人为干预
c.主键不应包含动态数据变化,如时间戳
d.主键应尽量建立在单列上
Foreign Key,外键约束条件定义在2张表上或一张表的2个字段上,用于保证2个字段之间的关系。
外键对一致性的约束:
a.从表中定义的外键的列值必须从主表中参照的列值中选取或者为null;
b.主表中参照的列值被从表参照时,那么主表中该字段的行不能被删除。
外键约束对性能的降低:
a.如果在一张频繁进行DML操作的表上建立外键,每次DML操作都会导致数据库对其所关联的表进行检查,产生额外的开销。如果已在程序中控制逻辑,这些判断则是浪费开销,可以省去;
b.外键确定了主从表的先后生成关系,有时会影响业务逻辑。
关联不一定需要外键约束:
a.保证数据的完整性可以由程序或者触发器控制;
b.简化开发、维护数据时不考虑使用外键约束;
c.频繁进行DML操作时,不考虑使用外键约束。
CHECK,检查约束要求字段中的每个值都要满足CHECK中的条件,当建立了检查约束的字段在新增或修改列时都要满足该条件。