91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ORACLE百例試煉四

發布時間:2020-06-24 08:51:30 來源:網絡 閱讀:277 作者:月幕 欄目:關系型數據庫

Oracle系列《四》:數據庫的設計分析


一、序列的使用 

在很多數據庫系統中都存在一個自動增長的列,如果在Oracle中要完成自動增長的功能,只能依靠序列完成


1、  要有創建序列的權限 create sequence 或 create any sequence

2、  創建序列的語法

CREATE SEQUENCE sequence  //創建序列名稱

       [INCREMENT BY n]  //遞增的序列值是n 如果n是正數就遞增,如果是負數就遞減 默認是1

       [START WITH n]    //開始的值,遞增默認是minvalue 遞減是maxvalue

       [{MAXVALUE n | NOMAXVALUE}] //最大值

       [{MINVALUE n | NOMINVALUE}] //最小值

       [{CYCLE | NOCYCLE}] //循環/不循環

       [{CACHE n | NOCACHE}];//分配并存入到內存中

 

  NEXTVAL 返回序列中下一個有效的值,任何用戶都可以引用

  CURRVAL 中存放序列的當前值

  NEXTVAL 應在 CURRVAL 之前指定 ,二者應同時有效

//解釋

{

Create 創建

Sequence 序列 seqEmop 序列名稱

Increment by 步長

Stat with 1 開始值

Maxvalue  最大值

Minvalue  最小值

 

Cycle 循環 nocycle 不循環

Cache 緩存   Cache<maxvalue-minvalue/increment by//一般不采用緩存

Nextvalue 下一個

Currval 當前值

}


//實例應用

//實現id的自動遞增

//第一步

create table cdpt(

id number(6),

name varchar2(30),

constraint pk_id primary key(id)

);

 

Create sequence seq_cdpt

Increment by 1

Start with 1

Maxvalue 999999

Minvalue 1

Nocycle

nocache

 

insert into cdpt values(seq_cdpt.nextval,‘feffefe’);

commit;

select * from cdpt;


修改序列的增量, 最大值, 最小值, 循環選項, 或是否裝入內存

alter SEQUENCE sequence  //創建序列名稱

       [INCREMENT BY n]  //遞增的序列值是n 如果n是正數就遞增,如果是負數就遞減 默認是1

       [START WITH n]    //開始的值,遞增默認是minvalue 遞減是maxvalue

       [{MAXVALUE n | NOMAXVALUE}] //最大值

       [{MINVALUE n | NOMINVALUE}] //最小值

       [{CYCLE | NOCYCLE}] //循環/不循環

       [{CACHE n | NOCACHE}];//分配并存入到內存中

修改序列的注意事項:

l   必須是序列的擁有者或對序列有 ALTER 權限

l   只有將來的序列值會被改變

l   改變序列的初始值只能通過刪除序列之后重建序列的方法實現

刪除序列

l   使用DROP SEQUENCE 語句刪除序列

l   刪除之后,序列不能再次被引用

Alter sequence seqEmp maxvalue 5;

Select seqEmp.nextval from dual;



二、同義詞的概念(了解) 

 

SQL> SELECT SYSDATE FROM dual; 

dual是一張虛擬表,該表在SYS用戶下有定義,可以使用以下語句查詢到 SQL> SELECT * FROM tab WHERE TNAME='DUAL'; 


此表在SYS下,但SCOTT用戶卻可以直接通過表名稱訪問,正常情況下我們是需要使用"用戶名.表名稱" 該情況就是同義詞的作用  

創建同義詞:

 

CREATE SYSNONYM 同義詞名稱 FOR 用戶名.表名稱';

 例如,將scott.emp 定義 emp 的同義詞 

SQL> CREATE SYSNONYM emp FOR scott.emp;

  

刪除同義詞 

SQL> DROP SYSNONYM emp; 

同義詞這種特性只適合于Oracle數據庫


三、用戶管理(*) 


 

創建用戶: CREATE USER 用戶名 IDENTIFIED BY 密碼; 

SQL> CREATE USER test IDENTIFIED BY test123; 

 

打開一個新的窗口使用test用戶登錄,發現其沒有session權限無法進行登錄,此時要進行授權 

SQL> GRANT CREATE SESSION TO test;


將創建SESSION權限給test用戶,之后該用戶可以正常登錄,但是其沒有創建表的權限

Oracle中可以將多個權限定義成一組角色,分配該角色給用戶即可 

在Oracle中主要提供了兩個角色:CONNECT、RESOURCE,將這兩個角色賦予test用戶 

SQL> GRANT CONNECT,RESOURCE TO test;


管理員對用戶密碼進行修改: 

SQL> ALTER USER test IDENTIFIED BY hello; 

在一般系統中,在用戶進行第一次登錄時可以修改密碼,可以使用如下方式 

ALTER USER 用戶名 PASSWORD EXPIRE; 

SQL> ALTER USER test PASSWORD EXPIRE; 

這時會提示用戶輸入舊口令及新的密碼


鎖住用戶和對用戶解鎖 

SQL> ALTER USER test ACCOUNT LOCK;

SQL> ALTER USER test ACCOUNT UNLOCK;


此時,想查詢SCOTT用戶下的表EMP,發現沒有權限,執行如下命令即可 

SQL> GRANT SELECT,DELETE ON scott.emp TO test;  

收回權限的命令: 

SQL> REVOKE SELECT,DELETE ON scott.emp FROM test;


嵌套表的概念(了解) 

 

嵌套表:在一個表中還包含另外一個子表 

首先為嵌套表指定類型,該類型需要單獨定義 

SQL> CREATE TYPE project_ty AS OBJECT(  priod NUMBER(4), proname VARCHAR2(30),  prodate DATE );/

 

該類型創建成后,不意味著此類型能夠直接使用,要為此類型指定一個名稱 

SQL> CREATE TYPE project_nt AS TABLE OF project_ty /

 

這樣就可以使用project_nt表示project_ty類型,現在根據此類型創建department表 

SQL> CREATE TABLE department(  

  deptno  NUMBER(2) PRIMARY KEY,

  dname  VARCHAR2(50) NOT NULL,

  projects project_nt 

)

NESTED TABLE projects STORE AS project_nt_tab_temp;

  

如果要進行數據插入的話 

SQL> INSERT INTO department(deptno,dname,projects) 

  VALUES(  1,'tech',  project_nt( 

  project_ty(1001,'ERP',SYSDATE),   

  project_ty(1002,'CRM',SYSDATE)  ) );

  

查詢部門表,可以返回多個項目 

SQL> SELECT * FROM department;  

如果需要查看一個部門的全部項目的話,查詢嵌套表 

SQL> SELECT * FROM TABLE 

 (SELECT projects FROM department WHERE deptno=1); 

 

更新編號為1001的項目名稱 

SQL> UPDATE TABLE (SELECT projects FROM department WHERE deptno=1) pro 

SET VALUES(pro)=project_ty('1001','APR',SYSDATE) WHERE pro.proid=1001;  

可變數組的概念:是嵌套表的升級版 ... (有用到再了解)



數據庫范式的概念

第一范式:所有的信息都集中在一張表上,例如 

 CREATE TABLE person( 

 pid  NUMBER(4) PRIMARY KEY,

 name VARCHAR2(50),  

 info VARCHAR(200) );

  

第一范式會出現問題,例如創建一張學生選課表 

CREATE TABLE selectCourse(  stuno VARCHAR2(50),  

 stuname VARCHAR2(50),  

 stuage NUMBER, 

 cname VARCHAR2(50),  

 grade NUMBER,  

 credit NUMBER );  

以上不僅所有的課程信息冗余了,而且還存在以下的問題: 

1、沒有學生選該門課,那么該門課就消失了 

2、課程本身有編號,按照以上設計,課程編號肯定重復 

3、要更改課程信息,則要修改許多記錄


使用第二范式進行修改 

CREATE TABLE student( 

 stuno  VARCHAR2(10) PRIMARY KEY,  

 stuname VARCHAR2(20),  

 stuage NUMBER );

  

CREATE TABLE course( 

 cid NUMBER(5) PRIMARY KEY,  

 cname VARCHAR2(20),  

 credit NUMBER );

  

CREATE TABLE selectCourse(  

stuno VARCHAR2(50),  

cid   NUMBER(5),  

grade NUMBER, 設置主-外鍵關系); 


以上設計解決了以下問題: 

1、學生不選課,課程不會消失 

2、更新課程的時候直接更新課程表 

3、所有關聯關系在關系表中體現  

這里是完成了多-多關系


使用第三范式: 

按照第二范式的設計一張學生表,包括學號、姓名、年齡、所在院校、學院地址、學院電話等 

會出現一個學生同時在多個學院同時上課,正常應該是:一個學院包含多個學生,一個學生屬于一個學院C 

 

CREATE TABLE collage( 

 cid NUMBER(40) PRIMARY KEY,  

 cname VARCHAR2(50),  

 caddress VARCHAR2(20),  

 ctel VARCHAR2(20) ); 

 

CREATE TABLE student( 

 stuno VARCHAR2(50) PRIMARY KEY,  

 stuname VARCHAR2(50),  

 stuage  NUMBER,  

 cid NUMBER(4),  建立主-外鍵關聯 ); 

以上是很明確的1對多的關系


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

吉木萨尔县| 封开县| 酒泉市| 平乡县| 东山县| 方山县| 泸西县| 五莲县| 麟游县| 周宁县| 墨玉县| 淮安市| 织金县| 巴林左旗| 达孜县| 乌兰浩特市| 旅游| 上饶县| 犍为县| 兴海县| 清苑县| 翼城县| 体育| 凤山市| 紫阳县| 台中市| 申扎县| 合山市| 昌邑市| 舒城县| 泊头市| 县级市| 邛崃市| 江山市| 丁青县| 沂源县| 南郑县| 巴东县| 日土县| 常山县| 台山市|