麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > 綜合 > 正文

4.約束&&視圖

2024-07-21 02:53:05
字體:
來源:轉載
供稿:網友

什么是約束

約束是表級的強制規定

有以下五種約束: - NOT NULL - UNIQUE - PRIMARY KEY - FOREIGN KEY - CHECK

表級約束和列級約束

作用范圍:

① 列級約束只能作用在一個列上② 表級約束可以作用在多個列上(當然表級約束也可以作用在一個列上)

定義方式: 列約束必須跟在列的定義后面,表約束不與列一起,而是單獨定義。

非空(not null) 約束只能定義在列上

1.添加約束

alter table [表名] add constraint [約束別名] [約束類別(字段名)]

向表emp2的id列中添加PRIMARY KEY約束(my_emp_id_pk)

ALTER table emp2ADD constraint my_emp_id_pk primary key(id);

2. 修改約束

alter table modify [字段名] [約束]

或者

alter table modify [字段名] [constraint] [別名] [約束] - 例如:把 name 字段修改為 not null約束

alter table emp2 modify name not null;

修改的時候增加別名

alter table emp2 modify salary constraint my_emp2_salary_n not null;

3.check約束

alter table [表名] add constraint [約束別名] check([約束條件])

例子:給表中添加約束,使得salary大于0

alter table emp2 add constraint emp2_salary_min check(salary>0);

4.刪除約束

alter table [表名] drop constraint [約束別名]

5. 約束要注意的地方

非空約束(not null)只能定義在列級唯一約束(unique)的列值可以為空外鍵(foreign key)引用的列起碼要有一個唯一的約束

6.級聯操作

當一個表進行操作的時候會影響和他有外檢約束的另外一張表

ON DELETE CASCADE(級聯刪除): 當父表中的列被刪除時,子表中相對應的列也被刪除ON DELETE SET NULL(級聯置空): 子表中相應的列置空

假如表emp有一個外鍵dept_id連接到表deptdept_id

constraint dept_fk foreign key(dept_id) references dept(dept_id) on delete cascade;

在創建表的時候就設置

on delete cascade

on delete set null

視圖

視圖和子表類似,不同的是,對視圖的操作會影響原表的內容

視圖是一種虛表。 視圖建立在已有表的基礎上, 視圖賴以建立的這些表稱為基表。向視圖提供數據內容的語句為 SELECT 語句, 可以將視圖理解為存儲起來的 SELECT 語句. 視圖向用戶提供基表數據的另一種表現形式

簡單視圖和復雜視圖區別:

特性 簡單視圖 復雜視圖
表的數量 一個 一個或多個
函數 沒有
分組 沒有
DML操作 可以 有時候可以

簡單視圖

創建視圖

注意: 使用scott用戶登陸的時候默認是沒有創建視圖權限的 解決方式: 1. 打開cmd 2. 使用system用戶登錄:sqlplus system/root@orcl 3. 賦權限:grant create view to scott; 4. 此時scott用戶就獲得了創建view的權限

實例:創建視圖empview,來自于對employees的查詢

create view empview as select employee_id,last_name,salary from employees where department_id=80

desc empview查看一下

SQL> desc empview Name Null? Type ----------------------------------------- -------- --------------- EMPLOYEE_ID NOT NULL NUMBER(6) LAST_NAME NOT NULL VARCHAR2(25) SALARY NUMBER(8,2)

此時看到創建的視圖符合我們的意圖

修改視圖

添加上or replace即刻

create or replace view empview as select employee_id,last_name,salary from employees where department_id=80

復雜視圖

使用組合函數的查詢創建的視圖為復雜視圖

實例:查詢所有部門的平均工資,賦值給empview2

SQL> create view empview2 as select department_id,avg(salary) avg_salary from employees group by department_id;

使用權限

在創建一個view的時候后面加上with read only表示只讀; 例如:

create view empview3 as select employee_id,last_name,salary from employees where department_id=80 with read only;

此時進行uodate操作會提示錯誤

SQL> update empview3 set salary=8000 where last_name='Jhonson';update empview3 set salary=8000 where last_name='Jhonson' *ERROR at line 1:ORA-42399: cannot perform a DML Operation on a read-only view

刪除視圖

很簡單 drop view [視圖圖名]

TOP-N分析

選取前n行的值,或者第n到m行之間的值

實例說明: 現在想選取出來工資前十名的人員的信息 創建一個empview4

SQL> create view empview4 as select employee_id,last_name,salary from employeesorder by salary desc;

此時要想選擇前十個,是無從下手的,這個時候就要借助rownum這個偽列 例如:

select rownum,employee_id,last_name,salary from employeesorder by salary desc;

但是此時還不能夠使用rownum來作為查詢的條件,因為偽列是虛擬的

然后把上面的查詢結果,作為一個新的表再次查詢

select rownum,employee_id,salary from (select employee_id,salary from employees order by salary desc )where rownum < 11;

輸出:

ROWNUM EMPLOYEE_ID SALARY---------- ----------- ---------- 1 100 24000 2 101 17000 3 102 17000 4 145 14000 5 146 13500 6 201 13000 7 205 12000 8 147 12000 9 108 12000 10 168 1150010 rows selected.

注意 : 對 ROWNUM 只能使用 < 或 <=, 而用 =, >, >= 都將不能返回任何數據。 想要查詢第40–第50的員工信息,只能再次嵌套一次,將rawnum作為一個真實的一列查詢。

select * from( select rownum rn,employee_id,salary from (select employee_id,salary from employees order by salary desc ) ) where rn>40 and rn<50;

輸出結果:

RN EMPLOYEE_ID SALARY---------- ----------- ---------- 41 154 7500 42 171 7400 43 172 7300 44 164 7200 45 179 7000 46 161 7000 47 178 7000 48 155 7000 49 113 69009 rows selected.
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 欧美一区二区精品夜夜嗨 | 精品中文字幕久久久久四十五十骆 | 天堂二区| 永久免费不卡在线观看黄网站 | 97se亚洲综合在线韩国专区福利 | av电影免费在线 | 久久亚洲精品11p | 欧美成人二区 | 中国大陆一级毛片 | 久久久成人动漫 | 日本a大片| 国产精品成人av片免费看最爱 | 激情小说区 | 欧美中文字幕一区二区 | 91亚洲精品一区二区福利 | 国产精品久久久久久久亚洲按摩 | 中国成人在线视频 | 成人午夜在线免费视频 | 亚洲免费网站 | 羞羞色网站 | av手机免费在线观看 | 日韩中文字幕一区二区三区 | 毛片在哪看 | 日韩欧美综合在线 | 日韩在线欧美在线 | 国产乱弄| 久久久久久久久久亚洲 | 久久华人 | 免费视频一区 | 怦然心动50免费完整版 | 国产乱一区二区三区视频 | 午夜a狂野欧美一区二区 | 91av在线影院| 久久久久一本一区二区青青蜜月 | 老司机免费福利午夜入口ae58 | 欧美精品一区二区中文字幕 | 欧洲精品色 | 草草在线观看 | 伊人二本二区 | 久久免费视频5 | chengrenzaixian|