--创建表
CREATE [GLOBAL TEMPORARY] TABLE table_name(
coloum_name TYPE [CONSTRAINT constraint_def DEFAULT default_exp]
[,coloum_name TYPE [CONSTRAINT constraint_def DEFAULT default_exp] ...]
)
[ON COMMIT {DELETE | PRESERVE} ROWS]
TABLESPACE tab_space;
/*
GLOBAL TEMPORARY 说明该表的行是临时表,这种表就称为临时表。行的有效性由on commit子句指定
ON COMMIT 控制临时表中行的有效期。DELETE 说明这些行在事务的末尾要被删除。PRESERVE 说明
这些行要在会话的末尾要被删除。
TABLESPACE 为该表指定表空间。若没有指定,该表就存储在用户的默认表空间。
*/
CREATE TABLE Order_Status2(
ID INTEGER CONSTRAINT Order_Status2_pk PRIMARY KEY,
status VARCHAR2(10),
last_modified DATE DEFAULT SYSDATE
); CREATE GLOBAL TEMPORARY TABLE Order_Status_temp(
ID INTEGER,
status VARCHAR2(10),
last_modified DATE DEFAULT SYSDATE
)
ON COMMIT PRESERVE ROWS; INSERT INTO Order_Status_temp
VALUES(1,'New',SYSDATE); SELECT * FROM Order_Status_temp; --获得有关表的信息
--对表执行 describe 命令。
--查询user_tables
SELECT * FROM user_tables;
SELECT * FROM all_tables; SELECT table_name, tablespace_name, temporary
FROM user_tables
WHERE table_name IN ('ORDER_STATUS2', 'ORDER_STATUS_TEMP'); --获取表的列的信息
SELECT * FROM user_tab_columns;
SELECT * FROM all_tab_columns; SELECT column_name, data_type, data_length, data_precision, data_scale
FROM user_tab_columns
WHERE table_name = 'PRODUCTS'; --修改表
--alter table
/*
添加、修改或删除列
添加或删除约束
启用或禁用约束
*/
--添加列
CREATE TABLE Order_Status2 AS SELECT * FROM Order_Status; ALTER TABLE Order_Status2 ADD modified_by INTEGER; ALTER TABLE Order_Status2 ADD initially_created DATE DEFAULT SYSDATE NOT NULL; --修改列
/*
修改列的长度
修改数字列的精度
修改列的数据类型
修改列的默认值
*/
--修改列的长度
--只有在表中没有行或这列为空值时才可以减小列的长度
ALTER TABLE Order_Status2 MODIFY status VARCHAR2(15); --修改数字列的精度
--只有在表中没有行或这列为空值时才可以减小列的精度
ALTER TABLE Order_Status2 ADD ID NUMBER(4);
ALTER TABLE Order_Status2 MODIFY id NUMBER(5); --修改列的数据类型
--如果表中没有或这列为空值时,可以修改为任何类型,否则只能修改为兼容的数据类型
ALTER TABLE Order_Status2 MODIFY status char(15); --修改列的默认值
ALTER TABLE Order_Status2 MODIFY last_modified DEFAULT SYSDATE - 1; --删除列
ALTER TABLE Order_Status2 DROP COLUMN initially_created; --添加约束 ----------------------------------------------------------------------------------------------
约束 约束类型 意义
----------------------------------------------------------------------------------------------
CHECK C 指定一列或一组列的值必须满足特定的约束
----------------------------------------------------------------------------------------------
NOT NULL C 指定一列不允许存储空值。这实际上是一种强制的check约束
----------------------------------------------------------------------------------------------
PRIMARY KEY P 指定表的主键。主键由一列或多列组成。它唯一标识了表的一行
----------------------------------------------------------------------------------------------
FOREIGN KEY F 指定表的外键。外键引用另外一个表中的一列,在自引用情况下
则引用本表中的一列
----------------------------------------------------------------------------------------------
UNIQUE U 指定一列或一组列只能存储唯一的值
----------------------------------------------------------------------------------------------
CHECK OPTION V 指定对视图执行的DML操作必须满足子查询的条件。
----------------------------------------------------------------------------------------------
READ ONLY O 指定视图是只读的
---------------------------------------------------------------------------------------------- --(1)添加check约束
ALTER TABLE Order_Status2 ADD CONSTRAINT order_status2_status_ck
CHECK (status IN ('PLACED','PENDING','SHIPPED')); INSERT INTO order_status2
(status, last_modified, modified_by)
VALUES
('', SYSDATE, 2); ALTER TABLE Order_Status2 ADD CONSTRAINT order_status2_id_ck
CHECK (ID > 0); --(2)添加not null约束
ALTER TABLE Order_Status2 MODIFY status CONSTRAINT order_status2_status_nn NOT NULL; ALTER TABLE Order_Status2 MODIFY modified_by CONSTRAINT order_status2_modified_by_nn NOT NULL; ALTER TABLE Order_Status2 MODIFY last_modified NOT NULL; SELECT * FROM Order_Status2; INSERT INTO Order_Status2
VALUES(1,'PLACED',SYSDATE,NULL); --(3)添加primary key约束
CREATE TABLE table_name(
col_name TYPE PRIMARY KEY,
...
); CREATE TABLE table_name(
col_name TYPE CONSTRAINT cons_name PRIMARY KEY,
...
); ALTER TABLE table_name ADD CONSTRAINT col_name_pk PRIMARY KEY(col_name); CREATE TABLE t_pk(pid INT);
ALTER TABLE t_pk ADD CONSTRAINT pid_pk PRIMARY KEY(pid); --(4)添加foregin key约束
ALTER TABLE Order_Status2 DROP COLUMN modified_by; SELECT * FROM Order_Status2;
SELECT * FROM employees; ALTER TABLE employees ADD CONSTRAINT employees_id_fk PRIMARY KEY(employee_id); --没有存在列,加入外键
ALTER TABLE Order_Status2 ADD CONSTRAINT Order_Status2_modified_by_fk modified_by
REFERENCES employees(employee_id); --存在列,加入外键
ALTER TABLE Order_Status2 ADD CONSTRAINT Order_Status2_modified_by_fk FOREIGN KEY(modified_by)
REFERENCES employees(employee_id); SELECT * FROM Order_Status2; --外键对插入的影响
INSERT INTO Order_Status2
VALUES(3,'PLACED',SYSDATE,4);
INSERT INTO Order_Status2
VALUES(2,'PLACED',SYSDATE,4);
INSERT INTO Order_Status2
VALUES(4,'PLACED',SYSDATE,3); --外键对修改的影响
SELECT * FROM Order_Status2;
SELECT * FROM employees; UPDATE Order_Status2
SET modified_by = 4
WHERE order_status_id = 2; --外键对删除的影响
DELETE employees
WHERE employee_id = 4; --使用一个带有foreign key约束的on delete cascade子句,可以指定在父表中删除一行记录时,子表中匹配的所有行
--也都将被删除。
ALTER TABLE Order_Status2 DROP COLUMN modified_by; ALTER TABLE Order_Status2 ADD CONSTRAINT Order_Status2_modified_by_fk modified_by
REFERENCES employees(employee_id) ON DELETE CASCADE; --当从employees表中删除一行记录时,Order_Status2表所匹配的行也将都被删除。
DELETE employees
WHERE employee_id = 4; --使用一个带有foreign key约束的on delete set null子句,可以指定在父表中删除一行记录时,子表中匹配行的外键
--将被设置为空值
ALTER TABLE Order_Status2 DROP COLUMN modified_by; ALTER TABLE Order_Status2 ADD CONSTRAINT Order_Status2_modified_by_fk modified_by
REFERENCES employees(employee_id) ON DELETE SET NULL; --当从employees表中删除一行记录时,Order_Status2表所匹配的行所在的外键列都被置为null。
DELETE employees
WHERE employee_id = 4; --(5)添加unique约束
ALTER TABLE Order_Status2 ADD CONSTRAINT Order_Status2_status_uq UNIQUE(status); --删除约束
ALTER TABLE Order_Status2 DROP CONSTRAINT Order_Status2_status_uq; --禁用约束
ALTER TABLE Order_Status2 ADD CONSTRAINT Order_Status2_status_uq UNIQUE(status) DISABLE; ALTER TABLE Order_Status2 DISABLE CONSTRAINT order_status2_modified_by_nn; --启用约束
--表中的所有行必须满足约束条件
ALTER TABLE Order_Status2 ENABLE CONSTRAINT Order_Status2_status_uq;
--对新数据启用约束
ALTER TABLE Order_Status2 ENABLE NOVALIDATE CONSTRAINT Order_Status2_status_uq; --延迟约束
--deferred constraint是在事务被提交时强制执行的约束。
--在添加约束时,可以使用deferrable子句指定约束是延迟约束。
--在添加延迟约束时,可以将其标识为initally immediate 或initally deferred。
--initally immediate每次向表中添加数据、修改数据或删除数据时都要检查这个约束
--initally deferred只有在事务被提交时才会检查这个约束。
ALTER TABLE Order_Status2
DROP CONSTRAINT Order_Status2_status_uq; ALTER TABLE Order_Status2 ADD CONSTRAINT Order_Status2_status_uq UNIQUE(status)
DEFERRABLE INITIALLY DEFERRED; INSERT INTO Order_Status2
VALUES(3,'Order placed',SYSDATE); --若向Order_Status2表中添加行,那么只有在执行commit时,才会对Order_Status2_status_uq约束进行检查 --获取约束的信息
SELECT * FROM User_Constraints;
SELECT * FROM all_Constraints; SELECT constraint_name, constraint_type, status, deferrable, deferred
FROM user_constraints
WHERE table_name = 'ORDER_STATUS2'; --获取有关列约束的信息
SELECT * FROM User_Cons_Columns;
SELECT * FROM all_Cons_Columns; SELECT constraint_name, column_name
FROM user_cons_columns
WHERE table_name = 'ORDER_STATUS2'; SELECT ucc.column_name, ucc.constraint_name, uc.constraint_type, uc.status
FROM user_constraints uc, user_cons_columns ucc
WHERE uc.table_name = ucc.table_name
AND uc.constraint_name = ucc.constraint_name
AND ucc.table_name = 'ORDER_STATUS2'; --重命名表
RENAME Order_Status2 TO order_state; RENAME order_state TO Order_Status2; --向表中添加注释
--注释有助于记住表或列的用途
COMMENT ON TABLE Order_Status2 IS 'Order_Status2 stores the state of an order'; COMMENT ON COLUMN Order_Status2.last_modified
IS 'last_modified stores the date of the order was modified last'; --获取表的注释
SELECT * FROM user_tab_comments WHERE table_name = 'ORDER_STATUS2'; --获取列的注释
SELECT * FROM user_col_comments WHERE table_name = 'ORDER_STATUS2'; --截断表
TRUNCATE TABLE Order_Status2; --删除表
DROP TABLE Order_Status2; --创建序列
CREATE SEQUENCE seq_name
[START WITH start_num]
[INCREMENT BY increment_num]
[{MAXVALUE Maxvalue_num|nomaxvalue}]
[{MINVALUE Minvalue_num|Minvalue}]
[{CYCLE|nocycle}]
[{CACHE cache_name|NOCACHE}]
[{ORDER|NOORDER}]; START WITH start_num指定序列从哪个整数开始,默认值为1
INCREMENT BY increment_num指定序列每次增加的增量,默认值为1
MAXVALUE Maxvalue_num指定该序列的最大整数
MINVALUE Minvalue_num指定该序列的最小整数 CREATE SEQUENCE test_seq; CREATE SEQUENCE test2_seq
START WITH 10 INCREMENT BY 5
MINVALUE 10 MAXVALUE 20
CYCLE CACHE 2 ORDER; CREATE SEQUENCE test3_seq
START WITH 10 INCREMENT BY -1
MINVALUE 1 MAXVALUE 10
CYCLE CACHE 5; --获取序列的信息
SELECT * FROM User_Sequences;
SELECT * FROM All_Sequences; --使用序列
--序列生成一系列数字,一个序列中包含两个伪列currval nextval,可以分别用来获取该序列的当前值和下一个值。
--在检索序列的当前值之前,必须通过检索序列的下一个值对序列进行初始化。
--初始化后,则可以使用currval来获取该序列的当前值了。
SELECT test_seq.nextval FROM dual; SELECT test_seq.currval FROM dual; --使用序列来填充主键
CREATE TABLE Order_Status2(
ID INTEGER CONSTRAINT order_status2_pk PRIMARY KEY,
status VARCHAR2(10),
last_modified DATE DEFAULT SYSDATE
); CREATE SEQUENCE Order_Status2_seq NOCACHE; INSERT INTO Order_Status2(ID,status,last_modified)
VALUES (Order_Status2_seq.nextval,'PLACED',SYSDATE); INSERT INTO Order_Status2(ID,status,last_modified)
VALUES (Order_Status2_seq.nextval,'PENDING',SYSDATE); --删除序列
DROP SEQUENCE test3_seq; --索引
--创建索引
CREATE [UNIQUE]INDEX index_name ON table_name(column_name[,COLUMN_name ...])
TABLESPACE tab_space; /*
UNIQUE指定索引列中的值必须是唯一的
*/
SELECT customer_id, first_name, last_name
FROM customers
WHERE last_name = 'Brown'; CREATE INDEX customers_last_name_idx ON customers(Last_Name); CREATE UNIQUE INDEX customers_phone_idx ON customers(phone);
INSERT INTO customers VALUES (6, 'aa', 'bb', SYSDATE, '800-555-1214'); CREATE INDEX customers_first_last_name_idx ON employees(first_name,Last_Name); --获取索引的信息
SELECT * FROM user_indexes;
SELECT * FROM all_indexes; SELECT index_name, table_name, uniqueness, status
FROM user_indexes
WHERE table_name IN ('CUSTOMERS', 'EMPLOYEES'); --获取列索引的信息
SELECT * FROM User_Ind_Columns;
SELECT * FROM All_Ind_Columns; SELECT index_name, table_name, column_name
FROM user_ind_columns
WHERE table_name IN ('CUSTOMERS', 'EMPLOYEES'); --删除索引
DROP INDEX customers_first_last_name_idx; --视图
--创建视图
CREATE [OR REPLACE] [{FORCE|NOFORCE}] VIEW view_name
[(alias_name[,alias_name ...])] AS subquery
[WITH {CHECK OPTION | READ ONLY}] CONSTRAINT constraint_name]; /*
or replace 若视图存在则替换视图
force即使基表不存在也要创建视图
noforce若基表不存在,就不创建视图,为默认选项
alias_name为子查询中的表达式指定一个别名
subquery指定一个子查询,它对基表进行检索
with check option说明子查询检索的行才能被插入、修改或删除。
constraint_name指定with check option或read only约束的名称。
read only说明只能对基表中的行进行只读访问
*/ --简单视图,包含一个子查询,只从一个基表中检索数据
--复杂视图,包含一个子查询,从多个基表中检索数据,包含分组,函数调用等
--创建并使用简单视图
CREATE OR REPLACE VIEW cheap_products_view AS
SELECT * FROM products
WHERE price < 15; CREATE VIEW employees_view AS
SELECT employee_id,manager_id,first_name,last_name,title
FROM employees; --对视图进行select操作
SELECT product_id,NAME,price
FROM cheap_products_view; SELECT * FROM employees_view; --对视图进行insert操作
--只能对简单视图执行DML操作,复杂视图不支持DML操作
INSERT INTO cheap_products_view
(product_id, product_type_id, NAME, price)
VALUES
(13, 1, 'Western Front', 13.50); SELECT * FROM cheap_products_view; --没有with check option,可以插入、修改或删除子查询不能检索的行
INSERT INTO cheap_products_view
(product_id, product_type_id, NAME, price)
VALUES
(14, 1, 'Eastern Front', 16.50); SELECT * FROM cheap_products_view
WHERE product_id = 14; --没有选择的基表列被置为空值,salary为null
INSERT INTO employees_view
(employee_id, manager_id, first_name, last_name, title)
VALUES
(5, 1, 'Jeff', 'Jones', 'CTO'); SELECT * FROM employees
WHERE employee_id = 5; --创建具有check option约束的视图
--指定对视图的DML操作必须满足子查询的条件。
CREATE OR REPLACE VIEW cheap_products_view2 AS
SELECT * FROM products
WHERE price < 15
WITH OPTION CHECK CONSTRAINT cheap_products_view2_price; INSERT INTO cheap_products_view2
(product_id, product_type_id, NAME, price)
VALUES
(15, 1, 'Southern Front', 16.50); --创建具有read only约束的视图
--指定视图是只读的
CREATE OR REPLACE VIEW cheap_products_view3 AS
SELECT * FROM products
WHERE price < 15
WITH READ ONLY CONSTRAINT cheap_products_view3_read_only; INSERT INTO cheap_products_view3
(product_id, product_type_id, NAME, price)
VALUES
(16, 1, 'Northern Front', 19.50); --获取有关视图定义的信息
SELECT * FROM User_Views;
SELECT * FROM all_views; --获取有关视图约束的信息
SELECT constraint_name, constraint_type, status, deferrable, deferred
FROM user_constraints
WHERE table_name IN ('CHEAP_PRODUCTS_VIEW2', 'CHEAP_PRODUCTS_VIEW3'); --删除视图
DROP VIEW cheap_products_view3;

Oracle表的操作的更多相关文章

  1. ORACLE表空间操作实例

    本文主要介绍oracle表空间常见的操作实例,包括创建.查询.增加.删除.修改.表空间和数据文件常用的数据字典和动态性能视图包括v$dbfile.v$datafile.v$tempfile.dba_s ...

  2. oracle表的操作简述

    单表的操作!(代码完全可以用手工代替,写下来为了记忆)1.建立表create table HKB_TABLE_MODIFY(  NAME VARCHAR2(6),  AGE  VARCHAR2(3), ...

  3. oracle表空间操作语句

    1.查看所有表空间及表空间大小: select tablespace_name ,sum(bytes) / 1024 / 1024 as MB from dba_data_files group by ...

  4. Oracle表空间操作

    -- 查看表空间 SELECT tablespace_name, file_id, file_name, ), )||'M' total_space FROM dba_data_files ORDER ...

  5. Oracle 表空间操作

    -- 查询已有表空间 SELECT TABLE_SPACENAME FROM DBA_TABLESPACES; -- 创建表空间 CREATE TABLESPACE SPACE DATAFILE ‘E ...

  6. oracle表的操作SQL语句

    这篇文章的内容包括:表的増删改查,字段的増删改查,主键.外键.唯一.非空.默认约束的増删改   查看自己用户的所有表: select * from user_tab_comments;    www. ...

  7. Oracle 表删除操作

    删除表内容(dml):delete from 删除表结构(ddl):drop table xx 清空表(ddl):truncate table 清空整张表,不能回滚,不会产生大量日志文件: 表空间会得 ...

  8. oracle数据库误操作把表删除了,怎样恢复

    一:表的恢复 对误删的表,只要没有使用PURGE永久删除选项,那么从flash back区恢复回来希望是挺大的.一般步骤有:1.从flash back里查询被删除的表 select * from re ...

  9. Oracle重建表空间操作实例

    由于环境维护或者性能测试需要,经常需要对表空间进行重建操作.重建表空间操作主要分3中情况介绍,分别是业务表空间.临时表空间和回滚段表空间的重建. 重建业务表空间 由于业务规划要求,重建后的业务表空间名 ...

随机推荐

  1. LeetCode--283--移动0

    问题描述: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序. 示例: 输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 说明: 必须在原 ...

  2. Xmanager Power Suit 6.0.0009 最新版注册激活

    Xmanager Power Suit 6.0.0009 最新版注册激活 手工操作步骤Xmanger Power Suit 官方 其实有两种 .exe 文件,一个是用于试用的,在注册的时候不能直接输入 ...

  3. redis之数据类型以及使用

    1 redis数据类型 1. string类型: 字符串类型是 Redis 中最为基础的数据存储类型,它在 Redis 中是二进制安全的,也就是byte类型 最大容量是512M.2. hash类型: ...

  4. SQL SERVER 子查询使用Order By;按In排序

    [子查询]使用order by percent * from table order by id) a 这时发现结果没有按id排序,需要将100 percent 改成 99.999 percent 或 ...

  5. python记录_day27 tcp/ip五层模型

    ## 网络协议按照不同的功能分为多层,目前存在的模型有osi七层模型.tcp/ip五层和tcp/ip四层模型 我们主要用的是tcp/ip五层模型 那么每层的作用是什么呢,现在就从设计者的角度自下到上逐 ...

  6. 关于Warning: setState(...): Can only update a mounted or mounting component. This usually means you called setState() on an unmounted component. This is a no-op.的解决方案

    Warning: setState(...): Can only update a mounted or mounting component. This usually means you call ...

  7. apache配置一个域名读取多个路径代码(包括主干和分支)

    <VirtualHost *:80> ServerAdmin 651629095@qq.com DocumentRoot "C:/wamp/www/sms/trunk/publi ...

  8. Logstash 基础入门

    原文地址:Logstash 基础入门博客地址:http://www.extlight.com 一.前言 Logstash 是一个开源的数据收集引擎,它具有备实时数据传输能力.它可以统一过滤来自不同源的 ...

  9. 时间序列八: 以NASA之名: 卡尔曼滤波器

    目录 以NASA之名: 卡尔曼滤波器 引言 荣耀骑士 卡尔曼滤波器* 参考文献: 以NASA之名: 卡尔曼滤波器 'That's one small step for man,one giant le ...

  10. jackson实体转json时 为NULL不参加序列化的汇总

    首先加入依赖 <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson ...