一、数据库原理

没有使用数据库之前,通过文件保存的缺陷?

缺乏对数据的整体管理,数据不变修改;不利于数据分析和共享;数据量急剧增长,不利于持久保存。

DB — 按照特定数据结构组织、存储、管理数据的数据库
DBMS — 数据库管理系统

表由行和列组成。
列 — 字段
行 — 记录

数据库分为关系型数据库和非关系型数据库
数据库本身不区分大小写

二、SQL

SQL(strutted query language,结构化查询语言)可分为:

  • DDL 数据库定义语言,用于建立、修改、删除数据库对象
  • DML 数据操作语言,用于改变表当中的数据
  • TCL 事物控制语言,用来维护数据一致性的语句
  • DQL 数据查询语言,用来查询所需要的数据
  • DCL 数据控制语言,用于执行权限的授予和收回工

在数据库中, SQL 语句本省是不区分大小写的,但是为了增加可读性,通常会将关键字与非关键字按照大小写区分开。

在 SQL Developer 中,当需要连续执行多条 SQL 语句时,每条语句可以在结尾使用『;』来分割多条语句,这样他们是可以同时执行的,但是『;』不是 SQL 本身所需要的东西。也可以选中某条 SQL ,单独执行。

三、数据类型(Oracle)

NUMBER(P,S)表示数字类型,ORACLE中所有的数字都是用NUMBER类型表示
P表示数字的总位数S表示小数点后面的位数

若省略S值则表示一个整数,P包含S
例如,id NUMBER(6,2)表示整数占四位,小数占两位,最大取值为9999.99

CHAR(N),表示固定长度的字符类型

N 表示占用的字节数,最大长度是2000字节

1
name CHAR20

表示最多可存储20个字节的字符串,占用空间固定,无论实际数据多长都会补充若干空格直到达到实际指定长度。
优点:查询效率好
缺点:浪费磁盘空间

VARCHAR(N),VARCHAR2(N),VARCHAR2 为 ORACLE 独有,均表示变长字符串类型

N 表示最多可存储的字节数,最大长度4000字节

根据保存的数据长度,占用空间是变化的
优点:磁盘空间利用效率高
缺点:查询效率低

DATE,用于定义日期时间的数据

长度是7个字节,7个字节分别存储世纪,年,月,日,时,分,秒,所以时间的精度最多到秒

默认格式DD-MON-RR,例如11-APR-71,也可以存储为DD-MON-YYYY格式

1
date DATE

表示date列中存放的是日期数据

四、DDL语句

1.CREATE 新建表

1
2
3
CREATE TABLE [schema.]table_name(
column_name datatype[DEFAULT expr][,..]
);

1
2
3
4
CREATE TABLE student(
name VARCHAR2(20),
gender CHAR(1)
);

2.DROP 删除表

1
DROP TABLE table_name;

3.DESC 查看表结构

1
DESC table_name;

4.DEFAULT 关键字给列指定默认值,不指定时所有数据类型默认值均为 NULL

1
gender CHAR(1) DEFAULT 'M'

字符串内容是区分大小写的

5.NOT NULL 关键字是一种约束条件,用于确保字段的值不为空
默认情况下,任何列都允许有空值,当某个字段使用NOT NULL修饰后,任何情况下该字段都不能为空

1
name VARCHAR2(20) NOT NULL

6.RENAME 修改表名

1
RENAME old_name TO new_name;

1
RENAME student TO teacher

7.ALTER 修改表结构
(1)给表添加列可以使用 ALTER TABLE 的ADD字句实现,向表中添加字段只能追加到表的最后,不能在表中间添加新的字段

1
2
3
ALTER TABLE student ADD(
age NUMBER(3)
)

(2)使用ALTER TABLE 的DROP字句删除列
当表中有数据时,会将删除的字段在每条记录对应的值都删除,若表中数据量大时会耗时

1
2
3
ALTER TABLE student DROP(
name VARCHAR2(20)
)

(3)使用 MODIFY 子句可以改变表中列的数据、长度和默认值
修改仅对以后插入的数据有效
如果把长度由大改小,有可能不成功
建议在表中没有数据时进行,尽量不要修改类型,若修改长度,尽量不要缩小

1
2
3
ALTER TABLE student MODIFY(
age NUMBER(3) DEFAULT 0
);

8.TRUNATE 清空表数据
立即生效,无法回退

1
TRUNCATE TABLE table_name

五、DML 语句

INSERT 添加数据

1
INSERT INTO table_name [(col1,col2)] VALUES (val1,val2)

1
2
INSERT INTO student (id,name,date) VALUES (1002,'张三','01-SEP-03');
INSERT INTO student (id,name,date) VALUES (1002,'张三',TO_DATE('2009-09-01','YYYY-MM-DD'));

UPDATE 修改表中记录中指定字段的值

1
UPDATE table_name SET col1=new_val1,col2=new_val2… [WHERE condition]

UPDATE通常会使用WHERE来限定要修改的记录,否则整张表都会被修改。若使用了WHERE,则只会修改满足条件的记录。

1
UPDATE student SET name='李四' WHERE id=3

DELETE 删除数据

1
DEKETE FROM table_name [WHERE condition]

若不添加 WHERE 字句会将表中所有是数据删除,等同于清空表操作。添加 WHERE 子句后,只会删除表中满足 WHERE 条件的记录。

1
DELETE FROM student WHERE name = '李四'

如果是删除全部数据,且数据量大,DELETE 语句效率比 TRUNCATE 语句低, DELETE 是逐行删除, TRUNCATE 是直接删除全部数据。但 TRUNCATE 是 DDL 语句,不受事物控制。

DML语句是伴随事物的,操作的数据并没有真的提交到服务器,需要 COMMIT 命令才会提交
执行第一条DML语句开始一个新事物,执行TCL语句会做相应处理事物

六、TCL语句

COMMIT 提交事物
ROLLBACK 回退事物