74 阅读4分钟

[TOC]

创建

# 必须具备创建表的权限、一定的存储空间
create table 表名(
    列名 数据类型 约束,
	列名 数据类型 约束,
	... ...
);

示例

create table student(
	sno number primary key,
	sname varchar2(50) not null,
	sbirth date,
	sgrade number(2) foreign key  references dept(deptno) ,
	ssex char(5) check(ssex='男' or ssex='女'),
	stel char(11),
	sid varchar2(18) unique,
	smail varchar2(30)
);

# 注意:
在自己创建的用户下操作,分配表空间
列名不要用敏感词
不要都使用char

create table xi(
    xiid number(2) primary key,
    xiname varchar2(50) unique,
    xiboss varchar2(50) not null,
    xibelong varchar2(8) check(xibelong='南湖校区' or xibelong='浑南校区')
);

create table class(
    cno number(6) primary key,
    cname varchar2(20) unique,
    xiid number(2) references xi(xiid) 
);

insert into xi values(1,'计算机科学系','张三','南湖校区')
insert into xi values(1,'计算机科学系','张三','南湖校区')

用子查询语法创建表

CREATE TABLE table[(column, column...)] AS subquery; 

# 示例:
CREATE TABLE dept10
AS
SELECT empno, ename, sal+1000 newSalary
FROM emp WHEREdeptno=10;

显示表结构

desc 表名

修改表

添加列(字段)

ALTER TABLE 表名 ADD (列名 数据类型[DEFAULT 默认值] [,列名 数据类型]...);

修改列(字段)

ALTER TABLE 表名 MODIFY (列名 数据类型[DEFAULT 默认值] [,列名 数据类型]...);

# 添加默认值示例
ALTER TABLE dossier MODIFY(sex DEFAULT ‘男’); 

删除列(字段)

ALTER TABLE 表名 DROP (列名 [,列名]); 

修改列名(字段名)

ALTER TABLE 表名 RENAME COLUMN 原有列名 TO 新列名

删除表

DROP TABLE 表名;

重命名表

rename old_name TO new_name;

截断表(清空表)

就是清空表

truncate是DDL语言只能删除表中所有记录释放存储空间 ,使用rollback不可以回滚。

delete是DML语言,可以删除指定记录,不释放存储空间,使用 rollback可以回滚。

truncate table 表名;

约束

约束类型

约束说明
not null非空约束,指定某列的所有行数据不能包含空值(常用)
unique唯一性约束,指定列或者列的组合 的所有行数据必须 唯一
primary key主键约束,表的每行的唯一性标识,指定列或者列的组合的所有行数据必须唯一,不允许为null
foreign key外键约束,在列及引用列上建立的一种强制依赖关系(默认有关系,但一般不建立外键关系)
check检查性约束,在列上指定一个必须满足的条件(不要用)
default默认约束(少用)

定义外键约束

# 定义在列一级
CREATE TABLE emp_fk1(
    empno  NUMBER(4),
    ename VARCHAR2(10) NOT NULL,
    job VARCHAR2(9),
    deptno NUMBER(7,2) NOT NULL CONSTRAINT emp_deptno_fk REFERENCES dept (deptno),
    sal number(7,2)
); 

# 定义在表一级 
CREATE TABLE emp_fk2(
    empno  NUMBER(4),
    ename VARCHAR2(10) NOT NULL,
    deptno NUMBER(7,2) NOT NULL,
    CONSTRAINT emp_deptno_fk FOREIGN KEY (deptno) REFERENCES dept (deptno) ON DELETE CASCADE
);

# emp_deptno_fk:约束名
# FOREIGN KEY: 定义在子表的列中
# REFERENCES: 引用列所在的父表 
# ON DELETE CASCADE:当父表中的行被删除时,子表中相依 赖的行同时被删除;
# ON DELETE SET NULL:当父表的行被删除时,子表中相依赖 的行被转换为空值;

注:无ON DELETE CASCADE 或 ON DELETE SET NULL选项,当附表中的行被删除时,如果父表中的行在子表中被引用,则提 示不能被删除。

追加约束

ALTER TABLE 表名 ADD [CONSTRAINT 约束名字] 约束类型 (受约束影响的列的名字);

删除约束

ALTER TABLE 表名 DROP PRIMARY KEY|UNIQUE(受约束影响的列的名字)|CONSTRAINT 约束名 [CASCADE]; 

# cascade 级联删除

锁定表

LOCK TABLE tables IN lock_mode MODE [ WAIT [, integer] | NOWAIT ];
# 下面是一个如何在 Oracle 中使用 LOCK TABLE 语句的例子
LOCK TABLE suppliers IN SHARE MODE NOWAIT;
# 这个例子会锁定 suppliers 表在共享模式,而不是等待锁定被释放
  • tables:用逗号分隔的表格列表
  • WAIT:它指定数据库将等待(达到指定整数的特定秒数)以获取 DML 锁定。
  • NOWAIT:它指定数据库不应该等待释放锁。

lock_mode

lock_mode描述
ROW SHARE允许同时访问表,但阻止用户锁定整个表以进行独占访问。
ROW EXCLUSIVE允许对表进行并发访问,但阻止用户以独占访问方式锁定整个表并以共享方式锁定表。
SHARE UPDATE允许同时访问表,但阻止用户锁定整个表以进行独占访问。
SHARE允许并发查询,但用户无法更新锁定的表。
SHARE ROW EXCLUSIVE用户可以查看表中的记录,但是无法更新表或锁定SHARE表中的表。
EXCLUSIVE允许查询锁定的表格,但不能进行其他活动。