oracle笔记——创建表相关

 
 
表结构
•随时可创建
•无需预先决定其大小
•可被在线修改
命名规则
•必须以字母开头
1-30个字符长
•只能包含 A-Z, a-z, 0-9, _, $, and #
•同一个用户不能拥有两个同名的对象
•不能使用 Oracle Server的保留字
建表:语法 你必须拥有指定的权限: CREATE TABLE 存储区域 CREATE TABLE [schema.]table (column datatype [DEFAULT expr] [column_constraint], ... [table_constraint]); 缺省选项
创建表 CREATE TABLE hr.employees( employee_id NUMBER(6), first_name VARCHAR2(20), last_name VARCHAR2(25) email VARCHAR2(25) phone_number VARCHAR2(20) hire_date DATE DEFAULT SYSDATE job_id VARCHAR2(10) salary NUMBER(8,2) commission_pct NUMBER (2,2) manager_id NUMBER(6) department_id NUMBER(4) ); 参考其他用户的表 必须参考同一数据库的其他表. 属于其他用户的表不在用户的模式中. 你应使用所有者的名字作为表的前缀. 利用子查询建一个表:语法 通过合并CREATE TABLE命令和AS 子查询选项建一张表并插入行记录. CREATE TABLE table [column(, column...)] AS subquery; 被指定列的数目应和子查询列的数目相对应. 使用缺省的值和完整性约束定义列 利用子查询建一个表: 举例 CREATE TABLE emp_41 AS SELECT id, last_name, userid, start_date FROM s_emp WHERE dept_id = 41; 约束 约束指导 服务器为约束自动命名,格式为SYS_Cn 生成一个约束 在生成表的同时. 在生成一个表后. 在列或表级定义一个约束条件. 约束:句法 列级约束 column [CONSTRAINT constraint_name] constraint_type, 表级约束 column,... [CONSTRAINT constraint_name] constraint_type (column, ...), NOT NULL约束 确保列中不能出现空值 在列级被定义 举例 CREATE TABLE friend... phone VARCHAR2(15) NOT NULL,... last_name VARCHAR2(25) CONSTRAINT friend_last_name_nn NOT NULL,...
UNIQUE约束
•在一张表中指定一列或多列组合中没有两行具有相同的键值
•若 UNIQUE键是基于单列的,则可以有空值。
•可以在表或列级被定义
•自动生成一个 UNIQUE索引
... phone VARCHAR2(10)
      CONSTRAINT s_emp_phone_uk UNIQUE,...
主键约束
•为表生成一个主键;每个表只能拥有一个主键
•在主键中不允许出现空值
•可以在表或列级被定义
•自动生成一个唯一索引
... id NUMBER(7)
      CONSTRAINT s_emp_id_pk PRIMARY KEY,...
外键约束
•定义单列或组合列为一个外键
• 外键的值对应于另一个表中的主键值
•可在表或列级定义
•必须和父表中的值相匹配或为空值
... dept_id NUMBER(7)
      CONSTRAINT s_emp_dept_id_fk
      REFERENCES s_dept(id),...
FOREIGN KEY 关键字
FOREIGN KEY
•在表级定义子表中的列约束
REFERENCES
•确定父表中的表名和列名
ON DELETE CASCADE
•删除父表行的同时删除子表中的从属行
修改表和约束
ALTER TABLE可以帮助你
•添加和修改列 .
•添加或删除约束 .
•开启或关闭约束 .
DROP TABLE 命令可以删除行和表结构 .
其他影响表的命令有 RENAME, TRUNCATE, COMMENT.
当你发布 DDL命令时,系统自动执行提交 .
加入一列 :句法
•加入新列 .
•为新列定义一个缺省值 .
•指定某列必须包含的数值 .
ALTER TABLE table
ADD (column datatype [DEFAULT expr][NOT NULL]
 [, column datatype]...);
列不能被删除 .
举例:
SQL> ALTER TABLE s_region
  2  ADD (comments VARCHAR2(255));
Table altered.
修改一列 :句法
改变一列的数据类型、长度、缺省值和 NOT NULL 列约束 .
ALTER TABLE table
MODIFY (column datatype [DEFAULT expr][NOT NULL]
[, column datatype]...);
指导:
•提高一个数字列的宽度和精度 .
•如果列包含空值或表中没有记录,则可以降低一列的宽度
•改变默认值只在之后的添加数据时有效 .
•只在列中没有值时,才能定义一个 NOT NULL 约束
•如果列中包含空值,可修改数据类型 .
•改变的缺省值只对以后的插入有效 .
例子:
S_EMP 表中的 TITLE 列的最大宽度扩展到 50个字符串
SQL> ALTER TABLE s_emp
  2  MODIFY (title VARCHAR2(50));
Table altered
删除列
ALTER TABLE hr.employees
DROP COLUMN comments
CASCADE CONSTRAINTS CHECKPOINT 1000;
说明
•从行中删除 column lengthcolumn value,同时从数据块中释放相应的空间
•在大表上删除列时,消耗的时间较长
使用 UNUSED选项
•标记列不可用
ALTER TABLE hr.employees
SET UNUSED COLUMN comments CASCADE CONSTRAINTS;

•删除不可用的列
ALTER TABLE hr.employees
DROP UNUSED COLUMNS CHECKPOINT 1000;
•使用 CONTINUE子句
ALTER TABLE hr.employees
DROP COLUMNS CONTINUE CHECKPOINT 1000;
增加一个约束 : 句法
•加入,删除,但不能修改一个约束 .
•开启或关闭约束 .
•利用 MODIFY子句加入一个 NOT NULL约束 .
SQL> ALTER TABLE table
  2  ADD [CONSTRAINT constraint] type (column);
添加一个约束 :举例
对 S_EMP表添加一个外键约束,表明经理必须是在 S_EMP 表中已经存在的一个雇员 .
SQL> ALTER TABLE s_emp
  2  ADD CONSTRAINT s_emp_manager_id_fk
  3  FOREIGN KEY (manager_id)
  4  REFERENCES s_emp(id);
Table altered.

删除一个约束 : 举例
从 S_EMP表中删除 manager的约束 .
SQL> ALTER TABLE s_emp
  2  DROP CONSTRAINT s_emp_manager_id_fk;
Table altered.

删除在 S_DEPT 表上的主键约束及其相关的 S_EMP DEPT_ID 列上的外键约束 .
SQL> ALTER TABLE s_dept
  2  DROP PRIMARY KEY CASCADE;
Table altered.
使约束无效
•在 ALTER TABLE命令中用 DISABLE 子句来使一个完整性约束无效 .
•用 CASCADE 选项使相关的完整性约束无效 .
SQL> ALTER TABLE s_emp
2  DISABLE CONSTRAINT s_emp_id_pk CASCADE;
Table altered.
使约束有效
利用 ENABLE子句激活一个当前属于无效状态的完整性约束
修改对象名
RENAME命令修改表、视图、序列或同义词的名字
SQL> RENAME s_ord TO s_order;
Table renamed.
删除一个表 :句法
•所有的数据将从表中删除 .
•任何处于悬挂的事务被提交 .
•所有的索引被删除 .
•用 CASCADE CONSTRAINTS选项删除依赖性约束 .
•你无法回滚此命令 .
DROP TABLE table [CASCADE CONSTRAINTS];
DROP TABLE scott.dept CASCADE CONSTRAINTS;
你必须是对象的拥有者
SQL> ALTER TABLE s_emp
  2  ENABLE CONSTRAINT s_emp_id_pk;
Table altered.
•如果你使一个 UNIQUE or PRIMARY约束有效,则系统自动生成唯一索引 .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值