Oracle的DDL和DML
前言
这一章主要介绍一下SQL中的DDL和DML,以Oracle为例。
SQL
SQL:Structured Query Language 结构化查询语言
SQL是在关系型数据库上执行数据操作、检索、维护所使用的标准语言。
所有的数据库都使用相同或相似的语言。
SQL的分类
SQL分为DDL、DML、TCL、DQL、DCL。
DDL:数据定义语言。用于创建、修改、删除数据库对象。包括CREATE/ALTER/DROP/TRUNCATE
DML:数据操作语言。用于改变表中的数据,和事务相关,执行完后需要经过事务控制语言提交后才能将改变应用到表中。包括INSERT/UPDATE/DELETE
TCL:事务控制语言。用来维护数据一致性的语句,包括COMMIT 提交/ROLLBACK 回滚/SAVEPOINT 保存点
DQL:数据查询语言。用来查询所需数据,只有SELECT语句,他是最复杂的SQL,大部分面试涉及SQL都是考察DQL。
DCL:数据控制语言。用于执行权限的授予和收回操作。包括GRANT/REVOKE/CREATE USER
建议:SQL本身是不区分大小写的,由于可读性的问题,经常会把关键字全部大写,非关键字全部小写,比如上面涉及到的CREATE、INSERT、COMMIT等,当然了,还有一些其他的。这是一个建议,不这么写也完全没问题,看自己吧。
Oracle的数据类型
NUMBER
表示数字类型。
NUMBER(P,S),其中P表示数字的总位数,S表示小数的位数,如果没有S则不写,用于表示整数。
例如 a NUMBER(5,1),表示a字段表示的整数位最大位数四位,小数最大位数一位,表示的最大数字为:9999.9
CHAR
表示固定长度的字符类型。
CHAR(N),N表示占用的字节数,最大为2000字节。
例如 b CHAR(20)表示b字段最多存储20个字节的字符串,并且占用的空间是固定的20字节。
VARCHAR/VARCHAR2
表示变长的字符类型
VARCHAR2(N)N表示最多可占用的字节数,最大长度为4000字节。
例如 c VARCHAR2(200)表示c列最多存储200字节,如果c只有30个字节,那么它所占用的空间只有30,而不会是200
注意:应该注意到我所使用的都是VARCHAR2,而没有使用VARCHAR。他们是什么关系呢?
VARCHAR2是Oracle弄出来的,就现在来说,他是和VARCHAR一样的功能,就是多了一个2而已,为什么会有这个2呢?有兴趣的可以去了解一下,在Oracle中,VARCHAR和VARCHAR2都是有的,但是Oracle建议使用VARCHAR2。
CHAR与VARCHAR2
CHAR是固定长度的类型,它存储每一条记录都是一样长的,所以,它会存在浪费空间的情况,但是查询快。
VARCHAR2是变长的类型,它存储每一条记录都是按照实际占用的空间来的,所以,它不存在浪费空间,但是查询会慢一点。
实际开发中,可以根据需要自行选择它俩。
DATE
用于定义日期时间的数据类型。
长度是7个字节,每个字节分别表示世纪、年、月、日、时、分、秒。可以看出他的精度最多到秒。如果要表示秒一下的时间,那就的用另一个类型TIMESTAMP。
SQL操作
创建表
CREATE TABLE A(
id NUMBER(4),
name VARCHAR2(20) NOT NULL,
gender CHAR(1) DEFAULT 'M',
birth DATE,
salary NUMBER(6,2),
job VARCHAR2(30),
deptno NUMBER(2)
)
- 在数据库中,所有数据类型的默认值都是NULL
- 创建表的时候可以使用DEFAULT为某个单独的字段设置默认值
- 数据库中字符串的字面量是使用单引号,与Java不同
- 虽然SQL本身不区分大小写,但是字符串的值是会区分大小写的
- NOT NULL 表示该字段不能为空,不能与DEFAULT同时用在一个字段上
查看表结构
DESC A
删除表
DROP TABLE A
修改表
修改表名
RENAME A TO B
修改表的结构
新增字段
ALTER TABLE A ADD(
hiredate DATE DEFAULT SYSDATE
)
只能加在最后一个字段之后
修改字段
可以修改字段的类型、长度、默认值、是否非空,不能修改字段名
避免表中有数据后修改,若此时修改尽量不修改类型,若修改长度应该增大而非缩小,否在可能修改失败
ALERT TABLE A MODIFY(
job VARCHAR2(40)
)
删除字段
ALTER TABLE A DROP(hiredate)
新增数据
INSERT INTO A
(id,name)
VALUES
(1,'zs')
字段不用于表中的字段顺序一致,也不用全部写出来,根据需求去写,但是值的顺序和个数必须与上面的列出来的字段一致。
修改数据
UPDATE A SET
salary=6000,
gender='F'
WHERE id=1
如果不写where,就会把表中所有的记录都修改
数据库中的赋值就是’=’,这里跟Java不一样
删除数据
DELETE FROM A WHERE id=1
删除数据一般也要添加where条件,否在就会删除整张表的数据.
TRUNCATE是清空表操作,它是DDL,所有是不会受事务控制的,它的清空操作一旦执行就真的执行了,而且它的删除是比DELETE快很多的