78 阅读5分钟

[TOC]

# 必须具备创建表的权限、一定的存储空间
create table 表名(
    列名 数据类型 约束,
	列名 数据类型 约束,
	... ...
); 
# 示例:
create table student(
	sno number primary key,
	sname varchar2(50) not null,
	sbirth date,
	sgrade number(2) foreign key  references  dept(deptno) ,
	ssex char(5) check(ssex='男' or ssex='女'),
	stel char(11),
	sid varchar2(18) unique,
	smail varchar2(30)
);


CREATE TABLE 表名 AS SELECT ... FROM...; 
CREATE TABLE 表名(列名, 列名...) AS SELECT ... FROM...; 
# 示例:
CREATE TABLE dept10
AS
SELECT empno, ename, sal+1000 newSalary
FROM emp WHEREdeptno=10; 

同义词 (别名)

是指向数据库对象(如:表、视图、序列、存储过程等) 的数据库指针。

相当于一个别名

好处

  • 可以简化对数据库对象的访问;
  • 方便对其他用户表的访问;
  • 简化过长的对象名称;
  • 节省大量的数据库空间,对不同用户的操作同一张表没 有多少差别;
  • 扩展的数据库的使用范围,能够在不同的数据库用户之 间实现无缝交互;
  • 同义词可以创建在不同一个数据库服务器上,通过网络 实现连接;
CREATE [PUBLIC] synonym 同义词
FOR [schema.]对象名; 

CREATE  synonym em FOR emp; 


# PRIVATE 是在指定的方案中创建的,并且只允许拥有它的方案访问
# PUBLIC 由PUBLIC方案所拥有,所有的数据库方案都可以引用他们 方案都可以引用他们

列 (字段)

ALTER TABLE 表名 ADD (列名 数据类型[DEFAULT 默认值] [,列名 数据类型]...); 
ALTER TABLE emp add (age number(8,2) DEFAULT 0);

约束

ALTER TABLE 表名 ADD [CONSTRAINT 约束名字] 约束类型 (受约束影响的列的名字); 

# 为emp的字段id添加名为emp_fk的,参照的是dept的deptno的数据
ALTER TABLE emp add CONSTRAINT emp_fk FOREIGN KEY (id) REFERENCES dept (deptno) ON DELETE CASCADE;

注:无ON DELETE CASCADE 或 ON DELETE SET NULL选项,当附表中的行被删除时,如果父表中的行在子表中被引用,则提 示不能被删除。

事务保存点

如果在一个事务内,想要回滚到指 定位置,不是回滚到事务的起始点,可以通过保存点(SAVEPOINT)来实现

savepoint savepoint_name;

# 回滚到指定保存点
rollback to savepoint_name; 

视图

CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW 视图名称 [(列名[, column]...)]
AS 完整的select语句
[WITH CHECK OPTION [CONSTRAINT 约束名]]
[WITH READ ONLY]

# 使用了函数(avg等函数)的视图需要用别名
CREATE VIEW dd as select avg(..) avgnum ,.... from ...;

# 也可以这样定义别名,要对应select的位置
CREATE VIEW dd(avgnum) as select avg(..) .... from ...;



# OR REPLACE:如果创建的视图已经存在,则修改原视图的定义。
# FORCE:不管视图所基于的表是否存在,都会创建该视图。
# NOFORCE:只有视图所基于的表存在,才会创建该视图。
# WITH CHECK OPTION:一个约束条件,通过视图所插入或修改的数据行必须 满足视图所定义的查询;
# CONSTRAINT:增加约束
# WITH READ ONLY:确保在该视图上不能进行任何DML操作(一般不用,都会默认视图用来查,并不会用它来增删改)

# 注意:列名的数量必须和视图所对应查询语句的列数量相等

序列

序列是按照一定规则能自动增加/减少数字的一种数据库对 象。

通常可以使用序列自动地生成主键值。

CREATE SEQUENCE [schema.] 序列名
[INCREMENT BY n]	# 序列连续两个值之间的间隔n,默认为1
[START WITH n]	# 序列起始值n该项省略起始值为1
[MAXVALUE n | NOMAXVALUE]
[MINVALUE n | NOMINVALUE]
[CYCLE | NOCYCLE]	# 表示序列在达到最大值或最小值之后是否继续产生序列值,NOCYLE表示不再产生,NOCYLE是默认选项。
[CACHE n | NOCACHE];	# 表示序列值被服务器预先分配并存储在内存中,NOCACHE表示不预先分配并存储,CACHE 20是默认选项

# MAXVALUE n :序列最大值;
# MINVALUE n:序列最小值;
# NOMINVALUE:指定序列无最小值  

索引

  • 自动创建: 当有PRIMARY KEY 或者UNIQUE 约束时,数据库会自动创建一个索引;

  • 手动创建: 用户使用创建索引语法来进行创建;

CREATE [ UNIQUE|BITMAP] index 索引名称
ON 表名 (列名1 ASC|DESC, 表达式 ASC|DESC,…) [REVERSE];

# 建议索引命名格式:idx_表名_列名 

适合创建索引情况

  • 表数据量很大
  • 要查询的结果集在2%-4%左右
  • 经常用来做WHERE条件中的列或者多表连接的列
  • 查询列的数据范围分布很广
  • 查询列中包含大量的NULL值因为空值不包含在索引中

不适合创建索引情况

  • 数据量很小的表
  • 在查询中不常用来作为查询条件的列
  • 频繁更新的表
  • 索引列作为表达式的一部分被使用时,比如常查 询的条件是SALARY*12,此时在SALARY列上创建索引是没有效果的
  • 查询条件中有单行函数时,用不上索引 查询条件中有单行函数时,用不上索引

索引缺点

  • 占用空间;
  • 降低DML的操作速度;

插入数据

插入数据之前必须有相应的权限,并且要给表的所属用户设置表空间并分配一定的配额。

insert into 表名 (列名列表) values (值列表)

# 如果省略列名列表,则默认包括所有列。
# 字符和日期类型数据必须要用单引号括起来。

insert into 表名 (列名列表)
子查询

插入日期型数据示例

INSERT INTO 表名 VALUES (2296,'AROMANO','SALESMAN',7782,TO_DATE('1997-2-3','YYYY-M-DD'),1300, NULL, 10); 

# 月份为...月的时候,用mon
insert into student values('A001','张三','男',to_date('01-5月-05','yy-mon-dd'),100,1);

# 当要插入的日期格式为‘2000年1月1日’时
insert into student values('A001','张三','男',to_date('2000年1月1日','yyyy"年"m"月"d"日"'),100,1);
  • 注意:

    如果没有指定年份而是只给了第几年,则默认会是当前系统的年份。

    例如:你想的是1988年但是只给了88,那么Oracle将默认会是2088