表结构•随时可创建•无需预先决定其大小•可被在线修改命名规则•必须以字母开头• 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_fkREFERENCES s_dept(id),...FOREIGN KEY 关键字FOREIGN KEY•在表级定义子表中的列约束REFERENCES•确定父表中的表名和列名ON DELETE CASCADE•删除父表行的同时删除子表中的从属行修改表和约束ALTER TABLE可以帮助你•添加和修改列 .•添加或删除约束 .•开启或关闭约束 .DROP TABLE 命令可以删除行和表结构 .其他影响表的命令有 RENAME, TRUNCATE, COMMENT.当你发布 DDL命令时,系统自动执行提交 .加入一列 :句法•加入新列 .•为新列定义一个缺省值 .•指定某列必须包含的数值 .ALTER TABLE tableADD (column datatype [DEFAULT expr][NOT NULL][, column datatype]...);列不能被删除 .举例:SQL> ALTER TABLE s_region2 ADD (comments VARCHAR2(255));Table altered.修改一列 :句法改变一列的数据类型、长度、缺省值和 NOT NULL 列约束 .ALTER TABLE tableMODIFY (column datatype [DEFAULT expr][NOT NULL][, column datatype]...);指导:•提高一个数字列的宽度和精度 .•如果列包含空值或表中没有记录,则可以降低一列的宽度•改变默认值只在之后的添加数据时有效 .•只在列中没有值时,才能定义一个 NOT NULL 约束•如果列中包含空值,可修改数据类型 .•改变的缺省值只对以后的插入有效 .例子:将 S_EMP 表中的 TITLE 列的最大宽度扩展到 50个字符串SQL> ALTER TABLE s_emp2 MODIFY (title VARCHAR2(50));Table altered删除列ALTER TABLE hr.employeesDROP COLUMN commentsCASCADE CONSTRAINTS CHECKPOINT 1000;说明•从行中删除 column length和 column value,同时从数据块中释放相应的空间•在大表上删除列时,消耗的时间较长使用 UNUSED选项•标记列不可用ALTER TABLE hr.employeesSET UNUSED COLUMN comments CASCADE CONSTRAINTS;
•删除不可用的列ALTER TABLE hr.employeesDROP UNUSED COLUMNS CHECKPOINT 1000;•使用 CONTINUE子句ALTER TABLE hr.employeesDROP COLUMNS CONTINUE CHECKPOINT 1000;增加一个约束 : 句法•加入,删除,但不能修改一个约束 .•开启或关闭约束 .•利用 MODIFY子句加入一个 NOT NULL约束 .SQL> ALTER TABLE table2 ADD [CONSTRAINT constraint] type (column);添加一个约束 :举例对 S_EMP表添加一个外键约束,表明经理必须是在 S_EMP 表中已经存在的一个雇员 .SQL> ALTER TABLE s_emp2 ADD CONSTRAINT s_emp_manager_id_fk3 FOREIGN KEY (manager_id)4 REFERENCES s_emp(id);Table altered.
删除一个约束 : 举例从 S_EMP表中删除 manager的约束 .SQL> ALTER TABLE s_emp2 DROP CONSTRAINT s_emp_manager_id_fk;Table altered.
删除在 S_DEPT 表上的主键约束及其相关的 S_EMP 表 DEPT_ID 列上的外键约束 .SQL> ALTER TABLE s_dept2 DROP PRIMARY KEY CASCADE;Table altered.使约束无效•在 ALTER TABLE命令中用 DISABLE 子句来使一个完整性约束无效 .•用 CASCADE 选项使相关的完整性约束无效 .SQL> ALTER TABLE s_emp2 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_emp2 ENABLE CONSTRAINT s_emp_id_pk;Table altered.•如果你使一个 UNIQUE or PRIMARY约束有效,则系统自动生成唯一索引 .
oracle笔记——创建表相关
最新推荐文章于 2021-04-14 19:34:03 发布