當前位置:首頁 » 硬碟大全 » 刪除表數據不緩存
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

刪除表數據不緩存

發布時間: 2023-03-23 20:56:05

A. 在excel中相關聯的兩個表,如何讓源表刪除數據,而目標表數據不變,謝謝!

選擇目標表中的數據區域,復制,右鍵,選裂態明擇性粘貼,把數值選擇上,確定,刪除源表數據。
這樣目標表中的公式已經變成了肆告數值,不會因源閉凱表數據改變而改變了。

B. sql 如何刪除表中的全部數據而不刪除表

Truncate table 清除表數據 和 表空間
delete from 不加where也可以清除數據 但不釋放空間

C. 第三十八章 SQL命令 DROP TABLE

刪除表及其數據(可選)。

DROP TABLE 命令刪除一個表及其對應的持久化類定義。如果該表是其架構中的最後一項,則刪除該表也會刪除該架構及其相應的持久化類包。

默認情況下, DROP TABLE 同時刪除表定義和表數據(如果存在)。 %NODELDATA 關鍵字允許指定刪除表定義,但不能指定刪除表的數據。

DROP TABLE 刪除與該表關聯的所有索引和觸發器。

要刪除表格,必須滿足以下條件:

可以使用 $SYSTEM.SQL.Schema.DropTable() 方法刪除當前名稱空間中的表。可以指定SQL表名。與 DROP TABLE 不同,此方法可以刪除未使用 [DdlAllowed] 定義的表。第二個參數指定是否也應該刪除表數據;默認情況下,不刪除數據。

可以使用 $SYSTEM.OBJ.Delete() 方法刪除當前名稱空間中的一個或多個表。必須指定投影表的永久類名(而不是SQL表名)。可以使用通配符指定多個類名。第二個參數指定是否也應該刪除表數據;默認情況下,不刪除數據。

DROP TABLE 命令是特權操作。用戶必須具有 %DROP_TABLE 管理許可權才能執行 DROP TABLE 。否則將導致 SQLCODE-99 錯誤,因為 %msg 用戶沒有 %DROP_TABLE 許可權。如果擁有適當的授予許可權,則可以使用 GRANT 命令分配 %DROP_TABLE 許可權。

即使 DROP TABLE 操作同時刪除了表和表數據,用戶也不必具有指定表的 DELETE OBJECT 許可權。

在嵌入式SQL中,可以使用 $SYSTEM.Security.Login() 方法以具有適當許可權的用戶身份登錄:

必須具有 %Service_Login:Use 許可權才能調用 $SYSTEM.Security.Login 方法。

DROP TABLE 不能用於通過薯信隱定義持久類創建的表,除非表類定義包括 [DdlAllowed] 。否則,操作將失敗,並出現 SQLCODE-300 錯誤,同時未為類 『Schema.tablename』啟用%msg DDL 。

刪除表不會刪除該表的對象許可權。例如,授予用戶在該表上插入、更新或刪除數據的許可權。

由於這些原因,通常建議在刪除表之前使用REVOKE命令撤消表中的對象許可權。

默認情況下, DROP TABLE 刪除表定義和表數據。此表數據刪除是原子操作;如果 DROP TABLE 遇到無法刪除的數據(例如,具有引用約束的行),則任何已執行的數據刪除都會自動回滾,結果是不會刪除表數據。

可以使用 $SYSTEM.SQL.Util.SetOption() 方法 DDLDropTabDelData 選項設置表數據刪除的系統范圍默認值。要確定當前設置,請調用 $SYSTEM.SQL.CurrentSettings() ,顯示 Does DDL DROP TABLE delete the table's data? setting .

默認值為 1 (「是」)。這是此選項的推薦設置。如果希望 DROP TABLE 在刪除表定義時不刪除表數據,請將此選項設置為0(「否」)。

可以在每個表的基礎上覆蓋數據刪除。刪除表時,可以使用 %NODELDATA 選項指定 DROP TABLE ,以坦搜防止自動刪除表數據。如果系統范圍的默認值設置為不刪除表數據,則可以通過使用 %DELDATA 選項指定 DROP TABLE 來逐個表刪除數據。

在大多數情況下, DROP TABLE 使用高效的終止范圍操作自動刪除表的數據。以下情況阻止使用 KILL EXTEND :表有引用它的外鍵;投影表的類是持久類的子類;類不使用默認存儲;有 ForEach = "row/object "觸發器;有引用非默認流欄位全局位置的流欄位。如果其中任何一個適用, DROP TABLE 將使用效率較低的 DELETE RECORD 操作刪除表的數據。

可數廳以使用 TRUNCATE TABLE 命令刪除表的數據,而不刪除表定義。

DROP TABLE 語句獲取表的獨占表級鎖。這可以防止其他進程在表刪除過程中修改表定義或表數據。這個表級鎖足以刪除表定義和表數據; DROP TABLE 不會獲得表數據的每一行的鎖。此鎖在 DROP TABLE 操作結束時自動釋放。

默認情況下,如果在引用嘗試刪除的表的另一個表上定義了任何外鍵約束,則不能刪除該表。在刪除它們引用的表之前,必須刪除所有引用的外鍵約束。在嘗試 DROP TABLE 操作之前未刪除這些外鍵約束會導致 SQLCODE-320 錯誤。

此默認行為與限制關鍵字選項一致。外鍵約束不支持 CASCADE 關鍵字選項。

要更改此默認外鍵約束行為,請參考 SET OPTION 命令的 COMPILEMODE=NOCHECK 選項。

刪除表會自動清除所有相關的高速緩存查詢,並清除 %SYS.PTools.StatsSQL 生成的查詢信息。刪除表會自動清除任何相關查詢的所有SQL運行時統計信息(SQL Stats)信息。

要確定當前命名空間中是否存在指定表,請使用 $SYSTEM.SQL.Schema.TableExists() 方法。

默認情況下,如果嘗試刪除不存在的表, DROP TABLE 會發出 SQLCODE-30 錯誤。這是推薦的設置。要確定當前設置,請調用 $SYSTEM.SQL.CurrentSettings() ,它顯示允許DDL刪除不存在的表或視圖設置。默認值為 0 (「否」)。如果此選項設置為 1 (「是」),則不存在的表的 DROP TABLE 不執行任何操作,也不會發出錯誤消息。

在管理門戶、系統管理、配置、SQL和對象設置中,通過選中忽略冗餘DDL語句復選框,可以在系統范圍內設置此選項(以及其他類似的創建、更改和刪除選項)。

下面的嵌入式SQL示例創建名為 SQLUser.MyEmployees 的表,然後將其刪除。此示例指定在刪除該表時不刪除與該表關聯的任何數據:

D. 手機清除用戶數據和清除緩存有什麼區別

手機清除用戶數據和清除緩存只有一個區別,即清除數據的內容不同。

手機清除用戶數據類似於恢復出廠設置,刪除了所有用戶保存的數據。清除緩存只是刪除了應用軟體的緩存資源。

清除緩存,即手機應用軟體「清除數據」功能,就是把在那個軟體上面使用的歷史記錄還有在軟體上面產生的一切數據全部清空掉,等於就恢復了在剛剛下載這個軟體時候的樣子,對於其他的軟體以及數據沒有任何影響。

(4)刪除表數據不緩存擴展閱讀

手機清除用戶數據會將手機里的數據全部清空掉,相當於將手機恢復到購買時,完全沒有任何的數據。

手機清除緩存,其實要明白緩存就是數據交換的緩沖區(稱作Cache),比如說當某一硬體要讀取數據時,這個時候就要先從緩存中查找需要的數據,如果找到了則直接執行,如果是找不到的話則從內存中找。由於緩存的運行速度比內存快得多,故緩存的作用就是幫助硬體更快地進行運行而已。

緩存是CPU的一部分,存在於CPU中,而CPU存取數據的速度則非常的快,一秒鍾能夠存取、處理十億條指令和數據,而內存就慢很多,快的內存能夠達到幾十兆就不錯了,可見兩者的速度差異是多麼的大,緩存是為了解決CPU速度和內存速度的速度差異問題

E. 如何清理mysql資料庫緩存數據

1、打開mysql的客戶端 這里使用navicat,連接資料庫,等到navicat主頁面,雙擊需要操作的資料庫連接。

F. 使用javascript刪除表格中一行數據後,出現的問題

1、在Asp頁面首部<head>加入

以下為引用的內容:
Response.Buffer = True
Response.ExpiresAbsolute = Now() - 1
Response.Expires = 0
Response.CacheControl = "no-cache"
Response.AddHeader "Pragma", "No-Cache"

2、在HtML代碼中加入

以下為引用的內容:
<HEAD>
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="0">
</HEAD>

3、在重新調用原頁面的時候在給頁面傳一個參數 Href="****.asp?random()"

前兩個方法據說有時會失效,而第三種則是在跳轉時傳一個隨機的參數! 因為aspx的緩存是與參數相關的,如果參數不同就不會使用緩存,而會重新生成頁面,每次都傳一個隨機的參數就可以避免使用緩存。這個僅適用於asp&asp.net

4、在jsp頁面中可使用如下代碼實現無緩存:

以下為引用的內容:
response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
response.setHeader("Pragma","no-cache"); //HTTP 1.0
response.setDateHeader ("Expires", 0); //prevents caching at the proxy server

這些代碼加在<head> </head>中間具體如下

以下為引用的內容:
<head>
<%
response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
response.setHeader("Pragma","no-cache"); //HTTP 1.0
response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
%>
</head>

5、window.location.replace("WebForm1.aspx");

參數就是你要覆蓋的頁面,replace的原理就是用當前頁面替換掉replace參數指定的頁面。

這樣可以防止用戶點擊back鍵。使用的是javascript腳本,舉例如下:

以下為引用的內容:

a.html

<html>
<head>
<title>a</title>
<script language="javascript">
function jump(){
window.location.replace("b.html");
}
</script>
</head>
<body>
<a href="javascript:jump()">b</a>
</body>
</html>

b.html

<html>
<head>
<title>b</title>
<script language="javascript">
function jump(){
window.location.replace("a.html");
}
</script>
</head>
<body>
<a href="javascript:jump()">a</a>
</body>
</html>

前4種只是清空了cache,即存儲在Temporary Internet Files文件夾中的臨時文件,而第五種則是使用跳轉頁面文件替換當前頁面文件,並沒有清空cache,也就是說Temporary Internet Files產生了相關的臨時文件,兩者搭配使用。

G. access資料庫刪除數據後是將原來佔有的空間釋放了嘛

資料庫唯一標識,即使記錄刪除了,但是資料庫還是有記憶功能,就像即使你把硬碟上的文件或者文件夾shift+delete徹底刪除後,一樣可以通過軟體來恢復這些文件。不過資料庫的恢復我沒償試過。可能有這種軟體

ACCESS自動編號如何恢復從1開始的方法(1)
重置單個表中的「自動編號」欄位:要重置「自動編號」欄位值,可以使用方法 1 或方法 2。

方法 1

可以重置「自動編號」欄位值,使其與表中的一個欄位相對應。為此,請按照下列步驟操作:

1. 從主表中刪除「自動編號」欄位。記下「自動編號」欄位名稱。
2. 在左窗格中單擊「查詢」。在右窗格中雙擊「在設計視圖中創建查詢」。
3. 在「顯示表」對話框中,選擇主表。單擊「添加」,然後單擊「關閉」。
4. 在主表的表視圖中雙擊所需欄位,以選擇該欄位。
5. 選擇需要的「排序」順序。
6. 在「查詢」菜單中,單擊「生成表查詢」。在「表名稱」文本框中鍵入新的表名稱,然後單擊「確定」。
7. 在「查詢」菜單上,單擊「運行」。
8. 將顯示帶有以下文本的對話框:「您正准備向新表粘貼 # 行。」單擊「是」以插入行。
9. 在「文件」菜單上,單擊「關閉」。單擊「否」關閉「生成表查詢」窗口。
10. 在左窗格中單擊「表」。右鍵單擊新表,然後單擊「設計視圖」。
11. 在表的「設計」視圖中,添加與步驟 1 中刪除的欄位名稱相同的「自動編號」欄位。將此「自動編號」欄位添加到新表中,然後保存該表。
12. 關閉「設計」視圖窗口。
13. 重命名主表。將新表名稱重命名為主表名稱。

方法 2

也可以使用方法 2 來重置「自動編號」欄位值,請按照下列步驟操作:

1. 從主表中刪除「自動編號」欄位。記下「自動編號」欄位名稱。
2. 復制主表的結構,然後搏褲稿創建新表。
3. 在左窗格中單擊「查詢」。在右窗格中單擊「在設計視圖中創建查詢」。
4. 在「顯示表」對話框中,選擇主表。單擊「添加」,然後單擊「關閉」。
5. 要選擇欄位,請雙擊需要的欄位。在主表的「表」視圖中對除了「自動編號」欄位外的所有欄位進行此操作。
6. 在「查詢」菜單上,單擊「追加查詢」。這將更改查詢類型。
7. 從「表名稱」列表中,選擇您在步驟 1 中創建的新表。單擊「確定」。
8. 在「查詢」菜單上,單擊「運行」。
9. 將顯示帶有以下文本的對話框:「您正准備追加 # 行。」單擊「是」將行追加到新表中。
10. 在「文件」菜單上,單擊「關閉」。單擊「否」關閉「追加查詢」窗口。
11. 在左窗格中單擊「表」。右鍵單擊新表,然後單擊「設計視圖」。
12. 在表的「設計」視圖中,添加與步驟 1 中刪除的欄位名稱相同的「自動編號」欄位。將此「自動編號」欄位添加到新表中,然後保存該表。
13. 關基孝閉「設計」視圖窗口。
14. 重命名主表。將新表名稱重命名為主表名稱。

重置帶引用表的表中的「自動編號」欄位

下面的步驟說明如何為具有引用表的表重置「自動編號」欄位。如果有多個引用表,則必須對每個引用表執行下列步驟。

1. 刪除表之間的關系。
2. 將主表的「自動編號」欄位設為數字數據類型。刪除主鍵。
3. 在主表中創建數據類型為「自動編號」的新欄位。保存該表。
4. 在引用表中創建數據類型為數字的新欄位。保存該表。
5. 要創建更新查詢,以將引用表中的新欄位更新為主表中的新「自動編號」欄位,請按照下列步驟操作:

a. 在左窗格中單擊「查詢」。在右窗格中單擊「在設計視圖中創建查詢」。這將創建新查詢。
b. 在「顯示表」對話框中,選擇主表和引用表。單擊「添加」來添加主表和引用表。單擊「關閉」。
c. 單擊主表中以前鏈接到引用表的欄位。使用拖放功能將該欄位放到引用表中以前鏈接的欄位上。這樣將在這兩個表之間創建基於原始鏈接欄位的聯接。
d. 在「查詢」菜單上,單擊「更新查詢」。
e. 雙擊引用表中的新欄位,將其添加到欄位列表中。
f. 在「更新到」欄位中,鍵入 [主表名].[新自動編號欄位],以更新引用表中的新欄位值。
g. 在「查詢」菜單上,單擊「運行」。
h. 將顯示帶有以下文本的對話框:「您正准備更新 # 行。」單擊「是」將行追加到新純消表中。
i. 在「文件」菜單上,單擊「關閉」。單擊「否」關閉「更新查詢」窗口。

6. 從主表和引用表中刪除原始鏈接欄位。
7. 將新「自動編號」欄位重命名為原始名稱。
8. 重新創建主鍵以及表之間的關系。

此過程重置「自動編號」欄位,然後用正確的鍵值更新引用表。

ACCESS自動編號從1開始-如何讓access自動編號重新從1開始排序的方法(2)
方法一:
刪個那個自動編號的欄位,再建一個同樣的自動編號欄位即可。
方法二:
自動編號是一直增加的(每次都加1),你再增加一條記錄它的編號會在前面的基礎上加1(刪除的也算),如果你編號為1的記錄被刪除了,你想再要從1開始,可以打開Access資料庫,選擇工具,再選擇資料庫實用工具,單擊壓縮和修復資料庫,這樣就OK了.
方法三:(沒試過)
1、在access里新建一個查詢。
2、把視圖改為sql視圖。
3、在裡面輸入
ALTER TABLE 表名 ALTER COLUMN [自動編號欄位名] COUNTER (你要的初始值, 1)
例如:
ALTER TABLE [user] ALTER COLUMN [id] COUNTER (1001, 1)
4、運行後,編號就從1001開始了。

H. sql怎麼刪除一個表中的所有數據

刪除表數據有兩種方法:delete和truncate。具體語句如下:

一、RUNCATE TABLE name :

刪除表中的所有行,而不記錄單個行刪除操作。在這個指令之下,表格中的資料會完全消失,可是表格本身會繼續存在。

TRUNCATE TABLE 的語法:TRUNCATE TABLE name ,參數 name 是要截斷的表的名稱或要刪除其全部行的表的名稱。

二、Delete from tablename where 1=1

1、delete語法:

DELETE FROM 表名稱 WHERE 列名稱 = 值。

2、刪除所有行:

可以在不刪除表的情況下刪除所有的行。這意味著表的結構、屬性和索引都是完整的:DELETE FROM table_name。

(8)刪除表數據不緩存擴展閱讀:

truncate和delete的共同點及區別:

1、 truncate和 delete只刪除數據不刪除表的結構(定義) 。

2、delete語句是dml,這個操作會放到rollback segement中,事務提交之後才生效;如果有相應的trigger,執行的時候將被觸發。

truncate是ddl, 操作立即生效,原數據不放到rollback segment中,不能回滾. 操作不觸發trigger。

3、delete語句不影響表所佔用的extent, 高水線(high watermark)保持原位置不動 。truncate 語句預設情況下見空間釋放到 minextents個 extent,除非使用reuse storage; truncate會將高水線復位(回到最開始)。

4、速度,一般來說: truncate >delete 。

I. 資料庫如何刪除表中的一段區間內的所有數據

1 付鍵 也就是FK formary key

程序交流中心,這是專門為新手學習設立的論壇

二、SQL
Structur query language
結構化查詢語言,是操作關系型資料庫中的對象。

DDL(Data definition language 數據定義語言),用於建表或刪表操作,以及對表約束進行修改
create table , alter table , drop table 對表結構的增刪操作。
DML(Data manipulation language 數據操作語言),向表中插入紀錄,修改紀錄
insert , update , delete , merge
transaction ,事務控制語言,由DML語句組成的,commit; ,rollback;
select 查詢語句
dcl 授權語句 grant

三、Oracle
DBMS 資料庫管理系統
有Oracle提供,還提供AS,應用伺服器
DBA 資料庫管理員

四、相關操作
1、sqlplus 訪問資料庫命令(本地訪問/遠程訪問),和資料庫建立連接的命令,是資料庫操作的環境
sqlplus 用戶名/密碼
2、show user 顯示當前用戶的用戶名
改變身份可以直接connect 用戶名/密碼 --- 這個是sqlplus命令
在sqlplus中可以使用 ! 可以在shell和sqlplus間切換,!shell命令 可以在sqlplus中使用shell命令。
實際上是sqlplus開了子進程來執行shell命令。
3、Oracle資料庫中的表分兩類:用戶表(用戶使用操作的表),系統表(資料庫系統維護的表,也叫數據字典)
對用戶表的DDL操作出發了對系統表的DML操作!

五、基本語法

1、select查詢語句

select table_name from user_tables;(查詢系統表)
以上的查詢語句就是查詢本用戶下所擁有的所有表的表名。

投影操作,只查看選擇的欄位的信息。
選擇操作,查看欄位中的特定某些信息。
聯接操作,多表查詢,通過表間連接,查尋出多表中的信息

(1)select table_name from user_tables;(查詢系統表)
以上的查詢語句就是查詢本用戶下所擁有的所有表的表名。

(2)sqlplus的buffer中會緩存最後一條sql語句,可以使用"/"來執行這最後一條sql語句,也可以使用
edit命令來編輯最後一條sql語句。
l命令(list)(sqlplus命令)可以顯示buffer中最後一條命令。

sqlplus命令可以縮寫

(3)desc [表名]
這是一條sqlplus命令,注意他不是sql語句,這條命令用於查看錶的結構。descript的縮寫
[欄位名] [欄位的類型],這是使用完desc命令後顯示的表結構。

(4)select [表的欄位名1],[表的欄位名2], ... from 表名;
select * from 表名; 查尋表中所有欄位的信息

(5)關鍵字不等拆分,sql語句,以及表名,欄位名是大小寫不敏感的。
sql語句要以";"結尾,來表示sql語句結束,如果不加";"系統不會執行此條sql語句,並提示。
在Oracle中字元顯示是左對齊,數值右對齊。

(6)在select 語句中可以使用數學表達式。
select [表達式(必須包含本表欄位名)],[...],.... from 表名;
運算的優先順序的先乘除後加減,同級自左向右運算,括弧改變優先順序。

(7)別名
select [欄位名或表達式] ["別名"],[...] ["..."],.... from 表名;
可以通過在欄位名或表達式後加空格"別名",可以給列,或者表達式結果其別名。
表達別名必須加雙引號。

(8)字元串拼接使用||符號
select 目標欄位名||" "||目標欄位名 from 表名;

注意:在Oracle中的字元串要用'..'包含
別名中需要使用空格,或是大小寫敏感時需要用".."包含。

練習:
自己寫一條SQL語句,執行的結果是select * from ...;
其中...是每張系統表的表名
即在每張系統表的表名前加「select * from」 ,後加「;」
select 'select * from '||table_name||';' from user_tables;

2、處理錯誤
(1)!oerr ora [錯誤號] ,系統可以顯示錯誤的原因和如何修改。如果命令錯誤輸入可以使用edit或ed來修改輸入錯誤。
實際上是在編輯緩存文件中的最後一條sql語句。
也可以使用 (change) c /錯誤欄位/正確欄位,來進行替換操作進行修改。
只有在Linux平台使用
! 相當於 host ,沒有斷連接,只是切換了一下,執行shell命令
(2)edit命令來編輯最後一條sql語句。

3、sqlplus設置
set pause on 回車響應,分屏顯示,只在本會話中有效
set pause off 關閉分屏顯示。
set pause "..." 設置分屏顯示的提示信息。
set pause on 先輸出提示信息,回車響應,分屏顯示
set head off 提頭輸出關閉
set feed off 結尾輸出關閉
set echo off 回寫關閉
spool 文件名.sql 寫入指定文件
spool off 關閉寫入。

4、sql腳本
也就是在文件中寫有sql語句的文件,可以在sqlplus中運行。
引入sql腳本
sqlplus 用戶名/密碼 @sql腳本 (注意:在用戶名密碼輸入結束後一定要加空格然後再寫@sql腳本)
在腳本中最後一行寫上「exit」,則運行完腳本以後,回到shell上

5、
Oracle中的空值 空值會當無窮大處理,其實空值根本就不會存儲,只是看作是無窮大。

Oracle中控制處理函數 NVL(欄位名,值),這個欄位中的空值替換為指定值,如果不為空,則會返回其原值。
例:select (salary*12)*(NVL(commission_pct,0)/100+1) salary,first_name from s_emp;

distinct關鍵字,去掉重復行(這個關鍵字會觸發排序操作)
例: select distinct dept_id,title from s_emp;
dept_id與title的聯合不唯一
注意:distinct,關鍵字之後會對from之前的欄位進行排重操作。

6、column命令 --- sqlplus命令
column命令 列格式的定義

column 目標列名 查看這個類是否定義了格式

column 目標列名 format a.. 設置列寬。
column last_name heading 'Employee|Name' FORMAT A15
設置題頭
這其中的'|'是換行符

column salary justify left format $99,990.00
定義數字顯示格式
注意:如果不滿足顯示的格式,就會把數據顯示為"#"

column salary justify left format $00,000.00
會出現$00,928.00 ,用0補齊

column 列名 clear (清除列格式定義)

注意:只有sqlplus命令才有簡寫,並且在使用sqlplus命令時結尾也不能加分號。

六、選擇操作
1、order by
排序子句 ASC(默認,升序) DESC(降序)
order by 目標列名(別名) 排序順序(不寫排序順序,會默認為升序排序)

例:select first_name from s_emp order by first_name;
select first_name from s_emp order by first_name desc;

注意:升序空值在結果的末尾,降序空值在結果的最前面。

2、where子句

where子句使用在 select ... from ... 後面,用來選擇所需(符合條件的)的記錄

where後面跟的是表達式 也就是 XXX=XXX, XXX between X and X ,XXX in(X,X,X)
like '...' 通配查詢

between ... and ... ,表示結果在這之間,between and是一個閉區間,
也就相當於... <= ... and ... >= ... 。
!=,<>,^=,這三個都標識不等於,<=,>=,=,這些運算符都可以使用。
... in (va1,val2,...) 判斷結果是否在這個枚舉中存在
like '...' 字元串通配查詢,'%'表示多個字元,'_',表示一個字元。
注意:轉義的用法:like 『S\_%』 escape 『\』
... and ... 表示只有兩個條件同時滿足
... or ... 表示條件只要滿足其中只一就可以
all ... 是要求都滿足條件。
not .....,則是可以與以上的條件產生反效果。
空值會對not in造成影響,也就是不等於任何值,但是空值例外。
... is null 使用來判斷值是否為空。

注意:Oracle中的字元串是嚴格區分大小寫的。

(1)注意數據類型,數字類型直接寫,字元用'......' ,預設格式的Date可以用'......',只有別名
才用" "包含。
(2)選擇合適的運算符

七、單行函數
1.字元函數

字元是大小寫敏感的
轉小寫 lower(欄位名) --- 其中的參數可以是一個字元串常量或是一個欄位名
轉大寫 upper(欄位名)
首字母大寫 initcap(欄位名)
字元串拼接 concat(欄位1, 欄位2)
截取子串 substr(欄位名, 起始位置,取字元個數)
al表,是專門用於函數測試和運算的,他只有一條記錄
字元串拼接 concat(...,....)
求指定子串 substr(...,起始位置,取字元個數)
可以使用"-"表示從右向左取,取的時候可以從左往友取。
例:select substr(first_name,-2,2) sub from s_emp;(取後兩個)
select substr(first_name,2,2) sub from s_emp;(取前兩個)

2,數值函數

四捨五入 round(數據,保留小數點後幾位)
可以用負數表示小數點前,0,表示小數點後第一位,也就是保留個位,-1表示個位(保留到十 位)。
例:select round(15.36,1) from al;
截取數字函數 trunc(數據,保留的位數(小數點後位數)) 截取個位之後補0
例:select trunc(123.456,1) from al;

3,日期函數

日期格式,
全日期格式 世紀信息,年月日,時分秒。
預設日期格式,日-月-年 dd-mon-rr
修改當前會話的日期格式,會按照指定的格式輸出日期
alter session set nls_date_format='yyyy mm dd hh24:mi:ss';

返回當前日期 sysdate
例:select sysdate from al;
select sysdate+1 from al; 獲得明天的日期,加1,單位是天

日期是格式敏感的
求兩個日期間相隔了多少個月 months_between(date1,date2)
加減指定數量的月份 add_months(date,月數),月數可以為負,負值就是減去相應的月數。
從date日期開始的第一個星期五 next_day(date,FriDay)
返回月末的日期 last_day(date)
截取日期 trunc(date,'年或月或日或時分秒')
例:select next_day(sysdate,2) from al;
例:select trunc(add_months(sysdate,1),'month') from al;
ROUND('25-MAY-95','MONTH') 01-JUN-95
ROUND('25-MAY-95 ','YEAR') 01-JAN-95
TRUNC('25-MAY-95 ','MONTH') 01-MAY-95
TRUNC('25-MAY-95 ','YEAR') 01-JAN-95

練習:
返回下個月的第一天的日期
select round(last_day(sysdate),'MONTH') from al;
select add_months(trunc(sysdate,'MONTH'),1);

4,不同數據類型間轉換函數

將日期轉成字元 tochar(date,'日期格式')
日期格式要用有效格式,格式大小寫敏感 'yyyy mm dd hh24:mi:ss',
'year'(全拼的年),'mm'(數字表示的月) 'month'(全拼的月),'day'(星期的全拼),'ddspth' (日期的全拼) 'yy mm dd'
例:select to_char(sysdate,'yyyy mm dd hh24:mi:ss')from al;

將字元轉換成數字 to_number('...')

將數字轉字元to_char(number,'fmt') fmt是數字格式

將字元串轉成日期 to_date('...','日期格式')
例:select to_char(to_date('2006 11 03','yyyy mm dd'),'dd-month-yy') from al;

1、等值連接

select [表別名1.欄位名1],[表別名2.欄位名2],...
from 表1 表別名1 ,表2 表別名2
where 表別名1.欄位名3=表別名2.欄位名4;
表連接時,當表與表之間有同名欄位時,可以加上表名或表的別名,加以區分,使用時要用
表名.欄位名或表別名.欄位名(列名)。當表的欄位名是唯一時,可以不用加上表名或表的別名。

注意:當為表起了別名,就不能再使用表名.欄位名。

例:select a.first_name,a.last_name,b.name
from s_emp a,s_dept b
where a.dept_id=b.id;

2、非等值連接

select [表別名1.欄位名1],[表別名2.欄位名2],...
from 表1 表別名1 ,表2 表別名2
where 表別名1.欄位名3 ..... 表別名2.欄位名4

....可以使比較運算符,也可以使其他的除了'='的運算符

例:select e.ename, d.grade,e.sal
from emp e,salgrade d
where e.sal between d.losal and d.hisal;

3、自連接

用別名把一張表中的數據分成兩部分,然後在使用條件過濾。
select [表別名1.欄位名1],[表別名2.欄位名2],...
from 表1 表別名1 ,表1 表別名2
where 表別名1.欄位名3=表別名2.欄位名4;

例:select a.first_name ename,b.first_name cname
from s_emp a,s_emp b
where a.manager_id=b.id;

以上所提到的表連接,都叫做內連接,嚴格匹配兩表的記錄。

4、外連接

會使用一方表中的所有記錄去和另一格表中的記錄按條件匹配,空值也會匹配,這個表中的所有記錄都會顯示,資料庫會模擬出記錄去和那些不匹配的記錄匹配。

例:select a.first_name enamei,a.id,b.first_name cname,b.id
from s_emp a,s_emp b
where a.manager_id=b.id(+);
即用a表中的數據去匹配b表的,若b表中有null,系統模擬紀錄與其匹配

注意:要把那一方的記錄全部都顯示出來,還有注意條件(+)跟在要全部選出的對端。

外連接的應用:
列出哪個部門沒有員工
select e.deptno,d.deptno
from emp e,dept d
where e.deptno(+)=d.deptno
and e.deptno is null;

三、組函數

group 組
group by 分組子句,按指定的分組規則分組 ,這個group by 子句可以跟在 select 語句後或是 having後面。
group by子句也會出發排序操作,會按分組欄位排序。

select [組函數或分組的欄位名] ,... from 表名 group by [欄位名1],[欄位名2],.....;

例:select avg(salary) from s_emp group by dept_id;

注意:組函數可以處理一組數據,返回一個值。
組函數會忽略空值。

avg(..),求平均值,sum(..),求和 這兩個函數的參數只能是number型的。

以下所提到的函數可以使用任意類型做參數。
count(..),用來統計記錄數,可以使用排重命令。count(...)默認使用的是all。
max(..),min(..)求最大值和最小值,
count(*),統計表中記錄數。

例:select max(b.name),avg(a.salary), max(c.name)
from s_emp a,s_dept b,s_region c
where a.dept_id=b.id and b.region_id=c.id
group by b.dept_id;

注意:只要寫了group by子句,
*** select後就只能用group by後的欄位或者是組函數。 ***
where子句只能夠過濾記錄,放單行函數。

having子句可以過濾組函數結果或是分組的信息,且寫在group by子句後。

例:
select max(b.name),avg(a.salary), max(c.name)
from s_emp a,s_dept b,s_region c
where a.dept_id=b.id and b.region_id=c.id
group by b.id
having sum(a.salary)>4000;

column 也可以定義有別名的列的格式。
column "別名" 格式定義

注意:要先過濾掉不需要的記錄,然後再進行分組操作,提高效率。

四、子查詢

子查詢,就是可以嵌在任何的sql語句中的select語句。

在select語句中嵌套子查詢時,會先執行子查詢。一般的會將子查詢放在運算符的右邊。

注意:在使用子查詢時,要注意這個運算符是單行的(也就是只能是單值),還是多行運算符(范圍,多值,in)。
配合使用子查詢返回的結果必須符合運算符的用法。

例:
select first_name,title
from s_emp
where title=any(select title from s_emp
where last_name='Smith')
and upper(last_name)!='SMITH';

select first_name,title
from s_emp
where title in (select title from s_emp
where last_name='Smith')
and upper(last_name)!='SMITH';

五、將業務需求轉換成可操作的表

一: 需求分析
二: 畫E-R圖
三: 轉換成表關系
四: 割接(新老系統交接)
五:

E-R圖屬性:
* 為強制且非空屬性
o 可選屬性(可以有值也可以沒有)
#* 表示此屬性唯一且非空

實體關系:
mastbean maybean

數量關系: 多對一關系
一對多關系
一對一關系
多對多關系

第一範式,所有的屬性都必須是單值,也就是屬性只表示單一的意義。(記錄可以重復,沒有任何限制)
第二範式,屬性要求唯一且非空,(記錄不可重復,但是數據可能會出現冗餘)。
第三範式,非主屬性只能依賴於主屬性,不能依賴於其他非主屬性。(解決數據冗餘問題)

六、約束

約束是針對表中的欄位進行定義的。

primary key (主鍵約束 PK)保證實體的完整性,保證記錄的唯一
主鍵約束,唯一且非空,並且每一個表中只能有一個主鍵,有兩個欄位聯合作為主鍵,只有兩個欄位放在一起唯一標識記錄,叫做聯合主鍵。

foreign key (外建約束 FK)保證引用的完整性,
外鍵約束,外鍵的取值是受另外一張表中的主鍵或唯一值得約束,不能夠取其他值,只能夠引用主鍵會唯一鍵的值,被引用的表,叫做parent table(父表),引用方的表叫做child table(子表),要想創建子表,就要先創建父表,後創建子表,記錄的插入也是如此,先父表後子表,刪除記錄,要先刪除子表記錄,後刪除父表記錄,要修改記錄,如果要修改父表的記錄要保證沒有被子表引用。要刪表時,要先刪子表,後刪除父表。

unuque key(唯一鍵),值為唯一

index(索引)是資料庫特有的一類對象,view(示圖)
典型的一對多 class 對應多個學生。
student table class table
______________________________ _________________________
| id | name | address| class_id| | id |class_desc|class_num|
|(PK)|______|________|___(FK)__| |(pk)|__________|_________|
| | | | | | | | |

一對一

student tabel shenfenzheng table
____________________ _________________________________
| id | name | address| | s_id |shenfen_desc|shenfen_num|
|(PK)|______|________| |(PK,FK)|____________|___________|
| | | | | | | |

多對多

student tabel zhongjian table kecheng table
____________________ _________________________________ __________________
| id | name | address| | s_id |shenfen_desc|shenfen_num| | kid | kechengname|
|(PK)|______|________| |(FK,FK)|____________|___________| | (PK)|____________|
| | | | |聯合主鍵| | | | | |

引用對方表的主鍵,當作本身的主鍵,所以這個表的主鍵,既是主鍵又是外建

建表和其他相關操作

DDL語句

創建表:
create table 表名 ( 欄位名1 類型(數據長度)(default ...) 約束條件, 欄位名2 類型(數據長度) 約束條件 );

Oracle資料庫中的數據類型

varchar(長度),可變長字元串,char(長度) 定長
number(..,..),number 表示浮點數,或者是整數
long 大對象,clog 字元的大對象,相當於文本文件在表中只存放一個相當於只針對值
blog 二進制的大對象,也是以相當於指針的形式存放的。
primary key約束:
主鍵約束的定義:
第一種定義形式:
create table test(c number primary key ); 列級約束
第二種定義形式:
create table test(c number , primary key(c) ) ; 表級約束
create table test( c1 number constraints pkc1 primary key ); 此約束有名字: pkc1
create table test(c number , c2 number , primary key (c ,c1) ) ; 用表級約束可以實現聯合主鍵

foregin key (fk) 外鍵約束:
(先定義父表,再定義子表)
carete table parent(c1 number primary key );
create table child (c number primary key , c2 number references parent(c1));
或表級約束定義:
create table child( c number primary key , c2 number , foreign key(c2) references parent(c1));

如果兩個欄位都為唯一且非空,這時可以定義成UK+NOT NULL

(PK或UK)一對多(FK)
(PK+UK)一對一(FK) 或 (PK)一對一(PK)
多對對多關系,一般都通過一張中間表來分解成兩個一對多的表

建立表
create table[schema]table
schema: 一個用戶對應一個schema 不同用戶下的表不能互相查看

select count(*) from s_dept; <===> select count(*) from sd0611.s_dept;

一個表中只能存儲一個LONG類型
CLOB 存儲大的文本對象
BLOB 存儲大的二進制對象

create table test(c1 number primary key); 設置主鍵
create table test(c1 number constraints test_c1 primary key); 定義約束名,默認約束名為SYS_ 在列後面定義約束稱為列級約束
create table test(c1 number primary key(c1)); 所有列定義完後再定義約束稱為表級約束(能定義聯合主鍵)
cretae table test(c1 number,c2 number,priary key(c1,c2)); 定義聯合主鍵
create table child(c1 number primary key); 先要定義父表
create table child(c1 number primary key, c2 number references parent(c1)); 然後定義子表 references parent定義外鍵
create table child(c1 number primary key, c2 number references parent(c1) on delete cascate); on delete cascate為級聯刪除
create table child(c1 number primary key, c2 number references parent(c1) on delete set null); on delete set null刪除後將外鍵置空
create table child (c1 number primary key, c2 number,foreignkey(c2) references parent(c1));

二、約束

1、非空約束(not null)
這是一個列級約束
在建表時,在數據類型的後面加上 not null ,也就是在插入時不允許插入空值。
例:create table student(id number primary key,name varchar2(32) not null,address varchar2(32));

2、unique 唯一約束
唯一約束,是會忽略空值的,唯一約束,要求插入的記錄中的值是為一的。
例:create table student(id number,name varchar2(32),address varchar2(32),primary key (id),unique (address));
如果創建一個uk,系統自動建一個唯一索引

3、pk、uk
Oralce支持級聯刪除,不支持級聯更新

4、check約束
檢查約束,可以按照指定條件,檢查記錄的插入。check中不能使用尾列,不能使用函數,不能引用其他欄位。
例:create table sal (a1 number , check(a1>1000));