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 --- 表索引替代变量数据库事务的主要内容,如果未能解决你的问题,请参考以下文章

数据库小技能:Oracle基础之关系

Oracle的优化

oracle11g,18存储结构:暂时表,手工条带化,表/索引迁移表空间,删除表,外部表

oracle用WHERE替代ORDER BY

6.2临时表--Oracle模式对象

6.6笔记-数据库的 事务视图索引备份恢复数据库