DDL操作

新增表,重命名表,删除表,清空表
追加新列,重命名列,删除列,修改原有列
(1)CREATE TABLE语句:
表名和列名的命名规则:
必须以字母开头
必须在 1–30 个字符之间
必须只能包含 A–Z, a–z, 0–9, _, $, 和 #
必须不能和用户定义的其他对象重名
必须不能是Oracle 的保留字
1.创建表的第一种方式(白手起家):
为空表,没有任何数据
create table emp1(
id number(10),
name varchar2(20),
salary number(10,2),
hire_date date
)
2.创建表的第二种方式(依托于现有表):
会使用现有表的数据
create table emp2
as
select employee_id id,last_name name,hire_date,salary from employees
让过滤条件查询不到数据,就相当于创建空表
create table emp3
as
select employee_id id,last_name name,hire_date,salary from employees where 1 = 2

(2)ALTER TABLE语句(修改表的结构):
1.追加新的列:
alter table emp1 add(email varchar(20))
2.修改现有的列,并为新追加的列定义默认值:
可以修改列的数据类型,尺寸,默认值
如果没有数据,可以修改数据类型;如果有数据,就不能修改数据类型。
修改数据的尺寸对已有数据没有影响,对新数据有影响
alter table emp1 modify(salary number(20,2) default 2000)
3.删除一个列
alter table emp1 drop column email
4.重命名表的一个列名
alter table emp1 rename column salary to sal

(3)删除表:
drop table emp2;
DROP TABLE 语句不能回滚(rollback)

(4)清空表:
truncate table emp3;
TRUNCATE语句不能回滚

(5)改变表的名称:
rename emp2 to employees;

在表dept和emp5中将列test_column设置成不可用,之后删除
alter table emp5 set unused column test_column
alter table emp5 drop unused columns

(一)创建约束:
(1)NOT NULL 约束:
只能定义在列上
create table emp2(
id number(10) constraint emp2_id_nn not null,
name varchar(20) not null,
salary number(10,2)
)
(2)UNIQUE约束:
同时允许列级约束和表级约束
create table emp3(
id number(10) constraint emp3_id_uk unique,
name varchar2(20) constraint emp3_name_nn not null,
email varchar2(20),
salary number(10,2),
constraint emp3_email_uk unique(email)
)
(3)PRIMARY KEY 约束:
同时允许列级约束和表级约束
create table emp4(
id number(10) constraint emp4_id_pk primary key,
name varchar2(20) constraint emp4_name_nn not null,
email varchar2(20),
salary number(10,2),
constraint emp4_email_uk unique(email)
)
该约束同时包含NOT NULL 约束和UNIQUE约束
(4)FOREIGN KEY 约束:
FOREIGN KEY的列起码要有一个唯一约束
create table emp6(
id number(10) constraint emp6_id_pk primary key,
name varchar2(20) constraint emp6_name_nn not null,
email varchar2(20),
salary number(10,2),
department_id number(10),
constraint emp6_email_uk unique(email),
constraint emp6_dept_id_fk foreign key(department_id) references departments(department_id)
)
插入时,插入的department_id必须在父表中存在:
Insert into emp6 values(1001,’AAA’,’[email protected]’,2000,2000) 错误的插入语句
ON DELETE CASCADE(级联删除): 当父表中的列被删除时,子表中相对应的列也被删除
ON DELETE SET NULL(级联置空): 子表中相应的列置空
create table emp7(
id number(10) constraint emp7_id_pk primary key,
name varchar2(20) constraint emp7_name_nn not null,
email varchar2(20),
salary number(10,2),
department_id number(10),
constraint emp7_email_uk unique(email),
constraint emp7_dept_id_fk foreign key(department_id)
references departments(department_id) on delete set null
)
(5)CHECK约束:
create table emp9(
id number(10) constraint emp9_id_pk primary key,
name varchar2(20) constraint emp9_name_nn not null,
email varchar2(20),
salary number(10,2) constraint emp9_salary check(salary>1500 and salary<30000),
department_id number(10),
constraint emp9_email_uk unique(email),
constraint emp9_dept_id_fk foreign key(department_id)
references departments(department_id) on delete set null
)

(二)使用ALTER TABLE语句修改约束:
添加 NOT NULL 约束:alter table emp5 modify(salary number(10,2) not null)
添加约束:alter table emp5 add constraint emp5_name_uk unique(name)
删除约束:alter table emp5 drop constraint emp5_name_nn
无效化约束:alter table emp3 disable constraint emp3_email_uk
有效化约束:alter table emp3 enable constraint emp3_email_uk

(三)通过字典视图查看约束:
(1)查询约束:
select constraint_name, constraint_type,search_condition from user_constraints
where table_name = ‘employees’;
(2)查询定义约束的列:
select constraint_name, column_name from user_cons_columns
where table_name = ‘employees’;

你可能感兴趣的:(Oracle)