数据库基础(一)
一、数据库原理
没有使用数据库之前,通过文件保存的缺陷?
缺乏对数据的整体管理,数据不变修改;不利于数据分析和共享;数据量急剧增长,不利于持久保存。
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 CHAR(20) |
表示最多可存储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
3CREATE TABLE [schema.]table_name(
column_name datatype[DEFAULT expr][,..]
);
1 | CREATE TABLE student( |
2.DROP 删除表1
DROP TABLE table_name;
3.DESC 查看表结构1
DESC table_name;
4.DEFAULT 关键字给列指定默认值,不指定时所有数据类型默认值均为 NULL1
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
3ALTER TABLE student ADD(
age NUMBER(3)
)
(2)使用ALTER TABLE 的DROP字句删除列
当表中有数据时,会将删除的字段在每条记录对应的值都删除,若表中数据量大时会耗时1
2
3ALTER TABLE student DROP(
name VARCHAR2(20)
)
(3)使用 MODIFY 子句可以改变表中列的数据、长度和默认值
修改仅对以后插入的数据有效
如果把长度由大改小,有可能不成功
建议在表中没有数据时进行,尽量不要修改类型,若修改长度,尽量不要缩小1
2
3ALTER 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 | INSERT INTO student (id,name,date) VALUES (1002,'张三','01-SEP-03'); |
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 回退事物