- 建立表
必須有 :
1. CREATE TABLE 的許可權
SQL> conn /as sysdba已串連。SQL> create user test default tablespace users identified by a;使用者已建立。SQL> conn test/aERROR: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));表已建立。建立一個表Dcreate 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/hrSQL> grant select on employees to scott;conn scott/tigerSQL> select count(*) from hr.employees; COUNT(*)---------- 107SQL> show userUSER 為 "SCOTT"SQL> alter session set current_schema=hr;會話已更改。SQL> select count(*) from employees; COUNT(*)---------- 107SQL> show userUSER 為 "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 DATESQL> 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 a45SQL> 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 MONTHSQL> 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的格式自訂命名
可以在以下時候建立約束:
在表建立時同時建立約束
在表建立以後建立約束
在表或者列層級建立約束
在資料字典中查看約束
定義約束:
列層級:
-
-