建立表空間和表
ORACLE物理上是由磁盤上的如下幾種文件:數據文件和控制文件和LOGFILE構成的
oracle中的表就是一張存儲數據的表。表空間是邏輯上的劃分。方便管理的。
數據表空間 (Tablespace)
存放數據老是須要空間, Oracle把一個數據庫按功能劃分若干空間來保存數據。固然數據存放在磁盤最終是以文件形式,因此一盤一個數據表空間包含一個以上的物理文件
數據表
在倉庫,咱們可能有多間房子,每一個房子又有多個貨架,每架又有多層。 咱們在數據庫中存放數據,最終是數據表的單元來存儲與管理的。
數據文件
以上幾個概念都是邏輯上的, 而數據文件則是物理上的。就是說,數據文件是真正「看得着的東西」,它在磁盤上以一個真實的文件體現
一、建立表空間:
格式: create tablespace 表間名 datafile '數據文件名' size 表空間大小
create tablespace data_test datafile 'e:\oracle\oradata\test\data_1.dbf' size 2000M;
create tablespace idx_test datafile 'e:\oracle\oradata\test\idx_1.dbf' size 2000M;
(*數據文件名 包含全路徑, 表空間大小 2000M 表是 2000兆)
二、建好tablespace, 就能夠建用戶了
格式: create user 用戶名 identified by 密碼 default tablespace 表空間表;
create user study identified by study default tablespace data_test;
(*咱們建立一個用戶名爲 study,密碼爲 study, 缺乏表空間爲 data_test -這是在第二步建好的.)
(*缺省表空間表示 用戶study從此的數據若是沒有專門指出,其數據就保存在 data_test中, 也就是保存在對應的物理文件 e:\oracle\oradata\test\data_1.dbf中)
建立用戶並指定表空間
CREATE USER cici IDENTIFIED BY cici PROFILE DEFAULT DEFAULT TABLESPACE CICI ACCOUNT UNLOCK;
create user jykl identified by jykl default tablespace jykl_data temporary tablespace jykl_temp;
受權給新用戶
GRANT connect, resource TO cici;
grant create session to cici;
4. 受權給新用戶
grant connect,resource to study;
--表示把 connect,resource權限授予study用戶
grant dba to study;
--表示把 dba權限授予給 study
5. 建立數據表
在上面,咱們已建好了用戶 study 咱們如今進入該用戶
sqlplusw study/study@test 而後就能夠在用戶study中建立數據表了
格式: create table 數據表名
oracle命令創建主鍵外鍵
一、建立一張學生表
create table t_stu(
stuid number(10) primary key,
stuname varchar2(20) not null,
stusex varchar2(2) default '男' check(stusex in('男','女'))
);
二、建立一張課程表
create table t_couse(
couseid number(10) primary key,
cousename varchar2(20) not null,
cousetype varchar2(4)
);
三、建立一張學生課程成績表(包括主外鍵)
create table t_score(
scoreid number(10) primary key,
stuid number(10) references t_stu(stuid),
couseid number(10),
constraint fk_couseid foreign key(couseid)
references t_couse(couseid)
on delete cascade
);
CREATE TABLE log(
log_id int(10) unsigned NOT NULL auto_increment,
log_time datetime NOT NULL,
log_user varchar(30) NOT NULL,
log_title varchar(30) default NULL,
log_content text default NULL,
PRIMARY KEY(log_id));
orale表管理: html
Oracle建立表同SQL Server同樣,使用CREATE TABLE命令來完成。建立約束則使用以下命令:web
語法格式:alter table命令sql
alter table 表名 add constraint 約束名 約束內容。數據庫
不論建立表仍是約束,與SQL Server基本相同,注:在Oracle中default是一個值,而SQL Server中default是一個約束,所以Oracle的default設置能夠在建表的時候建立。緩存
案例1:建立一個學生信息(INFOS)表和約束服務器
Oracle建立表和約束session
create table INFOS(oracle
STUID varchar2(7) not null, --學號 學號=‘S’+班號+2位序號ide
STUNAME varchar2(10) not null, --姓名函數
GENDER varchar2(2) not null, --性別
AGE number(2) not null, --年齡
SEAT number(2) not null, --座號
ENROLLDATE date, --入學時間
STUADDRESS varchar2(50) default '地址不詳', --住址
CLASSNO varchar2(4) not null, --班號 班號=學期序號+班級序號
);
/ ①
alter table INFOS add constraint pk_INFOS primary key(STUID) ②
/
alter table INFOS add constraint ck_INFOS_gender check(GENDER = '男' or GENDER = '女') ③
/
alter table INFOS add constraint ck_INFOS_SEAT check(SEAT >=0 and SEAT <=50) ④
/
alter table INFOS add constraint ck_INFOS_AGE check(AGE >=0 and AGE<=100) ⑤
/
alter table INFOS add constraint ck_INFOS_CLASSNO check((CLASSNO >='1001' and CLASSNO<='1999') or
(CLASSNO >='2001' and CLASSNO<='2999')) ⑥
/
alter table INFOS add constraint un_STUNAME unique(STUNAME) ⑦
/
代碼解析:
① 在Oracle代碼中,「/」執行緩存區中的語句,因爲緩衝區中只存儲一條剛剛保存過語句,因爲每條語句沒有用分號結尾,只是保存在緩衝區,所以每條語句後面都有單獨一行「/」。
② 建立一個主鍵約束。
③ 與 ④ ⑤ ⑥ ⑦一塊兒建立各類check約束。其中⑦是惟一約束,表示該列值是惟一的,列中的值不能重複。
Oracle中建立外鍵約束與SQL Server相同。好比:現有成績表定義以下:
案例2:建立一個成績表(SCORES)表和約束
Oracle建立表和約束
create table scores(
ID number, --ID ①
TERM varchar2(2), --學期 S1或S2
STUID varchar2(7) not null, --學號
EXAMNO varchar2(7) not null, --考號 E+班號+序號
WRITTENSCORE number(4,1) not null, --筆試成績
LABSCORE number(4,1) not null, --機試成績
);
ALTER TABLE SCORES ADD CONSTRAINT CK_SCORES_TERM CHECK(TERM = 'S1' OR TERM ='S2')
/
ALTER TABLE SCORES ADD CONSTRAINT FK_SCORES_INFOS_STUID FOREIGN KEY(STUID) REFERENCES INFOS(STUID) ②
/
代碼解析:
① SQL Server中可使用identify建立自動增加列,可是Oracle中的自動增加須要藉助序列(Sequence)完成,在後面章節中講解。
② Oracle中的外鍵約束定義。
注意:表名,字段名要大寫!
oracle建表、建主鍵、外鍵基本語法
-建立表格語法:
create table 表名(
字段名1 字段類型(長度) 是否爲空,
字段名2 字段類型 是否爲空 );
-增長主鍵
alter table 表名 add constraint 主鍵名 primary key (字段名1);
-增長外鍵:
alter table 表名 add constraint 外鍵名 foreign key (字段名1) references 關聯表 (字段名2);
在創建表格時就指定主鍵和外鍵
create table T_STU(
STU_ID char(5) not null,
STU_NAME VARCHAR2(8) not null,
constraint PK_T_STU primary key (STU_ID));
主鍵和外鍵一塊兒創建:
create table T_SCORE(
EXAM_SCORE number(5,2),
EXAM_DATE date,
AUTOID number(10) not null,
STU_ID char(5),
SUB_ID char(3),
constraint PK_T_SCORE primary key (AUTOID),
constraint FK_T_SCORE_REFE foreign key (STU_ID) references T_STU (STU_ID));
orale數據類型:
類型 |
含義 |
CHAR(length) |
存儲固定長度的字符串。參數length指定了長度,若是存儲的字符串長度小於length,用空格填充。默認長度是1,最長不超過2000字節。 |
VARCHAR2(length) |
存儲可變長度的字符串。length指定了該字符串的最大長度。默認長度是1,最長不超過4000字符。 |
NUMBER(p,s) |
既能夠存儲浮點數,也能夠存儲整數,p表示數字的最大位數(若是是小數包括整數部分和小數部分和小數點,p默認是38爲),s是指小數位數。可存負數 |
DATE |
存儲日期和時間,存儲紀元、4位年、月、日、時、分、秒,存儲時間從公元前4712年1月1日到公元后4712年12月31日。 |
TIMESTAMP |
不但存儲日期的年月日,時分秒,以及秒後6位,同時包含時區。 |
CLOB |
存儲大的文本,好比存儲非結構化的XML文檔 |
BLOB |
存儲二進制對象,如圖形、視頻、聲音等。 |
2. 建立表時給字段加默認值 和約束條件
建立表時能夠給字段加上默認值 例如 : 日期字段 DEFAULT SYSDATE 這樣每次插入和修改時, 不用程序操做這個字段都能獲得動做的時間
例如:IS_SEND NUMBER(1) default 1 --是否已發
建立表時能夠給字段加上約束條件 例如: 非空 NOT NULL ,不容許重複 UNIQUE ,關鍵字 PRIMARY KEY ,按條件檢查 CHECK (條件), 外鍵 REFERENCES 表名(字段名)
3. 建立表的例子
create table DEPT(
DNAME varchar2(14),
LOC varchar2(6),
EPTNO number(2) constraint PK_DEPT primary KEY,
);
create table region(
ID number(2) not null primary KEY,
postcode number(6) default '0' not null,
areaname varchar2(30) default '' not null,
);
4. 建立表時的命名規則和注意事項
1)表名和字段名的命名規則:必須以字母開頭,能夠含符號A-Z,a-z,0-9,_,$,#
2)大小寫不區分
3)不用SQL裏的保留字, 必定要用時可用雙引號把字符串括起來
4)用和實體或屬性相關的英文符號長度有必定的限制
5)約束名的命名規則和語法 約束名的命名規則約束名若是在建表的時候沒有指明,系統命名規則是SYS_Cn(n是數字) 約束名字符串的命名規則同於表和字段名的命名規則
6)使用約束時的注意事項 約束裏不能用系統函數,如SYSDATE和別的表的字段比較 能夠用本表內字段的比較
注意事項:
1)建表時能夠用中文的字段名, 但最好仍是用英文的字段名
2)建立表時要把較小的不爲空的字段放在前面, 可能爲空的字段放在後面
3)建表時若是有惟一關鍵字或者惟一的約束條件,建表時自動建了索引
4)一個表的最多字段個數也是有限制的,254個.
想在事務處理後, 作約束的
檢查 SQL> alter session set constraints deferred.
7. 由實體關係圖到建立表的例子 s_dept 前提條件:已有region表且含惟一關鍵字的字段id SQL> CREATE TABLE s_dept (id NUMBER(7) CONSTRAINT s_dept_id_pk PRIMARY KEY, name VARCHAR2(25) CONSTRAINT s_dept_name_nn NOT NULL, region_id NUMBER(7) CONSTRAINT s_dept_region_id_fk REFERENCES region (id), CONSTRAINT s_dept_name_region_id_uk UNIQUE(name, region_id));
8. 較複雜的建立表例子 SQL> CREATE TABLE s_emp (id NUMBER(7) CONSTRAINT s_emp_id_pk PRIMARY KEY, last_name VARCHAR2(25) CONSTRAINT s_emp_last_name_nn NOT NULL, first_name VARCHAR2(25), userid VARCHAR2(8) CONSTRAINT s_emp_userid_nn NOT NULL CONSTRAINT s_emp_userid_uk UNIQUE, start_date DATE DEFAULT SYSDATE, comments VARCHAR2(25), manager_id NUMBER(7), title VARCHAR2(25), dept_id NUMBER(7) CONSTRAINT s_emp_dept_id_fk REFERENCES s_dept(id), salary NUMBER(11,2), commission_pct NUMBER(4,2) CONSTRAINT s_emp_commission_pct_ck CHECK (commission_pct IN(10,12.5,15,17.5,20)));
8. 經過子查詢建表 經過子查詢建表的例子 SQL>CREATE TABLE emp_41 AS SELECT id, last_name, userid, start_date FROM s_emp WHERE dept_id = 41;
SQL> CREATE TABLE A as select * from B where 1=2; 只要表的結構.
10. 用子查詢建表的注意事項 1)能夠關連多個表及用集合函數生成新表,注意選擇出來的字段必須有合法的字段名稱,且不能重複。 2)用子查詢方式創建的表,只有非空NOT NULL的約束條件能繼承過來, 其它的約束條件和默認值都沒有繼承過來. 3)根據須要,能夠用alter table add constraint ……再創建其它的約束條件,如primary key等.
11. Foreign Key的可選參數ON DELETE CASCADE 在建立Foreign Key時能夠加可選參數: ON DELETE CASCADE它的含義是若是刪除外鍵主表裏的內容,子表裏相關的內容將一塊兒被刪除. 若是沒有ON DELETE CASCADE參數,子表裏有內容,父表裏的主關鍵字記錄不能被刪除掉.
12. 若是數據庫表裏有不知足的記錄存在,創建約束條件將不會成功.
13. 給表建立和刪除同義詞的例子 SQL> CREATE SYNONYM d_sum 2 FOR dept_sum_vu;
SQL> CREATE PUBLIC SYNONYM s_dept 2 FOR alice.s_dept;
SQL> DROP SYNONYM s_dept;
建立一個名爲INSURES的表
create table INSURES
(
INSURE_NO CHAR(18) not null, --醫保號
GETSURE_UNIT_NO CHAR(9) not null, --經辦機構號
INSURE_NAME VARCHAR2(10) not null, --姓名
INSURE_SEX CHAR(1) not null, --性別
ID_CARD_NO CHAR(18) not null, --身份證號
);
建立/修改主鍵,惟一性約束和外鍵 這裏INSURE_NO, GETSURE_UNIT_NO惟一性約束
alter table INSURES
add constraint UNQ_INSURES unique (INSURE_NO, GETSURE_UNIT_NO)
alter table TWN_SEED
add constraint UNQ_INSURES primary key (。。。。)
建立索引
create index IDX_INSURES on INSURES (GETSURE_UNIT_NO, SONSURE_UNIT_NO, UNIT_NO, FAMILY_NO, HOSPS_NO)
建立一個PK的時候,是自動建立一個與之對應的惟一索引的。 若是不特別指定,那麼這個索引的表空間和表格的空間是同樣的,可是咱們不建議放在一塊兒。
create table testone(
name varchar2(10 char))
TABLESPACE1;
ALTER TABLE TESTONE ADD CONSTRAINT PK_TESTONE1 PRIMARY KEY(NAME) USING INDEX TABLESPACE TABLESPACE2;
做爲一種好習慣,不要把索引和表格的數據存在在同一個表空間中
--建立Oracle表(使用create關鍵字)
-- ******
(1)建立新表 use 數據庫(在那個數據庫中建表) create table 表名
( 字段名1(列名) 數據類型 列的特徵,
字段名2(列名) 數據類型 列的特徵(NOT NULL),
...... )
(2)建立帶有主鍵約束的表語法 create table 表名 (
字段名1(列名) 數據類型 列的特徵,
字段名2 數據類型 列的特徵(NOT NULL),
...... primary key(主鍵列字段))
(3)利用現有的表建立表 -- 注意:僅複製Oracle數據表結構:採用的是子查詢方式 create table 新表 as select * from 舊的表 where 1=2
(4)利用現有的表的結構建立新表 -- 注意:僅複製Oracle數據表結構:採用的是子查詢方式 create table 新表 select 字段1,字段2... from 舊的表 where 條件(舊的表字段知足的條件)
(5)利用現有的表的結構建立新表 -- 注意:複製Oracle數據表數據 create table 新表 as select * from 舊的表 where 1=1
(6)利用現有的表的結構建立新表 -- 注意:複製Oracle數據表數據 create table 新表 as select 字段1,字段2... from 舊的表 where 條件(舊的表字段知足的條件)(7)將查詢結果插入另外一張表 insert into 另外一張表 select * from 要查詢的表 where 條件(要查詢的表的列符合什麼條件)
oracle create table(轉)
- //建測試表
- create table dept(
- deptno number(3) primary key,
- dname varchar2(10),
- loc varchar2(13)
- );
- create table employee_info(
- empno number(3),
- deptno number(3),
- ename varchar2(10),
- sex char(1),
- phone number(11),
- address varchar2(50),
- introduce varchar2(100)
- );
- 重命名
- 重命名錶:rename dept to dt;
- rename dt to dept;
-
- 重命名列:alter table dept rename column loc to location;
- alter table dept rename column location to loc;
- 添加約束
- 1. primary key
- alter table employee_info add constraint pk_emp_info primary key(empno);
-
- 2. foreign key
- alter table employee_info add constraint fk_emp_info foreign key(deptno)
- references dept(deptno);
- 3. check
- alter table employee_info add constraint ck_emp_info check
- (sex in ('F','M'));
- 4. not null
- alter table employee_info modify phone constraint not_null_emp_info not null;
- 5. unique
- alter table employee_info add constraint uq_emp_info unique(phone);
- 6. default
- alter table employee_info modify sex char(2) default 'M';
- 添加列
- alter table employee_info add id varchar2(18);
- alter table employee_info add hiredate date default sysdate not null;
-
- 刪除列
- alter table employee_info drop column introduce;
- 修改列
- 1.修改列的長度
- alter table dept modify loc varchar2(50);
-
- 2. 修改列的精度
- alter table employee_info modify empno number(2);
-
- 3. 修改列的數據類型
- alter table employee_info modify sex char(2);
-
- 4. 修改默認值
- alter table employee_info modify hiredate default sysdate+1;
-
- 5.禁用約束
- alter table employee_info disable constraint uq_emp_info;
-
- 6.啓用約束
- alter table employee_info enable constraint uq_emp_info;
- 7.延遲約束
- alter table employee_info drop constraint fk_emp_info;
- alter table employee_info add constraint fk_emp_info foreign key(deptno)
- references dept(deptno)
- deferrable initially deferred;
- 8.向表中添加註釋
- comment on table employee_info is 'information of employees';
-
- 9.向列添加註釋
- comment on column employee_info.ename is 'the name of employees';
- comment on column dept.dname is 'the name of department';
- 10.清除表中全部數據
- truncate table employee_info; (DELETE FROM table_name或DELETE * FROM table_name)
- 11.刪除表
- drop table employee_info;
- //下面來看看剛剛纔咱們對錶dept和表employee_info所作的更改
- //user_constraints視圖裏麪包含了剛剛纔咱們建立的全部約束,以及其餘信息,
- //你能夠用desc user_constraints命令查看其詳細說明
- select constraint_name,constraint_type,status,deferrable,deferred
- from user_constraints
- where table_name='EMPLOYEE_INFO';
- CONSTRAINT_NAME CONSTRAINT_TYPE STATUS DEFERRABLE DEFERRED
- PK_EMP_INFO P ENABLED NOT DEFERRABLE IMMEDIATE
- FK_EMP_INFO R ENABLED DEFERRABLE DEFERRED
- NOT_NULL_EMP_INFO C ENABLED NOT DEFERRABLE IMMEDIATE
- SYS_C005373 C ENABLED NOT DEFERRABLE IMMEDIATE
- UQ_EMP_INFO U ENABLED NOT DEFERRABLE IMMEDIATE
- CK_EMP_INFO C ENABLED NOT DEFERRABLE IMMEDIATE
- //咱們能夠經過user_cons_columns視圖查看有關列的約束信息;
- select owner,constraint_name,table_name,column_name
- from user_cons_columns
- where table_name='EMPLOYEE_INFO';
- OWNER CONSTRAINT_NAME TABLE_NAME COLUMN_NAME
- YEEXUN PK_EMP_INFO EMPLOYEE_INFO EMPNO
- YEEXUN CK_EMP_INFO EMPLOYEE_INFO SEX
- YEEXUN NOT_NULL_EMP_INFO EMPLOYEE_INFO PHONE
- YEEXUN SYS_C005373 EMPLOYEE_INFO HIREDATE
- YEEXUN UQ_EMP_INFO EMPLOYEE_INFO PHONE
- YEEXUN FK_EMP_INFO EMPLOYEE_INFO DEPTNO
- //咱們將user_constraints視圖與user_cons_columns視圖鏈接起來
- //查看約束都指向哪些列
- column column_name format a15;
- select ucc.column_name,ucc.constraint_name,uc.constraint_type,uc.status
- from user_constraints uc,user_cons_columns ucc
- where uc.table_name=ucc.table_name and
- uc.constraint_name=ucc.constraint_name and
- ucc.table_name='EMPLOYEE_INFO';
- COLUMN_NAME CONSTRAINT_NAME CONSTRAINT_TYPE STATUS
- EMPNO PK_EMP_INFO P ENABLED
- DEPTNO FK_EMP_INFO R ENABLED
- PHONE NOT_NULL_EMP_INFO C ENABLED
- HIREDATE SYS_C005373 C ENABLED
- PHONE UQ_EMP_INFO U ENABLED
- SEX CK_EMP_INFO C ENABLED
- //這裏有個constraint_type,他具體指下面幾種類型:
- //C:check,not null
- //P:primary key
- //R:foreign key
- //U:unique
- //V:check option
- //O:read only
- //咱們能夠經過user_tab_comments視圖得到對錶的註釋
- select * from user_tab_comments
- where table_name='EMPLOYEE_INFO';
- TABLE_NAME TABLE_TYPE COMMENTS
- EMPLOYEE_INFO TABLE information of employees
- //咱們還能夠經過user_col_comments視圖得到對錶列的註釋:
- select * from user_col_comments
- where table_name='EMPLOYEE_INFO';
- TABLE_NAME COLUMN_NAME COMMENTS
- EMPLOYEE_INFO EMPNO
- EMPLOYEE_INFO DEPTNO
- EMPLOYEE_INFO ENAME the name of employees
- EMPLOYEE_INFO SEX
- EMPLOYEE_INFO PHONE
- EMPLOYEE_INFO ADDRESS
- EMPLOYEE_INFO ID
- EMPLOYEE_INFO HIREDATE
- select * from user_col_comments
- where table_name='EMPLOYEE_INFO' and
- comments is not null;
- TABLE_NAME COLUMN_NAME COMMENTS
- EMPLOYEE_INFO ENAME the name of employees
- //最後咱們來查看一下修改後的表:
- desc employee_info;
- Name Type Nullable Default Comments
- EMPNO NUMBER(2)
- DEPTNO NUMBER(3) Y
- ENAME VARCHAR2(10) Y the name of employees
- SEX CHAR(2) Y 'M'
- PHONE NUMBER(11)
- ADDRESS VARCHAR2(50) Y
- ID VARCHAR2(18) Y
- HIREDATE DATE sysdate+1
- desc dept;
- Name Type Nullable Default Comments
- DEPTNO NUMBER(3)
- DNAME VARCHAR2(10) Y the name of department
- LOC VARCHAR2(50) Y
create table test_user ( no number(5) not null , --pk username varchar2(30) not null , --用戶名 passpord varchar2(30) not null , --密碼 constraint pk_connectdb primary key(no) )storage (initial 10k next 10k pctincrease 0);
*下面講解上面命令的各方面的含義 create table test_user --建立數據表 no number(5) not null , --pk (列名或字段名) 數據類型(數據長度) 該數據列不能爲空 ,是列之間的分隔符 --後的內容是註釋 constraint pk_connectdb primary key(no) (約束) 約束名 (主鍵) (列名) 意思就是 在數據表 test_user中全部行數據 no的值不能相同(這就是主鍵的含義)
storage (initial 10k next 10k pctincrease 0); 這個提及來比較複雜, 反正若是某個數據表要存放大量數據,就把initial和next後的值設置大一點, 不然設置小一點.
既然上面在建立數據表中沒有特別指定 表空間,固然該表就存放在study缺省表空間data_test了.
create tablespace data_phonepos datefile 'd:\install\OracleXpdb\datafilephonepos.dbf' size 8000M; create user phonepos identified by phonepos default tablespace data_phonepos;
grant connect, resource to phonepos; grant dba to phonepos;
權限的查詢
5.1 查詢某個用戶授予其餘用戶在當前用戶模式下的對象權限 select * from user_tab_privs_made --假如當前用戶爲WENZI,那麼查詢結果就是由WENZI受權,在WENZI模式下的權限記錄
5.2 查詢某個用戶授予其餘用戶在該用戶模式對象及其餘模式對象上的對象權限 select * from all_tab_privs_made -- 假如當前登陸用戶爲WENZI,那麼查詢結果就是全部由WENZI授予的權限的記錄
修改用戶
ALTER USER avyrros IDENTIFIED EXTERNALLY DEFAULT TABLESPACE data_ts TEMPORARY TABLESPACE temp_ts QUOTA 100M ON data_ts QUOTA 0 ON test_ts PROFILE clerk;
刪除用戶 DROP USER username [CASCADE] --CASECADE 選項會刪除該用戶模式下的全部對象,建議在刪除前,先確認是否有其餘的依賴關係存在。
查詢屬於用戶的對象 select owner,object_name,object_type,status from dba_objects where owner='WENZI'
5.3 查詢爲某個用戶授予的,在其餘模式對象上的權限 select * from user_tab_privs_recd --假如當前登陸用戶爲WENZI,那麼查詢結果就是WENZI在其餘模式對象上的權限
5.4 查詢爲某個用戶授予的,在該用戶模式對象與其餘模式對象上的權限 select * from all_tab_privs_recd --假如當前用戶爲wenzi,則查詢結果爲wenzi在整個數據庫中擁有權限的對象
角色管理
建立口令文件 orapwd file='..........\pwd{SID}.ora' password='***(sys的密碼)' tntries=10(口令文件最大的用戶數量)
要使某個用戶可使用口令文件,必須爲其授予SYSDBA權限,系統會自動將其加入到口令文件中。 grant sysdba to wenzi 當收回SYSDBA權限時,系統將對應的用戶從口令文件中刪除。 revoke sysdba from wenzi
查看口令文件管理的用戶 select * from v$pwfile_users
建立步驟:
SYS用戶在CMD下以DBA身份登錄:
[user@root ~]$ sqlplus /nolog
SQL> conn sys/h1w2D3B4 as sysdba
SQL> startup
[user@root ~]$ lsnrctl start
// 分爲四步
//第1步:建立臨時表空間
create temporary tablespace user_temp
tempfile 'D:\oracle\oradata\Oracle9i\user_temp.dbf'
size 50m
autoextend on
next 50m maxsize 20480m
extent management local;
//第2步:建立數據表空間
create tablespace user_data
logging
datafile 'D:\oracle\oradata\Oracle9i\user_data.dbf'
size 50m
autoextend on
next 50m maxsize 20480m
extent management local;
//第3步:建立用戶並指定表空間
create user username identified by password
default tablespace user_data
temporary tablespace user_temp;
//第4步:給用戶授予權限
grant connect,resource to username;
---------------------------------------------------------------------------------
//之後以該用戶登陸,建立的任何數據庫對象都屬於user_temp 和user_data表空間,
這就不用在每建立一個對象給其指定表空間了
撤權:
revoke 權限... from 用戶名;
刪除用戶命令
drop user user_name cascade;
創建表空間
CREATE TABLESPACE data01
DATAFILE '/oracle/oradata/db/DATA01.dbf' SIZE 500M
UNIFORM SIZE 128k; #指定區尺寸爲128k,如不指定,區尺寸默認爲64k
刪除表空間
DROP TABLESPACE data01 INCLUDING CONTENTS AND DATAFILES;
1、創建表空間
CREATE TABLESPACE data01
DATAFILE '/oracle/oradata/db/DATA01.dbf' SIZE 500M
UNIFORM SIZE 128k; #指定區尺寸爲128k,如不指定,區尺寸默認爲64k
2、創建UNDO表空間
CREATE UNDO TABLESPACE UNDOTBS02
DATAFILE '/oracle/oradata/db/UNDOTBS02.dbf' SIZE 50M
#注意:在OPEN狀態下某些時刻只能用一個UNDO表空間,若是要用新建的表空間,必須切換到該表空間:
ALTER SYSTEM SET undo_tablespace=UNDOTBS02;
3、創建臨時表空間
CREATE TEMPORARY TABLESPACE temp_data
TEMPFILE '/oracle/oradata/db/TEMP_DATA.dbf' SIZE 50M
4、改變表空間狀態
1.使表空間脫機
ALTER TABLESPACE game OFFLINE;
若是是意外刪除了數據文件,則必須帶有RECOVER選項
ALTER TABLESPACE game OFFLINE FOR RECOVER;
2.使表空間聯機
ALTER TABLESPACE game ONLINE;
3.使數據文件脫機
ALTER DATABASE DATAFILE 3 OFFLINE;
4.使數據文件聯機
ALTER DATABASE DATAFILE 3 ONLINE;
5.使表空間只讀
ALTER TABLESPACE game READ ONLY;
6.使表空間可讀寫
ALTER TABLESPACE game READ WRITE;
5、刪除表空間
DROP TABLESPACE data01 INCLUDING CONTENTS AND DATAFILES;
6、擴展表空間
首先查看錶空間的名字和所屬文件
select tablespace_name, file_id, file_name,
round(bytes/(1024*1024),0) total_space
from dba_data_files
order by tablespace_name;
1.增長數據文件
ALTER TABLESPACE game
ADD DATAFILE '/oracle/oradata/db/GAME02.dbf' SIZE 1000M;
2.手動增長數據文件尺寸
ALTER DATABASE DATAFILE '/oracle/oradata/db/GAME.dbf'
RESIZE 4000M;
3.設定數據文件自動擴展
ALTER DATABASE DATAFILE '/oracle/oradata/db/GAME.dbf
AUTOEXTEND ON NEXT 100M
MAXSIZE 10000M;
設定後查看錶空間信息
SELECT A.TABLESPACE_NAME,A.BYTES TOTAL,B.BYTES USED, C.BYTES FREE,
(B.BYTES*100)/A.BYTES "% USED",(C.BYTES*100)/A.BYTES "% FREE"
FROM SYS.SM$TS_AVAIL A,SYS.SM$TS_USED B,SYS.SM$TS_FREE C
WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME AND A.TABLESPACE_NAME=C.TABLESPACE
建立數據表:
Oracle中建表和指定表空間
--建一個表 create table HH2(
tid number primary key ,--主鍵設定
tname varchar2(20)
);
--刪除表 drop table HH;
--表空間(至關於一個數據庫)(DBA權限) create tablespace test datafile 'D:test.dbf' size 10M autoextend on next 10M maxsize 100M
--指定表在那個表空間裏面(默認在USERS表空間裏) create table HH(tid number primary key) tablespace test; select * from tabs;
--刪除 表空間 drop tablespace test including contents and datafiles --連帶物理文件和表空間中的數據也一塊兒刪除
--建表建約束 create table student1(
sid number primary key,
sname varchar2(20) not null,
sage number,
ssex char(2),
saddress varchar2(100),
cid number references tclass(cid)--創建外鍵關係 );
create table tclass (
cid number primary key,
cname varchar2(20) );
--惟一unique 檢查 check 默認值 modify 添加外鍵關係 添加列
alter table student1 add constraint UQ_student1_sname unique(sname);
alter table student1 add constraint CK_student1_agae check(sage between 19 and 70);
alter table student1 modify ssex default '男';
alter table student1 add constraint FK_student1_cid foreign key(cid) references tclass(cid);
alter table student1 add dt date;
--刪除約束 alter table student1 drop constraint UQ_student1_sname ;
1.建立oracle數據表
建立oracle數據表的語法以下:
create table命令用於建立一個oracle數據表;括號內列出了數據表應當包含的列及列的數據類型;tablespace則指定該表的表空間。
建立數據表students。
在該建立語句中,依次定義了student_id、student_name、student_age、status及version等列;tablespace users表示將表建立於表空間users中。
經過視圖user_tables能夠得到當前用戶所擁有的表信息,利用以下SQL語句能夠查看錶student的表空間信息。
在oracle的SQL命令行下,能夠利用describe命令來查看已有數據表的表結構,以下所示。
2.數據表的相關操做
數據表建立以後,因爲某些緣由,例如,設計時的考慮不足,每每須要對其進行結構上的調整。常見的調整包括,增長新列、修改已有列、刪除、重命名已有列。另外,還能夠轉移數據表的表空間。
修改數據表結構應當使用alter table命令。例如,在表student中,增長新列class_id(班級ID)的SQL語句以下圖所示。
alter table student 用於修改表student的結構;add用於增長列,注意此處沒有collumn關鍵字;小括號內是列及列的數據類型;用戶能夠一次性爲表增長多個列,各列之間使用逗號進行分隔。
在修改爲功以後,表student的結構以下所示。
一樣,能夠利用alter命令修改和刪除已有列。
利用alter命令將class_id的數據類型修改成varchar2(20)。
modify(class_id varchar2(20))用於修改表student中的已有列class_id,實際至關於從新定義。該列新的數據類型爲varchar2(20)。此時表student的結構以下:
經過modify選項能夠將列的類型從新定義,而經過drop選項則刪除已有列,以下所示。
drop column class_id用於刪除已有列class_id;須要注意的是,此處必須添加column選項,才能表示刪除的目標是一個列。此時,表student的結構已經修改以下:
對於數據表的列,除了增、刪、改操做以外,還能夠進行重命名操做。重命名一個列,應該使用rename選項。例如,爲了與其餘數據表進行統一,須要將表student的列student_id重命名爲id,則能夠利用以下SQL語句。
rename column student_id to id用於將列student_id重命名爲id。此時,表student的結構以下所示。
對於調整數據表結構來講,要特別注意嚴謹性。列的數據類型的修改,有可能會影響應用程序對數據庫進行存取;而列的刪除和重命名更須要檢查應用程序是否會出現關聯性錯誤。
若是數據表建立時,選擇了錯誤的表空間,那麼能夠利用alter table命令,結合move tablespace選項轉移表空間,以下圖所示。
將表student轉移至表空間users中。
alter table student用於修改表student的屬性;move tablespace users用於將表student從當前表空間轉移至表空間users。能夠經過查詢視圖user_tables得到表student轉移以後的表空間信息,以下所示。
分析查詢結果可知,利用move tablespace選項已經成功實現了表空間的轉移。
刪除數據表
利用drop table命令刪除數據表
有時,因爲某些約束的存在,例如,當前表的主鍵被其餘表用做外鍵,會致使沒法成功刪除。利用cascade constraints選項能夠將約束同時刪除,從而保證drop table命令必定可以成功執行。
特殊的數據表dual
dual表實際屬於系統用戶sys,具備了數據庫基本權限的用戶,都可查詢該表的內容,以下所示:
或者
分析查詢結果可知,dual表僅含有一行一列。該表並不是爲了存儲數據而建立的,其存在的意義在於提供強制的數據源。
在oracle中,全部查詢語句必須知足select column_name from table_name的格式。可是,在某些場景下,數據源table_name並不明確。例如,函數sysdate()用於返回當前日期,那麼在SQL命令行下調用該函數時,很難有明確的數據源,此時便可使用dual表。
利用dual表提供數據源,以得到當前日期。
一樣,對於各類數學運算,一樣能夠利用dual表做爲數據源,來打印和查看輸出結果。
dual表提供了一行一列的數據格式,從而使各類表達式、函數運算在以其爲數據源時,可以輸出單行單列的形式。
因爲dual表的全部者爲系統用戶sys,所以,只有用戶利用該身份登陸數據庫才能夠修改該表。可是,修改該表的內容或者結構都應該被禁止。
- create tablespace ZGECM
- logging datafile 'G:\oracle\product\10.2.0\ZGECM.DBF'
- size 500M autoextend on
- next 10M maxsize 500M extent management local
-
-
- create user sms2 identified by sms2 default tablespace ECM2
- temporary tablespace temp profile default;
-
- grant connect,resource to sms2;
- grant dba to sms2;
-
-
- exp xuner_ecm/xuner_ecm@192.168.1.139/SMS FILE=E:/xunerecm0910_server.DMP OWNeR=xuner_ecm
-
- imp scjt/scjt@SMS fromuser=ecm touser=sms2 file='G:\sms.dmp'
-
-
- imp SMS/SMS@LOCAL_SMS fromuser=SMS touser=SMS file='G:\sms.dmp'
-
- select userenv('language') from dual; //查詢oracle服務器端的字符
-
- select nls_charset_name(to_number('0354','0354'))
- from dual;
-
-
-
- CREATE DATABASE LINK sms CONNECT TO sms IDENTIFIED BY sms
- USING 'SMS';
-
-
-
- insert into XSJBXXB select * from sms.xsjbxxb@zhang2
-
- insert into XSJBXXB select * from sms.xsjbxxb@to_test
-
- create database link to_test
- connect to sms identified by sms
- using 'ZHANG';
-
- '(DESCRIPTION =(
- ADDRESS_LIST =(
- ADDRESS =(
- PROTOCOL = TCP)(
- HOST = 192.168.0.100)(PORT = 1521)))
- (CONNECT_DATA =(SERVICE_NAME = AAA)))'
-
- select owner,constraint_name,table_name from user_constraints
- where constraint_name='SYS_C00119759'
-
-
-
-
-
- /*分爲四步 */
- /*第1步:建立臨時表空間 */
- create temporary tablespace user_temp
- tempfile 'D:\oracle\oradata\Oracle9i\user_temp.dbf'
- size 50m
- autoextend on
- next 50m maxsize 20480m
- extent management local;
-
- /*第2步:建立數據表空間 */
- create tablespace user_data
- logging
- datafile 'D:\oracle\oradata\Oracle9i\user_data.dbf'
- size 50m
- autoextend on
- next 50m maxsize 20480m
- extent management local;
-
- /*第3步:建立用戶並指定表空間 */
- create user username identified by password
- default tablespace user_data
- temporary tablespace user_temp;
-
- /*第4步:給用戶授予權限 */
- grant connect,resource,dba to username;
-
-
-
- select t2.username,t2.sid,t2.serial#,t2.logon_time
- from v$locked_object t1,v$session t2 where t1.session_id=t2.sid ;
-
- alter system kill session 'sid,serial#';
- alter system kill session '151,14678';