创建和管理表【weber出品必属精品】
- 创建表
必须有 :
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的格式自定义命名
可以在以下时候创建约束:
在表创建时同时创建约束
在表创建以后创建约束在表或者列级别创建约束
在数据字典中查看约束
定义约束:列级别:
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。