您的位置:首页 > 其它

创建和管理表【weber出品必属精品】

2014-08-20 22:10 309 查看
创建表
必须有 :

1. CREATE TABLE 的权限

SQL> conn /as sysdba
已连接。
SQL> create user test default tablespace users identified by a;

用户已创建。

SQL> conn test/a
ERROR:
ORA-01045: user TEST lacks CREATE SESSION privilege; logon denied

警告: 您不再连接到 ORACLE。
SQL> conn /as sysdba
已连接。
SQL> grant create session to test;

授权成功。

SQL> conn test/a
已连接。

SQL> create table t(id number,name varchar2(10));
create table t(id number,name varchar2(10))
*
第 1 行出现错误:
ORA-01031: 权限不足

SQL> conn /as sysdba
已连接。
SQL> grant create table to test;

授权成功。

SQL> conn test/a
已连接。
SQL> create table t(id number,name varchar2(10));
create table t(id number,name varchar2(10))
*
第 1 行出现错误:
ORA-01950: 对表空间 'USERS' 无权限


拥有存储空间

SQL> conn /as sysdba
已连接。
SQL> alter user test quota 10M on users;

用户已更改。

SQL> conn test/a
已连接。
SQL> create table t(id number,name varchar2(10));

表已创建。

创建一个表D

create table d(
deptno number(2),
dname  varchar2(10),
loc    varchar2(10)
)
;

表已创建。

SQL> describe d;
名称                                    是否为空? 类型
----------------------------------------- -------- ----------------------------
DEPTNO                                             NUMBER(2)
DNAME                                              VARCHAR2(10)
LOC                                                VARCHAR2(10)

SQL> desc d;
名称                                    是否为空? 类型
----------------------------------------- -------- ----------------------------
DEPTNO                                             NUMBER(2)
DNAME                                              VARCHAR2(10)
LOC                                                VARCHAR2(10)


引用其他用户的表

模式(schema):是一个用户下一组对象的集合,模式名与用户名是一致的

SQL> conn hr/hr

SQL> grant select on employees to scott;

conn scott/tiger

SQL> select count(*) from hr.employees;

COUNT(*)
----------
107

SQL> show user
USER 为 "SCOTT"
SQL> alter session set current_schema=hr;

会话已更改。

SQL> select count(*) from employees;

COUNT(*)
----------
107

SQL> show user
USER 为 "SCOTT"


DEFAULT选项
1. 在插入期间可以指定默认值

SQL> create table e(empno number(4),ename varchar2(10),hiredate date default sysdate);

表已创建。

SQL> desc e
名称                                    是否为空? 类型
----------------------------------------- -------- ----------------------------
EMPNO                                              NUMBER(4)
ENAME                                              VARCHAR2(10)
HIREDATE                                           DATE

SQL> insert into e values(7788,'SCOTT',default);

已创建 1 行。

SQL> commit;

提交完成。

SQL> select * from e;

EMPNO ENAME  HIREDATE
----- ------ --------------
7788 SCOTT  20-8月 -14


文字值,表达式,或者SQL函数是合法值

其他列的名或者伪列是非法的

伪列:不是真正的列,比如:Excel表格的行id。

SQL> select rownum,ename,sal from emp;

ROWNUM ENAME    SAL
---------- ------ -----
1 SMITH    800
2 ALLEN   1600
3 WARD    1250
4 JONES   2975
5 MARTIN  1250
6 BLAKE   2850
7 CLARK   2450
8 SCOTT   4000
9 KING    5000
10 TURNER  1500
11 ADAMS   1100
12 JAMES    950
13 FORD    3000
14 MILLER  1300


默认的数据类型必须匹配列的数据类型

Oracle数据库中的表

用户表
由用户创建和维护的一系列表的集合
包含用户的信息

数据字典
由Oracle 服务器创建和维护的一系列表的集合
包含数据库的信息

数据类型

表示字符的数据类型:CHAR(n),VARCHA2(n),LANG,CLOB

表示数字的数据类型:NUMBER(p,s):p为精度,s为刻度

表示二进制的数据类型:RAW或者LONG RAW、BLOB、BFILE

表示日期的数据类型:DATE、TIMESTAMP、间隔:年到月、天到秒

SQL> create table t(da1 date,da2 timestamp)'
2
SQL>
SQL>
SQL> create table t(da1 date,da2 timestamp);

表已创建。

SQL> insert into t values(sysdate,sysdate);

已创建 1 行。

SQL> commit;

提交完成。

SQL> col da2 for a45

SQL> select * from t;

DA1            DA2
-------------- ---------------------------------------------
20-8月 -14     20-8月 -14 09.46.51.000000 上午


INTERVAL YEAR TO MONTH 数据类型使用年和月日期字段存储一段时间
INTERVAL DAY TO SECOND 数据类型使用天,小时,分钟,秒存储一段时间

SQL> drop table e purge;

表已删除。

SQL> create table e as select * from emp ;

表已创建。

SQL> alter table e add jg interval year to month;

表已更改。

SQL> desc e
名称                                    是否为空? 类型
----------------------------------------- -------- ----------------------------
EMPNO                                              NUMBER(4)
ENAME                                              VARCHAR2(10)
JOB                                                VARCHAR2(9)
MGR                                                NUMBER(4)
HIREDATE                                           DATE
SAL                                                NUMBER(7,2)
COMM                                               NUMBER(7,2)
DEPTNO                                             NUMBER(2)
JG                                                 INTERVAL YEAR(2) TO MONTH

SQL> select empno,ename,hiredate,hiredate+jg from e;

EMPNO ENAME  HIREDATE       HIREDATE+JG
----- ------ -------------- --------------
7369 SMITH  17-12月-80     17-5月 -91
7499 ALLEN  20-2月 -81     20-7月 -91
7521 WARD   22-2月 -81     22-7月 -91
7566 JONES  02-4月 -81     02-9月 -91
7654 MARTIN 28-9月 -81     28-2月 -92
7698 BLAKE  01-5月 -81     01-10月-91
7782 CLARK  09-6月 -81     09-11月-91
7788 SCOTT  19-4月 -87     19-9月 -97
7839 KING   17-11月-81     17-4月 -92
7844 TURNER 08-9月 -81     08-2月 -92
7876 ADAMS  23-5月 -87     23-10月-97
7900 JAMES  03-12月-81     03-5月 -92
7902 FORD   03-12月-81     03-5月 -92
7934 MILLER 23-1月 -82     23-6月 -92


约束
约束是强加到表中的列上的规则

oracle中提供了五种约束:

NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK

约束规则:

创建约束时,可以对约束进行命名,也可以使用SYS_Cn的格式自定义命名

可以在以下时候创建约束:

在表创建时同时创建约束
在表创建以后创建约束

在表或者列级别创建约束

在数据字典中查看约束

定义约束:

列级别:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: