oracle其它数据库对象(序列、索引、同义词)

/*

其它数据库对象

1.序列:提供有规律的数值

2.索引:提高查询的效率

3.同义词:给对象起别名

*/

--

--创建序列
CREATE SEQUENCE emp_sequence
INCREMENT BY 5 --每次增长5
START WITH 2 --从2开始增长
MAXVALUE 30 --提供的最大值
MINVALUE 1--提供的最小值
cycle --需要循环
NOCACHE --不需要缓存登录

/*
NEXTVAL 应在 CURRVAL 之前调用,否则会报CURRVAL 尚未在此会话中定义的错误
*/
--
SELECT emp_sequence.nextval FROM dual
--
SELECT emp_sequence.currval FROM dual

--
CREATE TABLE emp001
AS
SELECT employee_id, last_name, salary
FROM employees
WHERE 200 != 200
--
SELECT * 
FROM emp001
--
INSERT INTO emp001
VALUES(1, '张三', 8650.67)
--
INSERT INTO emp001
VALUES(2, '李四', 9630.57)

--使用序列
INSERT INTO emp001
VALUES(emp_sequence.nextval, '韦小宝', 7169.83)

--修改序列
ALTER SEQUENCE emp_sequence
INCREMENT BY 1 --每次增长1
NOCYCLE --不需要循环

/*
不能修改序列的初始值,否则会报错,改变序列的初始值只能通过删除序列之后重建序列的方法实现
*/
--修改序列的初始值
ALTER SEQUENCE emp_sequence
START WITH 5 --从5开始增长

--删除序列
DROP SEQUENCE emp_sequence

--

/*

序列在下列情况下出现裂缝:
1.回滚

2.系统异常

3.多个表同时使用同一序列 (最好不要多表共用一个序列)


*/

--
SELECT seq.SEQUENCE_NAME, seq.MIN_VALUE, seq.MAX_VALUE, seq.INCREMENT_BY, seq.LAST_NUMBER 
FROM user_sequences seq

/*

索引

*/

--创建索引


/*
自动创建:
在定义 PRIMARY KEY 或 UNIQUE 约束后系统自动在相应的列上创建唯一性索引
*/



/*
手动创建:
用户可以在其它列上创建非唯一的索引,以加速查询
*/

--创建索引
CREATE INDEX emp001_emp_id_index
ON emp001(employee_id)
--删除索引
DROP INDEX emp001_emp_id_index
--
/*
什么时候创建索引
以下情况可以创建索引:
列中数据值分布范围很广
列经常在 WHERE 子句或连接条件中出现
表经常被访问而且数据量很大 ,访问的数据大概占数据总量的2%到4%

*/

/*
什么时候不要创建索引
表很小
列不经常作为连接条件或出现在WHERE子句中
查询的数据大于2%到4%
表经常更新

*/

/*

同义词(简单的说,同义词其实就是给对象取别名)

*/

--使用sys用户登录后,执行下面的授予权限的语句
GRANT CREATE SYNONYM TO scott

--创建同义词
CREATE SYNONYM e FOR employees
--
SELECT * 
FROM e
--
SELECT * 
FROM employees

--删除同义词
DROP SYNONYM e
--

/*
总结   what——————————> why ——————————> how

1.表 table

2.视图 view

3.序列 sequence (序列通常用来生成主键)

4.索引 index

5.同义词 synonym

*/

/*

其它数据库对象-练习题

*/

--1.创建序列dept_id_seq,开始值为200,每次增长10,最大值为10000
--注意:它们之间没有,逗号,它们的顺序是没有影响的
CREATE SEQUENCE dept_id_seq
INCREMENT BY 10
START WITH 200 
MAXVALUE 10000
--使用序列向表dept02中插入数据
CREATE TABLE dept02
AS 
SELECT dept.department_id, dept.department_name 
FROM departments dept
WHERE 666 = 888
--
SELECT * 
FROM dept02
--
INSERT INTO dept02
VALUES(dept_id_seq.nextval, 'HR')
--
SELECT * 
FROM dept02

--删除序列
DROP SEQUENCE dept_id_seq
--

/*

其它数据库对象

1.序列:提供有规律的数值

2.索引:提高查询的效率

3.同义词:给对象起别名

*/

--

--创建序列
CREATE SEQUENCE emp_sequence
INCREMENT BY 5 --每次增长5
START WITH 2 --从2开始增长
MAXVALUE 30 --提供的最大值
MINVALUE 1--提供的最小值
cycle --需要循环
NOCACHE --不需要缓存登录

/*
NEXTVAL 应在 CURRVAL 之前调用,否则会报CURRVAL 尚未在此会话中定义的错误
*/
--
SELECT emp_sequence.nextval FROM dual
--
SELECT emp_sequence.currval FROM dual

--
CREATE TABLE emp001
AS
SELECT employee_id, last_name, salary
FROM employees
WHERE 200 != 200
--
SELECT *
FROM emp001
--
INSERT INTO emp001
VALUES(1, '张三', 8650.67)
--
INSERT INTO emp001
VALUES(2, '李四', 9630.57)

--使用序列
INSERT INTO emp001
VALUES(emp_sequence.nextval, '韦小宝', 7169.83)

--修改序列
ALTER SEQUENCE emp_sequence
INCREMENT BY 1 --每次增长1
NOCYCLE --不需要循环

/*
不能修改序列的初始值,否则会报错,改变序列的初始值只能通过删除序列之后重建序列的方法实现
*/
--修改序列的初始值
ALTER SEQUENCE emp_sequence
START WITH 5 --从5开始增长

--删除序列
DROP SEQUENCE emp_sequence

--

/*

序列在下列情况下出现裂缝:
1.回滚

2.系统异常

3.多个表同时使用同一序列 (最好不要多表共用一个序列)


*/

--
SELECT seq.SEQUENCE_NAME, seq.MIN_VALUE, seq.MAX_VALUE, seq.INCREMENT_BY, seq.LAST_NUMBER
FROM user_sequences seq

/*

索引

*/

--创建索引


/*
自动创建:
在定义 PRIMARY KEY 或 UNIQUE 约束后系统自动在相应的列上创建唯一性索引
*/

 

/*
手动创建:
用户可以在其它列上创建非唯一的索引,以加速查询
*/

--创建索引
CREATE INDEX emp001_emp_id_index
ON emp001(employee_id)
--删除索引
DROP INDEX emp001_emp_id_index
--
/*
什么时候创建索引
以下情况可以创建索引:
列中数据值分布范围很广
列经常在 WHERE 子句或连接条件中出现
表经常被访问而且数据量很大 ,访问的数据大概占数据总量的2%到4%

*/

/*
什么时候不要创建索引
表很小
列不经常作为连接条件或出现在WHERE子句中
查询的数据大于2%到4%
表经常更新

*/

/*

同义词(简单的说,同义词其实就是给对象取别名)

*/

--使用sys用户登录后,执行下面的授予权限的语句
GRANT CREATE SYNONYM TO scott

--创建同义词
CREATE SYNONYM e FOR employees
--
SELECT *
FROM e
--
SELECT *
FROM employees

--删除同义词
DROP SYNONYM e
--

/*
总结   what——————————> why ——————————> how

1.表 table

2.视图 view

3.序列 sequence (序列通常用来生成主键)

4.索引 index

5.同义词 synonym

*/

/*

其它数据库对象-练习题

*/

--1.创建序列dept_id_seq,开始值为200,每次增长10,最大值为10000
--注意:它们之间没有,逗号,它们的顺序是没有影响的
CREATE SEQUENCE dept_id_seq
INCREMENT BY 10
START WITH 200
MAXVALUE 10000
--使用序列向表dept02中插入数据
CREATE TABLE dept02
AS
SELECT dept.department_id, dept.department_name
FROM departments dept
WHERE 666 = 888
--
SELECT *
FROM dept02
--
INSERT INTO dept02
VALUES(dept_id_seq.nextval, 'HR')
--
SELECT *
FROM dept02

--删除序列
DROP SEQUENCE dept_id_seq
--

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值