Oracle – Oracle SQL(1)

Oracle – Oracle SQL(1)

1. 简介

(1) SQL : Structured Query Language,结构化查询语言,专门用于数据存取、数据更新及数据库管理等操作。

(2) Oracle SQL

DDL: Data Define Language

数据定义语言

包括CREATE、 ALTERDROPTRUNCATECOMMENTRENAME等命令

DML: Data Manipulate Language

数据操纵语言

包括SELECTINSERTUPDATE、 DELETE、 MERGE、 CALL、 EXPLAIN PLAN、 LOCK TABLE等命令

DQL: Data Query Language

数据查询语言

包括基本查询ORDER BY子句GROUP BY子句等

TCL: Transaction Control Language

事务控制语言

包括COMMIT、 SAVEPOINTROLLBACK、 SET TRANSACTION命令

DCL: Data Control Language

数据控制语言

包括GRANT、 REVOKE等命令

 

2. SQL基本知识

(1) SQL中的

● 候选码:CANDIDATE KEY,在关系模式R(U)中,KR的一个属性或者一组属性,若K能唯一标识一个元,则K为关系模式R的候选码;

 

● 主键:PRIMARY KEY,表中单个属性或多个属性组合,其值能唯一地标识表中一行记录,主键是候选码集合中的一个元素,只能拥有一个主键

 

● 外键:FOREIGN KEY关系模式R中属性或属性组X并非R的候选码,但X是另一个关系模式的候选码,则称XR的外部码,也称外键;

 

3. Oracle SQL

(1)创建表(DDL)

● 语法:

CREATE TABLE table_name

(

field_1  field_1_type,

field_2  field_2_type,

……

field_n  field_n-type

);

 

(2)创建表约束(DDL)

● 注意:Oracledefault是一个值,而SQL Serverdefault是一个约束。大括号表示内容可选。

 

● 创建主键约束

CREATE TABLE table_name

(

field_1  field_1_type  {CONSTRAINT constraint_name} PRIMARY KEY,

field_2  field_2_type,

……

field_n  field_n-type

);

或者

CREATE TABLE table_name

(

field_1  field_1_type,

field_2  field_2_type,

……

field_n  field_n-type

);

ALTER TABLE table_name ADD CONSTRAINT constraint_name PRIMARY KEY(field_1);

CREATE TABLE user_info

(

user_id VARCHAR2(20) PRIMARY KEY,

user_passwd VARCHAR2(20),

state_id NUMBER

);

或者

CREATE TABLE user_info

(

user_id VARCHAR2(20),

user_passwd VARCHAR2(20),

state_id NUMBER

);

ALTER TABLE user_info ADD CONSTRAINT pk_userinfo PRIMARY KEY(user_id);

 

 

● 创建外键约束

CREATE TABLE table_name

(

field_1  field_1_type,

field_2  field_2_type {CONSTRAINT constraint_name} REFERENCES foreign_table_name(field),

……

field_n  field_n-type

);

或者

CREATE TABLE table_name

(

field_1  field_1_type,

field_2  field_2_type,

……

field_n  field_n-type

);

ALTER TABLE table_name ADD CONSTRAINT constraint_name FOREIGN KEY(foreign_key_field) REFERENCE foreign_table_name(field);

 

CREATE TABLE state

(

state_id NUMBER PRIMARY KEY,

state_name VARCHAR2(20)

);

CREATE TABLE user_info

(

user_id VARCHAR2(20) PRIMARY KEY,

user_passwd VARCHAR2(20),

state_id NUMBER CONSTRAINT fk_userinfo_state REFERENCES state(state_id)

);

或者

CREATE TABLE user_info

(

user_id VARCHAR2(20) PRIMARY KEY,

user_passwd VARCHAR2(20),

state_id NUMBER

);

ALTER TABLE user_info ADD CONSTRAINT fk_userinfo_state FOREIGN KEY(state_idREFERENCES state(state_id);

 

● 创建非空约束

CREATE TABLE table_name

(

field_1  field_1_type,

field_2  field_2_type {CONSTRAINT constraint_name} NOT NULL,

……

field_n  field_n-type

);

或者

CREATE TABLE table_name

(

field_1  field_1_type,

field_2  field_2_type NOT NULL,

……

field_n  field_n-type

);

 

或者

CREATE TABLE table_name

(

field_1  field_1_type,

field_2  field_2_type,

……

field_n  field_n-type

);

ALTER TABLE table_name MODIFY (field_name NOT NULL);

CREATE TABLE user_info

(

user_id VARCHAR2(20),

user_passwd varchar2(20) CONSTRAINT notnull_userpasswd NOT NULL,

state_id NUMBER

);

或者

CREATE TABLE user_info

(

user_id VARCHAR2(20),

user_passwd varchar2(20),

state_id NUMBER

);

ALTER TABLE user_info MODIFY (user_passwd NOT NULL);

 

● 创建唯一约束

CREATE TABLE table_name

(

field_1  field_1_type,

field_2  field_2_type  {CONSTRAINT constraint_name}   UNIQUE,

……

field_n  field_n-type

);

或者

CREATE TABLE table_name

(

field_1  field_1_type,

field_2  field_2_type,

……

field_n  field_n-type

);

ALTER TABLE table_name ADD CONSTRAINT constraint_name UNIQUE(field_name);

CREATE TABLE dog

(

dog_id NUMBER,

dog_name VARCHAR2(20) CONSTRAINT un_dogname UNIQUE

);

或者

CREATE TABLE dog

(

dog_id NUMBER,

dog_name VARCHAR2(20)

);

ALTER TABLE dog ADD CONSTRAINT un_dogname UNIQUE(dog_name);

 

● 创建检查约束

CREATE TABLE table_name

(

field_1  field_1_type,

field_2  field_2_type {CONSTRAINT constraint_name} CHECK(judge_condition),

……

field_n  field_n-type

);

或者

CREATE TABLE table_name

(

field_1  field_1_type,

field_2  field_2_type,

……

field_n  field_n-type

);

ALTER TABLE table_name ADD CONSTRAINT constraint_name CHECK(judge_condition);

CREATE TABLE pig

(

pig_id NUMBER CONSTRAINT ck_pigid CHECK(pig_id>=0),

pig_name VARCHAR2(20)

);

或者

CREATE TABLE pig

(

pig_id NUMBER,

pig_name VARCHAR2(20)

);

ALTER TABLE pig ADD CONSTRAINT ck_pigid CHECK(pig_id>=0);

 

(3) 删除表(DDL)

DROP TABLE table_name CASCADE CONSTRAINTS

说明:如果表t1的外键在表t2中,则删除t2的时候使用DROP TABLE t2

则系统提示:ORA-02449:表中的唯一/主键被外键引用。若使用DROP TABLE t2 CASCADE CONSTRAINTS,则删除t1的外键约束,然后删除t2;注意此命令不能回滚

 

(4) 删除表约束

ALTER TABLE table_name DROP CONSTRAINT constraint_name

 

(5) 查看表结构

● sqlplusDESC table_name

● plsql devAll objects è Tables è table_name è 右键查看

 

(6) 修改表

● 表改名:ALTER TABLE src_table_name RENAME TO dst_table_name

● 删除列:ALTER TABLE table_name DROP COLUMN column_name;

● 添加列:

ALTER TABLE table_name ADD

(

field_1  field_1_type field_1_constraint,

field_2  field_2_type field_1_constraint,

……

field_n  field_n-type field_1_constraint

 

);

● 修改列:类型、大小、默认值、默认空约束

ALTER TABLE table_name MODIFY

(

field_1  field_1_type field_1_constraint,

field_2  field_2_type field_1_constraint,

……

field_n  field_n-type field_1_constraint

);

● 修改列:添加约束和删除约束

参见上文。

● 修改列:关闭约束和打开约束

不想删除约束但又不想他现在其作用,这时可以采用DISABLE来完成此工作;我们还可以采用CASCADE关键字来把相互引用的约束一起级联关闭;可以通过ENABLE关键点来开启约束,使得约束有效

ALTER TABLE table_name  DISABLE CONSTRAINT constraint_nameCASCADE;

ALTER TABLE table_name  ENABLE CONSTRAINT constraint_nameCASCADE;

● 修改列:列名修改

ALTER TABLE table_name RENAME COLUMN src_column_name TO dst_column_name;

 

(7给表加注释

● 给表加注释

COMMENT ON TABLE table_name IS ‘comment_string’

● 给列加注释

COMMENT ON COLUMN  table_name.column_name  IS  ‘comment_string’;

 

(8)TRANCATE表 

TRUNCATE TABLE table_name; 

●TRANCATE和 DELETE只删除数据不删除表的结构(定义)对快速、无LOG记录的方法,它等同于不含WHERE子句的DELETE语句,至少表面上看来功能上相同,但TRANCATE TABLE的速度更快,并且使用更少的SYSTEM RESOURCETRANCATION LOG RESOURCE

● TRANCATE语句所使用的LOG TABLESPACE较少DELETE语句每删除一行RECORD,都需要在LOG中为每一个所删除的行进行记录,但是TRANCATE是通过释放用于STORE DATA的数据PAGE来删除数据。

● TRANCATE语句所使用的LOCK较少DELETE语句始终锁定TABLE中的各行,而TRANCATE始终锁定TABLE本身和PAGE本身,不是TABLE中的各行。

●  TRANCATE语句通常不会在所删除的TABLE中留有空页。DELETE语句执行后,TABLE中仍然会保留空页,而且必须至少使用一个排他表锁,LCK_M_X,才能释放堆中的空表,否则执行完DELETE操作后,表或堆中会包含相当多的空页或空表,而且对于INDEXDELETE操作同样会留下一些空页。而TRANCATE操作后,只是会在DB而不是TABLE中保留一些相关的信息。

●  TRANCATE语句不可回滚、触发器中没有TRUNCATE,即这个语句无法触发任何操作

●  TRANCATE和 DELETE只删除数据不删除表的结构(定义)DROP语句将删除表的结构被依赖的约束(CONSTRAINT),触发器(TRIGGER),索引(INDEX); 依赖于该表的存储过程/函数将保留,但是变为INVALID状态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值