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快很多的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值