Lesson10 Using DDL Statements to Create and Manage Tables
来源:互联网 发布:淘宝专业刷信誉团队 编辑:程序博客网 时间:2024/05/29 13:38
Lesson 10
1. 命名规则
1)表名和列名必须:
- 以字母开头
- 1~30个字符长度
- 仅包含A-Z,a-z,0-9,_,$,#
- 不能与同一个用户的其他对象重复
- 不能是oracle server保留字
2)准则
- 表名是大小写不敏感的,用双引号括起来的表名敏感
2.CREATE TABLE语句
前提
1)必须有CREATE TABLE权限
2)存储区域
CREATE TABLE [schema.]table
(column datatype [DEFAULT expr][,...]);
3.引用其他用户的表
4.DEFAULT选项
1)文字值,表达式,SQL函数是合法值
2)其他列的列名,伪劣是非法值
3)DEFAULT的数据类型必须匹配列的类型
5.数据类型
VARCHAR2(size) size:最大值size必须被定义,1~4000;
CHAR [(size)]:可不定义size,默认值1,最大值2000
NUMBER [(p,s)]:精度p,1~38;范围s,-84~127;
DATE
LONG: 可变长度字符串数据,最大2GB;
当表由子查询创建时,LONG列无法复制
无法用在GROUP BY或ORDER BY子句中
每个表只能用一个LONG
LONG上不能定义约束
你可能想用使用CLOB而不是LONG
CLOB: 字符串数据,最大4GB
BLOB: binary date,最大4GB
6.日期时间数据类型(f2)
TIMESTAMP: 日期与小数秒
INTERVAL YEAR TO MONTH:存储的年和月的时间间隔
INTERVAL DAY TO SECOND:存储天,小时,分,秒的时间间隔
7.约束准则
1)你可以给约束起名或系统以SYS_Cn形式定义
2)如下情况需要创建约束:
- 在创建表时
- 在创建表后
3)在列级别或表级别定义约束。功能上相同。
CREATE TABLE [schema.]table
(column datatype [DEFAULT expr]
[column_constraint],
...
[table_constraint][,...]);
列级别约束:
column [CONSTRAINT constraint_name] constraint_type,
CREATE TABLE employees(
employee_id NUMBER(6) CONSTRAINT emp_emp_id_pk PRIMARY KEY,
first_name VARCHAR2(20),
...);
表级别约束:
column,...
[CONSTRAINT constraint_name] constraint_type (column, ...),
CREATE TABLE employees
( employee_id NUMBER(6),
first_name VARCHAR2(20),
...
job_id VARCHAR2(10) NOT NULL,
CONSTRAINT emp_emp_id_pk PRIMARY KEY (EMPLOYEE_ID));
【注意】
- NOT NULL约束必须定义在列级别
- 适用于一个以上的列必须在表级别进行定义。
8.UNIQUE约束
1)如果约束不止一列组成,这组列被称为组合唯一键
2)UNIQUE约束允许输入为NULL,除非显式指定NOT NULL。NULL值不被认为等于任何值,所以NULL值满足UNIQUE
3)由于搜索机制,对于超过一列的UNIQUE约束,即使有一列为NULL,如果另一列有重复值,也是会被系统认为违反约束。
4)oracle强制隐式创建一个UNIQUE INDEX在唯一键上。
9.主键约束
1)NOT NULL
2) UNIQUE ,且自动隐式创建唯一索引
10.外键约束
1)外键值必须匹配父表中已经存在的值或为NULL
2)外键纯粹基于逻辑上得数据值,而不是物理上得指针
3)外键约束可以被定义在列级别或表级别上。组合外键必须创建在表级别上。
CONSTRAINT emp_dept_fk FOREIGN KEY (department_id) references departments(department_id)
4)外键约束关键字:
- FOREIGN KEY 在表级别约束上定义子表的列
- REFERENCES 识别父表的名字和列
- ON DELETE CASCADE 当父表中的一行被删除,在子表的依赖行也被删除
- ON DELETE SET NULL 当父表中的一行被删除,在子表的依赖行改为NULL
没有如上两个关键字,父表中的行不允许被删除,如果他们还存在于子表中的话。
10.CHECK约束
1)定义每行必须满足的条件
2)下列表达式不允许:
- 引用CURRVAL,NEXTVAL,LEVEL,ROWNUM
- 调用SYSDATE,UID,USER,USERENV函数
- 查询调用了其他行的其他值
3)单列可以有多个CHECK
4)CHECK约束可以定义在列级别或表级别
11.违反约束
1)如果在子表中插入父表没有的值,则会报错02291
2)如果在父表中删除子表还存在的值,则会报错02292
12.使用子查询创建表
1)准则
- 表是由指定的列名和查询返回的行创建的
- 列定义仅包含列名和默认值
- 如果给定列规范,列数必须等于在子查询的SELECT列表中的列数。
- 如果给定列没有规范,列名必须与子查询中SELECT列表的列名相同。
- 列的数据类型和NOT NULL约束会传递给新表。
【注意】仅仅显式的NOT NULL约束会被继承。
主键列不会传递NOT NULL特征给新表。
任何其他的约束规则不会传递给新表。
- 如果子查询中有表达式,必须给表达式起一个别名。才能传递给新表。
SYS@VERO> select CONSTRAINT_NAME,CONSTRAINT_TYPE,TABLE_NAME from dba_constraints where TABLE_NAME='X1';
CONSTRAINT_NAME C TABLE_NAME
------------------------------ - ------------------------------
SYS_C0011203 C X1
SYS@VERO> select CONSTRAINT_NAME,CONSTRAINT_TYPE,TABLE_NAME from dba_constraints where TABLE_NAME='X';
CONSTRAINT_NAME C TABLE_NAME
------------------------------ - ------------------------------
SYS_C0011198 P X
UK U X
SYS_C0011196 C X
FK R X
13. READ-ONLY
ALTER TABLE XX READ ONLY;
如果改为READ ONLY模式,则:
1)不能在上面做DML语句操作
2)不能做select 。。。for uupdate操作
3)允许操作表上面的索引
4)可以执行DROP TABLE操作(因为drop table只操作数据字典)
14. DROP TABLE
1)所有的数据会被删除到回收站,除非加purge参数
2)任何视图和同义词会保留,但无效
3)任何pending的事务会commit
4)只有表创建者或拥有DROP ANY TABLE权限的用户才能操作
1. 命名规则
1)表名和列名必须:
- 以字母开头
- 1~30个字符长度
- 仅包含A-Z,a-z,0-9,_,$,#
- 不能与同一个用户的其他对象重复
- 不能是oracle server保留字
2)准则
- 表名是大小写不敏感的,用双引号括起来的表名敏感
2.CREATE TABLE语句
前提
1)必须有CREATE TABLE权限
2)存储区域
CREATE TABLE [schema.]table
(column datatype [DEFAULT expr][,...]);
3.引用其他用户的表
4.DEFAULT选项
1)文字值,表达式,SQL函数是合法值
2)其他列的列名,伪劣是非法值
3)DEFAULT的数据类型必须匹配列的类型
5.数据类型
VARCHAR2(size) size:最大值size必须被定义,1~4000;
CHAR [(size)]:可不定义size,默认值1,最大值2000
NUMBER [(p,s)]:精度p,1~38;范围s,-84~127;
DATE
LONG: 可变长度字符串数据,最大2GB;
当表由子查询创建时,LONG列无法复制
无法用在GROUP BY或ORDER BY子句中
每个表只能用一个LONG
LONG上不能定义约束
你可能想用使用CLOB而不是LONG
CLOB: 字符串数据,最大4GB
BLOB: binary date,最大4GB
6.日期时间数据类型(f2)
TIMESTAMP: 日期与小数秒
INTERVAL YEAR TO MONTH:存储的年和月的时间间隔
INTERVAL DAY TO SECOND:存储天,小时,分,秒的时间间隔
7.约束准则
1)你可以给约束起名或系统以SYS_Cn形式定义
2)如下情况需要创建约束:
- 在创建表时
- 在创建表后
3)在列级别或表级别定义约束。功能上相同。
CREATE TABLE [schema.]table
(column datatype [DEFAULT expr]
[column_constraint],
...
[table_constraint][,...]);
列级别约束:
column [CONSTRAINT constraint_name] constraint_type,
CREATE TABLE employees(
employee_id NUMBER(6) CONSTRAINT emp_emp_id_pk PRIMARY KEY,
first_name VARCHAR2(20),
...);
表级别约束:
column,...
[CONSTRAINT constraint_name] constraint_type (column, ...),
CREATE TABLE employees
( employee_id NUMBER(6),
first_name VARCHAR2(20),
...
job_id VARCHAR2(10) NOT NULL,
CONSTRAINT emp_emp_id_pk PRIMARY KEY (EMPLOYEE_ID));
【注意】
- NOT NULL约束必须定义在列级别
- 适用于一个以上的列必须在表级别进行定义。
8.UNIQUE约束
1)如果约束不止一列组成,这组列被称为组合唯一键
2)UNIQUE约束允许输入为NULL,除非显式指定NOT NULL。NULL值不被认为等于任何值,所以NULL值满足UNIQUE
3)由于搜索机制,对于超过一列的UNIQUE约束,即使有一列为NULL,如果另一列有重复值,也是会被系统认为违反约束。
4)oracle强制隐式创建一个UNIQUE INDEX在唯一键上。
9.主键约束
1)NOT NULL
2) UNIQUE ,且自动隐式创建唯一索引
10.外键约束
1)外键值必须匹配父表中已经存在的值或为NULL
2)外键纯粹基于逻辑上得数据值,而不是物理上得指针
3)外键约束可以被定义在列级别或表级别上。组合外键必须创建在表级别上。
CONSTRAINT emp_dept_fk FOREIGN KEY (department_id) references departments(department_id)
4)外键约束关键字:
- FOREIGN KEY 在表级别约束上定义子表的列
- REFERENCES 识别父表的名字和列
- ON DELETE CASCADE 当父表中的一行被删除,在子表的依赖行也被删除
- ON DELETE SET NULL 当父表中的一行被删除,在子表的依赖行改为NULL
没有如上两个关键字,父表中的行不允许被删除,如果他们还存在于子表中的话。
10.CHECK约束
1)定义每行必须满足的条件
2)下列表达式不允许:
- 引用CURRVAL,NEXTVAL,LEVEL,ROWNUM
- 调用SYSDATE,UID,USER,USERENV函数
- 查询调用了其他行的其他值
3)单列可以有多个CHECK
4)CHECK约束可以定义在列级别或表级别
11.违反约束
1)如果在子表中插入父表没有的值,则会报错02291
2)如果在父表中删除子表还存在的值,则会报错02292
12.使用子查询创建表
1)准则
- 表是由指定的列名和查询返回的行创建的
- 列定义仅包含列名和默认值
- 如果给定列规范,列数必须等于在子查询的SELECT列表中的列数。
- 如果给定列没有规范,列名必须与子查询中SELECT列表的列名相同。
- 列的数据类型和NOT NULL约束会传递给新表。
【注意】仅仅显式的NOT NULL约束会被继承。
主键列不会传递NOT NULL特征给新表。
任何其他的约束规则不会传递给新表。
- 如果子查询中有表达式,必须给表达式起一个别名。才能传递给新表。
SYS@VERO> select CONSTRAINT_NAME,CONSTRAINT_TYPE,TABLE_NAME from dba_constraints where TABLE_NAME='X1';
CONSTRAINT_NAME C TABLE_NAME
------------------------------ - ------------------------------
SYS_C0011203 C X1
SYS@VERO> select CONSTRAINT_NAME,CONSTRAINT_TYPE,TABLE_NAME from dba_constraints where TABLE_NAME='X';
CONSTRAINT_NAME C TABLE_NAME
------------------------------ - ------------------------------
SYS_C0011198 P X
UK U X
SYS_C0011196 C X
FK R X
13. READ-ONLY
ALTER TABLE XX READ ONLY;
如果改为READ ONLY模式,则:
1)不能在上面做DML语句操作
2)不能做select 。。。for uupdate操作
3)允许操作表上面的索引
4)可以执行DROP TABLE操作(因为drop table只操作数据字典)
14. DROP TABLE
1)所有的数据会被删除到回收站,除非加purge参数
2)任何视图和同义词会保留,但无效
3)任何pending的事务会commit
4)只有表创建者或拥有DROP ANY TABLE权限的用户才能操作
0 0
- Lesson10 Using DDL Statements to Create and Manage Tables
- Extensions to DML and DDL Statements(pivoting insert)
- Manage and Create Invoices
- Using CREATE TABLE AS SELECT (CTAS) to Reorganize Oracle Tables
- Using Automake and Autoconf to manage large project
- USING GIT AND GITHUB TO MANAGE YOUR DOTFILES
- Create Tables and Constraints
- How to Create Tables
- Using Functions SYSFUNC and IFC to Conditionally Execute Statements in Open Code
- How to create simple and advanced pivot tables in C# and ASP.NET
- Create and manage temporary, permanent, and undo tablespaces
- Manage and Create Journals in Oralce Fusion Application
- Using SoftICE Informational Commands AND Using Symbols and Symbol Tables
- Can I use Java to create or manage XML files?
- Creating and Using Temporary Tables in Oracle
- Learning MySQL 1 - create database & tables using specified charset
- using JMX to Manage Web Applications (from tts)
- Using the HybridFox plugin to manage Openstack Nova
- 重新初始化VS2010
- 字符设备驱动程序与用户程序交互示例
- js中的函数function
- 有return的情况下try catch finally的执行顺序
- Lesson9 Manipulating Data
- Lesson10 Using DDL Statements to Create and Manage Tables
- 厦门在建商场坍塌,又是一个豆腐渣
- Activity的生命周期 (Android review)
- Atitit.研发管理---TOGAF架构跟 (ADM开发方法)总结
- Getting Started with Solr 4.9 and Django haystack
- ubuntu上搭建工作环境
- 不要用scanf函数!!!!
- 深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点
- 大家觉得百度改版后效果怎么样?有没有比原来的好