約束是表級的強制規定
有以下五種約束: - NOT NULL - UNIQUE - PRIMARY KEY - FOREIGN KEY - CHECK
作用范圍:
① 列級約束只能作用在一個列上② 表級約束可以作用在多個列上(當然表級約束也可以作用在一個列上)定義方式: 列約束必須跟在列的定義后面,表約束不與列一起,而是單獨定義。
非空(not null) 約束只能定義在列上
alter table [表名] add constraint [約束別名] [約束類別(字段名)]
向表emp2的id列中添加PRIMARY KEY約束(my_emp_id_pk)
ALTER table emp2ADD constraint my_emp_id_pk primary key(id);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;
alter table [表名] add constraint [約束別名] check([約束條件])
例子:給表中添加約束,使得salary大于0
alter table emp2 add constraint emp2_salary_min check(salary>0);
alter table [表名] drop constraint [約束別名]
當一個表進行操作的時候會影響和他有外檢約束的另外一張表
ON DELETE CASCADE(級聯刪除): 當父表中的列被刪除時,子表中相對應的列也被刪除ON DELETE SET NULL(級聯置空): 子表中相應的列置空假如表emp
有一個外鍵dept_id
連接到表dept
的dept_id
在創建表的時候就設置
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=80desc 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
即刻
使用組合函數的查詢創建的視圖為復雜視圖
實例:查詢所有部門的平均工資,賦值給empview2
SQL> create view empview2 as select department_id,avg(salary) avg_salary from employees group by department_id;在創建一個view的時候后面加上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 [視圖圖名]
選取前n行的值,或者第n到m行之間的值
實例說明: 現在想選取出來工資前十名的人員的信息 創建一個empview4
SQL> create view empview4 as select employee_id,last_name,salary from employeesorder by salary desc;此時要想選擇前十個,是無從下手的,這個時候就要借助rownum
這個偽列
例如:
但是此時還不能夠使用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.新聞熱點
疑難解答