2 数据定义语言 DDL
数据定义语言(Data Definition Language,DDL)用于定义数据库的结构,比如创建、修改或删除数据库对象。
注意:rollback回滚对于DDL无效。
Oracle中查看用户已创建的表为:
select * from user_tables
Oracle中查看用户定义的各种数据库对象:
select distinct object_type
from user_objects
Oracle中查看用户定义的表、视图、同义词和序列:
select *
from user_catalog
2.1 创建表 CREATE TABLE
表名和列名命名规则:
(1)必须以字母开头;
(2)必须在1-30个字符之间;
(3)必须只能包含A-Z,a-z,0-9,_,$,和#;
(4)必须不能和用户定义的其他对象重名;
(5)必须不能是Oracle的保留字。
例:$abc,2abc,_abc,a-b,a#d中正确的有:a#d。
2.1.1 创建表的第一种方式
create table 表名字 ( 列名1 该列类型,
列名2 该列类型,
列名3 该列类型,
……
)
例:
create table employees(
employee_id NUMBER(6)
first_name VARCHAR2(20)Y
last_name VARCHAR2(25)
email VARCHAR2(25)
phone_number VARCHAR2(20)Y
hire_date DATE
job_id VARCHAR2(10)
salary NUMBER(8,2)Y
commission_pct NUMBER(2,2)Y
manager_id NUMBER(6)Y
department_id NUMBER(4)Y
)
列中salary NUMBER(8,2)表示该数字型一共8位,其中有2位是小数。
2.1.2 创建表的第二种方式(依托于现有的表)
依托于现有的表,不仅导入原有表的结构,同时导入原有表的数据。
create table 表名字
as
select 列名1,列名2,列名3,列名4
from 已有的表
例1:利用子查询创建表myemp,该表中包含employees表的employee_id(id),last_name(name),salary(sal),email字段。
create table myemp
as
select employee_id id,last_name name,salary sal,email
from employees
例2:若对于现有表的数据有所筛选,可以添加过滤条件。
create table emp2
as
select employee_id id,last_name name,hire_date,salary
from employees
where department_id = 50
例3:若只想要表结构,不想要表中数据,可以添加逻辑非的过滤条件。
create table emp2
as
select employee_id id,last_name name,hire_date,salary
from employees
where 1=2
2.2 修改表 ALTER TABLE
使用alter table语句可以:
(1)追加新的列。
alter table 表名字
add (新列名 新列的类型)
例:
alter table employees
add (email varchar2(20))
(2)修改现有的列的类型,注意此时该列没有数据,若有数据则修改不成功。
alter table 表名字
modify (列名 列的新类型)
(3)为新追加的列定义默认值,关键字:default。
alter table 表名字
modify (列名 列的类型 default 默认值)
(4)删除一个列。
alter table 表名字
drop column 列名
例:
alter table employees
drop column email
(5)重命名表的一个列名。
alter table 表名字
rename column 旧列名 to 新列名
例:
alter table employees
rename column last_name to name1
(6)将某列设置为不可用。
alter table 表名
set unused column 列名
(7)删除不可用的列。
alter table 表名
drop unused columns
2.3 删除表 DROP TABLE
数据和结构都被删除,所有正在运行的相关事务被提交;所有相关索引被删除。
drop table 表名
2.4 清空表 truncate table
删除表中所有数据,释放表的存储空间。
truncate table 表名
2.5 改变对象的名称
rename 对象旧名 to 对象新名
2.6 创建索引 CREATE INDEX
2.7 删除索引 DROP INDEX