主鍵存儲過程
⑴ 存儲過程和觸發器的區別
一、參考不同
1、存儲過程:是大型的sql語句集,用於在大型資料庫系統中完成特定的功能。
2、初始化:SQLServer提供給程序員和數據分析人員以確保數據初始化的一種方法。
二、特點不同
1、存儲過程:存儲在資料庫中,編譯後永久有效,用戶通過指定存儲過程的名稱並指定參數(如果存儲過程具有參數)來執行。
2、insert:是與表事件相關的特殊存儲過程,程序的執行不被程序調用,也不是由程序手動啟動,而是由事件觸發,以便在操作表時(插入,刪除,更新))執行將被激活。
三、作用不同
1、存儲過程:以兩個遏制號(##)開頭的官僚存儲過程,該存儲過程將成為存儲在tempdb資料庫中的臨時存儲過程,一旦創建了該臨時存儲過程,它將被連接到伺服器稍後。任何用戶都可以在沒有特殊許可權的情況下執行它。
2、設置為:可用於強制引用常量,在添加,更新或刪除多個表中的行時終止,保留這些表之間定義的關系。但是,強制引用替換的最佳方法是在相關表中定義主鍵和外鍵約束。
⑵ 關於sql sever 的系統存儲過程
存儲過程分為三類:
系統存儲過程:(System stored Procere)sp_開頭,為SQLSERVER內置存儲過程。
擴展存儲過程:(Extended stored Procere),也就是外掛程序,用於擴展SQLSERVER的功能,以sp_或者xp_開頭,以DLL的形式單獨存在。
(系統存儲過程和擴展存儲過程都是在master資料庫中。sp_開頭的可是全局的,任何一個資料庫都可以直接調用的。)
系統存儲過程主要分為以下幾類:
目錄存儲過程,例如:
sp_columns 返回當前環境中可查詢的指定表或視圖的列信息。
sp_tables 返回當前環境下可查詢的對象的列表(任何可出現在 FROM 子句中的對象)。
sp_stored_proceres 返回當前環境中的存儲過程列表。
復制類存儲過程,例如:
sp_addarticle 創建項目並將其添加到發布中。此存儲過程在發布伺服器的發布資料庫上執行。
安全管理類存儲過程,例如:
sp_addrole 在當前資料庫創建新的 Microsoft�0�3 SQL Server�6�4 角色。
sp_password 添加或更改 Microsoft�0�3 SQL Server�6�4 登錄的密碼。
分布式查詢存儲過程,例如:
sp_foreignkeys 返回引用主鍵的外鍵,這些主鍵在鏈接伺服器中的表上。
sp_primarykeys 返回指定遠程表的主鍵列,每個鍵列佔一行。
擴展存儲過程:
xp_sendmail 向指定的收件人發送郵件和查詢結果集附件。
xp_startmail 啟動 SQL 郵件客戶端會話。
xp_cmdshell 以操作系統命令行解釋器的方式執行給定的命令字元串,並以文本行方式返回任何輸出。授予非管理用戶執行xp_cmdshell 的許可權。
用戶定義的存儲過程:(User-defined stored Procere),這個就是用戶在具體的資料庫中自己定義的,名字最好不要以sp_和xp_開頭,防止混亂。
注意事項:
1.在存儲過程中,有些建立對象的語句是不可使用的:create default,create trigger,create procere,create view,create rule.
2.在同一資料庫中,不同的所有者可以建立相同名稱的對象名。例如:a.sample,b.sample,c.sample三個數據表可以同時存在。如果存儲過程中未指明對象的所有者(例如存儲過程中的語句select * from sample,這句中的sample沒有指明所有者),在執行的過程中默認的所有者查找順序是:相應的存儲過程的建立者->相應資料庫的所有者。如果這個查找過程中沒有把所有者確定下來,系統就要報錯。
(這里我額外插一句:如果需要嚴密的數據操作,在任何操作中盡量加上所有者,例如leijun.sample)
3.在存儲過程名稱前邊添加#或者##,所建立的存儲過程則是「臨時存儲過程「(#是局部臨時存儲過程,##是全局臨時存儲過程)。
⑶ 存儲過程寫法
CREATE PROCEDURE [擁有者.]存儲過程名[;程序編號]
[(參數#1,…參數#1024)]
[WITH
{RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}
]
[FOR REPLICATION]
AS 程序行
其中存儲過程名不能超過128個字。每個存儲過程中最多設定1024個參數
(SQL Server 7.0以上版本),參數的使用方法如下:
@參數名數據類型[VARYING] [=內定值] [OUTPUT]
(3)主鍵存儲過程擴展閱讀:
存儲過程相關的其他資料庫原理術語:觸發器
觸發器可以查詢其他表,而且可以包含復雜的SQL語句。它們主要用於強制服從復雜的業務規則或要求。例如:您可以根據客戶當前的帳戶狀態,控制是否允許插入新訂單。
觸發器也可用於強制引用完整性,以便在多個表中添加、更新或刪除行時,保留在這些表之間所定義的關系。然而,強制引用完整性的最好方法是在相關表中定義主鍵和外鍵約束。如果使用資料庫關系圖,則可以在表之間創建關系以自動創建外鍵約束。
⑷ SQL語言分類有哪幾種分別都對應著哪些關鍵字都整理在這里了
本文是mysql系列之第三篇文章 ,主要介紹常用的SQL語句 ,具體如下 ,若要查看mysql客戶端工具的使用,請見:mysql系列之一文詳解Navicat工具的使用(二)
1.表(Table )
資料庫中的表與我們日常生活中使用的表格類似,它也是由行(Row) 和列(Column)組成的。列由同類的信息組成,每列又稱為一個欄位,每列的標題稱為欄位名。行包括了若干列信息項。一行數據稱為一個或一條記錄,它表達有一定意義的信息組合。一個資料庫表由一條或多條記錄組成,沒有記錄的表稱為空表。每個表中通常都有一個主關鍵字,用於惟一地確定一條記錄。
2.索引(Index)
索引是根據指定的資料庫列表建立起來的順序。它提供了快速訪問數據的途徑,並且可監督表的數據,使其索引所指向的列中的數據不重復。
3.視圖(View)
視圖看上去同表似乎一模一樣,具有一組命名的欄位和數據項,但它其實是一個虛擬的表,在資料庫中並不實際存在。該視圖是由查詢資料庫表產生的,它限制了用戶能看到和修改的數據。由此可見,視圖可以用來控制用戶對數據的訪問,並能簡化數據的顯示,即通過視圖只顯示那些需要的數據信息。
4.圖表(Diagram)
圖表其實就是資料庫表之間的關系示意圖。利用它可以編輯表與表之間的關系。
5.預設值(Default)
預設值是當在表中創建列或插入數據時,對沒有指定其具體值的列或列數據項賦予事先設定好的值。
6.規則(Rule)
規則是對資料庫表中數據信息的限制。它限定的是表的列。
7.觸發器(Trigger)
觸發器是一個用戶定義的SQL事務命令的集合。當對一個表進行插入、更改、刪除時,這組命令就會自動執行。
8.存儲過程(Stored Procere)
存儲過程是為完成特定的功能而匯集在一起的一組SQL 程序語句,經編譯後存儲在資料庫中的SQL 程序。
9.用戶(User)
所謂用戶就是有許可權訪問資料庫的人。用戶分為:管理員用戶和普通用戶。管理用戶可對資料庫進行修改刪除,而普通用戶只能進行閱讀查看等操作。
10. 總結
針對以上的對象 ,我們主要抽取其每個對象的關鍵字 ,因為這些關鍵字都會在後面的sql語句用到 。
而以上的DDL語言多是對這些對象的操作,而對象本身又具有增、刪、改、查特性 。 所以 ,DDL語言多是對對象本身的增刪改查操作 ,下面就具體的介紹每個關鍵字的SQL實現 。
創建資料庫:
創建表:
創建視圖:
創建索引:
創建觸發器:
創建存儲過程
創建用戶:
修改表名:
以下主要是對表的列做出的修改:
增加一列:
刪除列
重命名列
修改列的類型名稱
添加主鍵:
修改主鍵:
刪除主鍵:
添加索引
刪除語句比較簡單,具體如下
AS作用和用法
DISTINCT關鍵字
說明 : where後面的條件語句 ,其實並非這么簡單 ,它是非常靈活且強大的 ,這里我們先拆解條件語句的一部分 。
條件語句 由三部分組成,分別是 : 欄位 操作符 值 ,這三部分其實都非常靈活 ,都可以有不同情況,下面主要解決操作符的情況,操作符主要包括如下幾種情況:
邏輯運算符主要包括邏輯與,邏輯或,非 三種情況 。
示例:
是指使用關鍵字like進行的查詢
當然 ,分組後也可以進行數據篩選 ,它使用到的關鍵字having ,和where有點相似,但又不完全一樣 。
where和having的區別:
grant主要是授權用戶許可權 ,主要控制以下訪問許可權 :
revoke正好與grant相反 ,是回收許可權(取消許可權) 。
commit和rollback主要用於事務處理 。使用事務有兩種方式,分別為隱式事務和顯式事務。隱式事務實際上就是自動提交,在MySQL中,自動提交(autocommit)在支持事務(transaction)的引擎中,若autocommit=true,則不需要commit的情況下直接提交語句形成永久性修改,Mysql默認打開autocommit,也可以通過配置設置。