Oracle --- 表索引替代变量数据库事务
Posted 劳埃德·福杰
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle --- 表索引替代变量数据库事务相关的知识,希望对你有一定的参考价值。
1.表
存储的基本单元 ,由行和列组成
命名规则: 必须以一个 字母开始,仅能包括字符: A–Z, a–z, 0–9, _, $, #
查看表
select table_name from user_tables; //当前用户的表
select table_name from all_tables; //所有用户的表
// Sys以dba身份登陆之后查看
select table_name from dba_tables; //包括系统表
创建表
CREATE TABLE dept
(deptno NUMBER(2),
dname VARCHAR2(14),
loc VARCHAR2(13));
确认创建的结果
DESCRIBE mydept
为某个列指定一个 默认值 的语法格式 :
… hiredate DATE DEFAULT SYSDATE, …
使用 CREATE TABLE 语句和 AS 子查询选项来创建一个表
CREATE TABLE dept30
AS
SELECT empno, ename, sal*12 ANNSAL, hiredate
FROM emp
WHERE deptno = 30;
修改表
// 增加一列
ALTER TABLE dept30
ADD (job VARCHAR2(9));
// 更改一个现存列的数据类型、长度以及默认值
ALTER TABLE dept30
MODIFY (ename VARCHAR2(15));
// 丢弃一个表中不再需要的列
ALTER TABLE dept30
DROP COLUMN job;
// 增加新行INSERT
INSERT INTO dept (deptno, dname, loc)
VALUES (50, 'DEVELOPMENT', 'DETROIT');
// 插⼊带有空值的⾏(直接空着不填)
INSERT INTO dept (deptno, dname)
VALUES (60, 'MIS');
// 插⼊带有空值的⾏(指明null)
INSERT INTO dept
VALUES (70, 'FINANCE', NULL);
// 也可以利用⼦查询插入数据
// 更改表中现有的行UPDATE
UPDATE emp
SET deptno = 20
WHERE empno = 7782;
// 用多列⼦查询进⾏修改
UPDATE emp
SET (job, deptno)= (SELECT job, deptno
FROM emp
WHERE empno = 7499)
WHERE empno = 7698;
// 从一个表中删除掉现有的行 DELETE
DELETE FROM department
WHERE dname = 'DEVELOPMENT';
// 删除表中所有的数据行
DELETE FROM department;
// 基于另一个表来删除数据⾏
DELETE FROM employee
WHERE deptno = (SELECT deptno
FROM dept
WHERE dname ='SALES');
将表置为 只读模式
ALTER TABLE mydept READ ONLY;
// 改回读写模式
ALTER TABLE mydept READ WRITE;
截断表
释放表所占用的磁盘存储空间,不能对该操作回滚
用 DELETE 语句来做相同的操作 , 不过 DELETE 并不立即释放磁盘空间 , 并且可以回滚
TRUNCATE TABLE mydept;
删除表
表中所有的 数据 和 结构都被删除了,不能回滚
DROP TABLE dept30;
为一个表或表中的某一列增加注释
COMMENT ON TABLE emp
IS 'Employee Information';
COMMENT ON COLUMN emp.empno
IS ‘empno’;
改变一个对象的名称
RENAME dept TO department;
2.索引
入索引的目的 : 依靠索引来快速定位数据,减少磁盘 I/O 的次数,加快查询的速度
索引是独立于表的数据库对象
自动创建 : 在创建表时 , 若指定了 PRIMARY KEY 或者 UNIQUE 约束 , 将自动创建唯一索引 UNIQUE INDEX
手动创建 : 用户可以在一列或多列上用 CREATE INDEX语句创建
创建索引
CREATE INDEX emp_ename_idx
ON emp(ename);
查看索引
USER_INDEXES 数据字典包含用户创建的索引的名字和它唯一性等信息
USER_IND_COLUMNS 数据字典包含用户创建的索引的名字和 索引所基于的列 等信息
SELECT index_name, index_type, table_name, uniqueness
FROM user_indexes;
SELECT index_name, table_name, column_name, column_position
FROM user_ind_columns
WHERE table_name='EMP';
删除索引
DROP INDEX index;
3.替代变量
用来实现交互式报表,可以实时输入查询的值
使用 SQL*Plus 替代变量来暂时保存值:单个( & ) 符号、两个 ( && ) 符号
SELECT empno, ename, sal, deptno
FROM emp
WHERE empno = &employee_num;
使⽤ SET VERIFY 命令:显示用某个具体值替换变量名之前和之后的命令文本
用 单引号 将替换变量中的日期和字串值括起来
SELECT ename, deptno, sal*12
FROM emp
WHERE job='&job_title';
使用带有两个&的替代变量使得该变量可以 重复使用, 而不必在每次使用时提醒用户输入
SELECT empno, ename, job, &&column_name
FROM emp
ORDER BY &column_name;
重新输入刚才的 SQL 语句 , 并没有任何提示而是直接产生结果,因为系统已经记住了第1 1 次输入的值
如果想改变这一替代变量的值 , 可以使用 UNDEFINE 变量名 即可取消这个变量
使用DEFINE定义替代变量(只能用来创建 CHAR 类型的替代变量)
DEFINE v_joba=ANALYST
SELECT empno, ename, job
FROM emp
WHERE job='&v_joba'
ORDER BY job;
DEFINE 替代变量名= 变量值 // 创建一字符型的替代变量
DEFINE 替代变量名 // 显示替代变量的值及其数据类型
DEFINE // 显示所有的替代变量
使用ACCEPT定义替代变量
// 当接收用户输入时,创建可定制的用户提示
ACCEPT v_jobb PROMPT 'Please Input the job:'
SELECT ename, sal, job FROM emp
WHERE job=UPPER('&v_jobb')
ORDER BY sal;
4.数据库事务
一个逻辑上的整体 , 必须或者全部完成 , 或者全部放弃的操作的集合 。
可以包含下列语句: 对数据做出一致性修改的 DML 语句、一个 DDL 语句、一个 DCL 语句
使用 ROLLBACK 语句丢弃所有的数据改变:ROLLBACK;
在并发事务之间, 为阻止可能产生的破坏性相互影响,Oracle会加锁
以上是关于Oracle --- 表索引替代变量数据库事务的主要内容,如果未能解决你的问题,请参考以下文章