sql的約束(sql語句0~100約束)

    本文主要介紹sql的約束(sql語句0 ~ 100個約束),下面一起看看sql的約束(sql語句0 ~ 100個約束)相關資訊。
    目錄1、約束1.1主鍵1.2外鍵1.3唯一約束1.4檢查約束2、索引3、觸發器4、數據庫安全5、總結本文介紹了sql涉及的幾個數據處理特性:約束、索引和觸發器。約束是實現引用完整性的重要部分,索引可以提高數據檢索的性能,觸發器可以用于執行運行前后的處理。
    1.constrained sql在許多版本中得到了改進,已經成為一種非常完美和強大的語言。許多強大的功能為用戶提供了高級的數據處理技術,例如約束。
    關聯表和參照完整性以前已經討論過幾次了。如前所述,關系數據庫存儲分解到多個表中的數據,每個表存儲相應的數據。使用鍵建立從一個表到另一個表的引用[因此有了術語引用完整性]。
    為了正確地設計關系數據庫,我們需要一種方法來確保只有合法的數據入到表中。
    例如,如果orders表存儲訂單信息,而orderitems表存儲訂單詳細信息,則應該確保orderitems中引用的任何訂單id都存在于訂單中。
    同樣,orders表中引用的任何客戶都必須存在于customers表中。
    雖然您可以在插入新行時進行檢查(在另一個表上執行select以確保所有值都合法并且存在),但出于以下原因,最好不要這樣做。
    如果數據庫完整性規則在客戶端級別實現,每個客戶端都將實現這些規則,而有些客戶端肯定不會實現這些規則。在執行更新和刪除操作時,也必須實現這些規則。執行客戶端檢查非常耗時,dbms可以相對高效地執行這些檢查。約束(約束)
    控制如何插入或處理數據庫數據的規則。
    dbms通過對數據庫表施加約束來加強參照完整性。
    大多數約束是在表定義中定義的,如如何使用sql create table、使用create table或alter table語句創建新表中所述。
    注意:特定數據庫管理系統的約束
    有幾種不同類型的約束,每個dbms都提供自己的支持。
    因此,這里給出的例子在不同的dbms上可能會有不同的反應。在進行實驗之前,請參考特定的dbms文檔。
    1.1主鍵我們在學習sql之前需要知道的基礎知識已經簡單提到了。
    主鍵是一種特殊的約束,用于確保一列(或一組列)中的值是唯一的,并且永遠不會改變。
    換句話說,表中有一個一列(或多列)的值唯一標識表中的每一行。這有助于直接或交互處理表中的行。
    如果沒有主鍵,很難在不影響其他行的情況下安全地更新或刪除特定的行。
    只要滿足下列條件,表中的任何列都可以用作主鍵。
    任何兩行的主鍵值都是不同的。每行都有一個主鍵值(即列中不允許有空值)。包含主鍵值的列永遠不會被修改或更新。(大多數數據庫管理系統不 不允許這樣做,但是如果你正在使用的數據庫管理系統允許,那么,不要 t!)主鍵值不能重復使用。如果從表中刪除一行,它的主鍵值不會分配給新行。定義主鍵的一種方法是創建主鍵,如下所示。
    創建表供應商(vend_id char(10) not null主鍵,vend_name char(50) not null,vend_address char(50) null,vend_city char(50) null,vend_state char(5) null,vend_zip char(10) null,vend _ country char(50)null);在本例中,關鍵字primary key被添加到表的vend_id列定義中,使其成為主鍵。
    alter table vendorsadd約束主鍵(vend _ id);這里將同一列定義為主鍵,但是使用了約束語法。該語法也可用于create table和alter table語句。
    描述:sqlite中的密鑰
    sqlite不允許使用alter table來定義鍵,并要求在初始create table語句中定義鍵。
    1.2外鍵外鍵是表中的一列,其值必須列在另一個表的主鍵中。外鍵是確保引用完整性的一個極其重要的部分。讓 讓我們舉個例子來理解外鍵。
    orders表包含作為一行輸入到系統中的每個訂單。
    客戶信息存儲在customers表中。orders表中的訂單通過客戶id與customers表中的特定行相關聯。
    客戶id是customers表的主鍵,每個客戶都有一個唯一的id。訂單編號是訂單表的主鍵,每個訂單都有一個唯一的訂單編號。
    orders表中客戶id列的值不一定是唯一的。
    如果客戶有多個訂單,則有多個行具有相同的客戶id(盡管每個訂單有不同的訂單號)。同時,orders表中客戶id列的合法值就是customers表中的客戶id。
    這就是外鍵的作用。在本例中,外鍵是在訂單的客戶id列上定義的,因此該列只能接受客戶表的主鍵值。
    這里 如何定義這個外鍵。
    創建訂單表(order_num integer not null主鍵,order_date datetime not null,cust_id char(10) not null引用客戶(cust _ id));表定義使用references關鍵字,這意味著cust_id中的任何值都必須是customers表的cust_id中的值。
    在alter table語句中使用約束語法也可以完成同樣的工作:
    alter table orders add constraint foreign key(cust _ id)引用customers(cust _ id);提示:外鍵有助于防止意外刪除。
    如如何使用sql update和delete語句更新或刪除表數據中所述,外鍵除了有助于確保引用完整性之外,還有另一個重要功能。
    定義外鍵后,dbms不允許刪除與另一個表中的行相關聯的行。
    例如,不能刪除與訂單關聯的客戶。刪除客戶的唯一方法是首先刪除相關訂單(這意味著刪除相關訂單項目)。因為需要一系列的刪除,所以使用外鍵可以防止數據的意外刪除。
    有些數據庫管理系統支持一種稱為級聯刪除的功能。如果啟用,此功能將在從表中刪除行時刪除所有相關數據。
    例如,如果啟用了級聯刪除,并且從客戶表中刪除了一個客戶,則任何關聯的訂單行也會被自動刪除。
    1.3唯一約束唯一約束用于確保一列(或一組列)中的數據是唯一的。它們類似于主鍵,但有以下重要區別。
    表可以包含多個唯一約束,但每個表只允許有一個主鍵。唯一約束列可以包含空值。可以修改或更新唯一約束列。唯一約束列的值可以重復使用。與主鍵不同,唯一約束不能用于定義外鍵。employees表是使用約束的一個例子。每個雇員都有一個獨特的社會安全號碼,但我們沒有。;我不想用它作為主鍵,因為它太長了(我們也不想用它 我不想寫這封信。興趣好用)。
    因此,每個雇員除了他的社會保險號之外,還有一個唯一的雇員id(主鍵)。
    員工id是主鍵,可以確定它是唯一的。您可能還希望dbms確保每個社會保險號是唯一的(以確保輸入錯誤不會導致他人使用 s數字)。您可以通過在社會保險號列上定義唯一約束來實現這一點。
    唯一約束的語法類似于其他約束的語法。可以使用unique關鍵字或單獨的約束在表定義中定義unique約束。
    1.4檢查約束檢查約束用于確保一列(或一組列)中的數據滿足一組指定的條件。檢查約束的常見用法如下。
    檢查最小值或最大值。例如,禁止訂購0個項目(即使0是合法數字)。指定范圍。例如,交貨日期保證大于或等于今天 的日期,但不遲于一年后的今天。僅允許某些值。例如,在性別字段中只允許m或f。換句話說,學習sql之前需要知道的基礎知識介紹了數據類型,這些數據類型限制了一個列中可以保存的數據類型。
    check約束對數據類型施加了進一步的限制,這對于確保插入到數據庫中的數據正是您想要的非常重要。
    不需要依賴客戶端應用程序或用戶來確保正確獲取數據,dbms本身會拒絕任何無效數據。
    以下示例對orderitems表施加了check約束,以確保所有項目的數量都大于0。
    創建表orderitems(order _ num integer not null,order_item integer not null,prod_id char(10) not null,quantity integer not null check(數量0),item _ price money not null);使用此約束,將檢查任何插入(或更新)的行,以確保數量大于0。
    檢查名為gender的列是否只包含m或f,您可以編寫以下alter table語句:
    添加約束檢查(性別相似 [mf] ;);提示:用戶定義的數據類型
    一些數據庫管理系統允許用戶定義他們自己的數據類型。
    它們是定義檢查約束(或其他約束)的基本簡單數據類型。
    例如,您可以定義自己的名為gender的數據類型,這是一種單字符文本數據類型,帶有一個check約束,將其值限制為m或f(未知值可能允許null)。
    然后,你可以把該數據類型用于表定義。自定義數據類型的優點在于,您只需應用一次約束(在數據類型定義中),每當使用該數據類型時,這些約束就會自動應用。
    請查閱相應的dbms文檔,看看它是否支持自定義數據類型。
    第二,索引索引用于對數據進行排序,以加快搜索和排序操作。想象一下一本書后面的索引,可以幫助你理解數據庫的索引。
    如果你想找出所有的單詞 數據類型 在書中,簡單的方法是從第一頁開始,瀏覽每一行。雖然這樣可以完成任務,但顯然不是好辦法。
    瀏覽幾頁也許可以,但這樣瀏覽整本書不可行。隨著要搜索的頁面數量的增加,查找所需單詞的時間也會增加。
    這就是為什么書應該被索引。索引按字母順序列出單詞及其在書中的位置。搜索單詞 數據類型 ,您可以在索引中找到該單詞,并確定它出現在哪些頁面中。然后翻到這幾頁,找到單詞 數據類型 。
    索引的作用是什么?it 這很簡單。;這是正確的種類。找出書中單詞的難度不在于必須進行多少次搜索,而在于書中的內容沒有按單詞排序。如果一本書的內容像字典一樣排序,索引是不必要的(所以字典沒有索引)。
    數據庫索引也是如此。主鍵數據總是排序的,這是dbms的工作。因此,通過主鍵檢索特定行始終是一種快速有效的操作。
    但是,搜索其他列中的值通常效率很低。
    例如,如果您想搜索居住在某個州的客戶,該怎么辦?因為表數據不是按州排序的,所以dbms必須讀取表中的所有行(從第一行開始)以查看它們是否匹配。it 這就像在沒有索引的書里找單詞一樣。
    解決方法是使用索引。您可以在一列或多列上定義一個索引,這樣dbms就可以保存其內容的有序列表。
    定義索引后,dbms以類似于書籍索引的使用它。dbms搜索排序的索引,找到匹配的位置,然后檢索這些行。
    在開始創建索引之前,您應該記住以下幾點。
    索引提高了檢索操作的性能,但是降低了數據插入、修改和刪除的性能。當執行這些操作時,dbms必須動態更新索引。索引數據可能會占用大量存儲空間。并非所有數據都適合索引。值很少的數據(如state)從索引中獲得的好處不如具有更多可能值的數據(如surname或first name)多。索引用于數據過濾和數據排序。如果您經常按照一定的順序對數據進行排序,它可能適合于索引。您可以在一個索引中定義多個列(例如,州和城市)。這種索引只在按州和城市排序時有用。如果你想按城市排序,這個索引就沒用了。對于應該索引什么以及何時索引沒有嚴格的規則。大多數數據庫管理系統提供可用于確定索引效率的實用程序,應該經常使用。
    索引是用create index語句創建的(創建索引的語句因dbms而異)。以下語句在products表的product列上創建一個簡單索引。
    在產品(產品名稱)上創建索引產品名稱;索引必須唯一命名。這里的索引名prod_name_ind是在關鍵字create index之后定義的。on用于指定要索引的表,索引中包含的列(本例中只有一列)在表名后面的括號中給出。
    提示:查看索引。
    索引的效率隨著表數據的增加或變化而變化。許多數據庫管理員發現,過去創建的理想索引經過幾個月的數據處理后可能并不理想。
    最好定期檢查指數,并根據需要進行調整。
    第三,觸發器trigger是一個特殊的存儲過程,當特定的數據庫活動發生時,它會自動執行。觸發器可以與特定表上的插入、更新和刪除操作(或組合)相關聯。
    與只存儲sql語句的存儲過程不同,觸發器與單個表相關聯。
    只有在orders表中插入一行時,才會執行與orders表上的insert操作相關聯的觸發器。
    類似地,只有當customers表上的insert和update操作出現在表上時,才會執行這些操作的觸發器。
    觸發器內的代碼可以訪問以下數據:
    插入操作中的所有新數據;更新操作中的所有新舊數據;刪除操作中刪除的數據。根據使用的dbms,觸發器可以在執行特定操作之前或之后執行。
    以下是觸發器的一些常見用法。
    確保數據一致性。例如,在插入或更新操作中,將所有狀態名轉換為大寫。基于一個表中的更改在其他表上執行活動。例如,每次更新或刪除一行時,將審計跟蹤記錄寫入日志表。根據需要執行附加驗證并回滾數據。例如,確保客戶 的可用資金不超過限制,如果超過限制,則阻止插入。計算計算列的值或更新時間戳。讀者可能已經注意到,不同dbms的觸發器創建語法有很大不同。有關更多詳細信息,請參考相應的文檔。
    以下示例創建一個觸發器,該觸發器將customers表中的cust_state列轉換為大寫,以用于所有插入和更新操作。
    這是此示例的sql server版本。
    一個函數e觸發器customer _ state on customers for insert,updateas update customers set cust _ state = upper(cust _ state)其中customers . cust _ id = inserted . cust _ id;這是此示例的oracle和postgresql版本:
    create trigger customer _ state after insert或updatefor每行begin update customers set cust _ state = upper(cust _ state)其中customers . cust _ id = : old . cust _ idend;提示:約束比觸發器更快。
    一般來說,約束的處理速度比觸發器快,所以應該盡可能地使用約束。
    4.數據庫安全性對于一個組織來說,沒有什么比數據更重要了,因此應該保護這些數據不被或隨意瀏覽。
    當然,需要訪問數據的用戶也必須能夠訪問數據,因此大多數dbms都為管理員提供了管理機制來授權或限制對數據的訪問。
    任何安全系統的基礎都是用戶授權和身份確認。這是一個用戶被確認,保證是授權用戶,并被允許執行他想要執行的操作的過程。
    有些dbms使用操作系統的安全措施,有些維護自己的用戶和密碼列表,有些使用外部目錄服務服務器。
    一般來說,需要保護的操作有:
    訪問數據庫管理功能(創建表格、更改或刪除現有表格等)。);對特定數據庫或表的訪問;訪問類型(只讀、對特定列的訪問等。);只能通過視圖或存儲過程訪問表;創建多級安全措施,允許基于多重登錄的訪問和控制;限制管理用戶帳戶的能力。通過使用sql的grant和revoke語句來管理安全性,但是,大多數dbms提供了在內部使用grant和revoke語句的交互式管理實用程序。
    動詞 (verb的縮寫)摘要本文介紹了如何使用sql的一些高級功能。約束是實現引用完整性的重要部分,索引可以提高數據檢索的性能,觸發器可用于執行運行前和運行后處理,安全選項可用于管理數據訪問。
    不同的dbms可以以不同的形式提供這些功能。有關更多詳細信息,請參考特定的dbms文檔。
    原始鏈接: www . developer strid . com/sql/sql-constraints-indexes-triggers/
    (完)
    標簽:
    索引數據
    了解更多sql的約束(sql語句0 ~ 100個約束)相關內容請關注本站點。

    惠普c122筆記本參數,pmn tpnc122是惠普筆記本電腦的型號嗎
    nova 7 se 5g屏幕尺寸(華為nova 7 se的屏幕有多大)
    hp手提電腦是什么牌子,hp電腦是哪一品牌
    傲視天地磨礪石有啥用(傲視天地什么時候能用專屬裝備)
    oppor9怎么重新啟動,oppoR9spls手機怎么重啟
    sql的約束(sql語句0~100約束)
    硬盤拒絕訪問怎么解決,硬盤拒絕訪問怎么辦
    win7訪問共享文件速度過慢的解決方案是什么(win7訪問共享文件很慢)
    機械鍵盤哪種品牌好(機械鍵盤品牌推薦)
    surface book2什么時候上市(surfacebook2質量如何)
    筆記本電腦的相冊在哪(我的電腦照片怎么找到)
    華為好的手機是哪款(華為好的幾款手機排行)
    臺式機加硬盤需要什么線,換和硬盤什么安裝線要什么呢
    aris終端桌面怎么設置默認桌面(aris終端界面)
    電腦鍵盤各個按鍵的用處(認識電腦鍵盤每個鍵的作用圖解視頻)
    win10系統怎么激活office2010(window10怎么激活office2010)
    現在最高配的電腦,目前電腦的最高配置是哪些
    固態硬盤如何加裝到主機箱里面,如何把一個裝有系統的固態硬盤裝在一個新主機上面
    windows7手機版下載安裝(windows7正版下載手機版)
    蘋果怎樣設置陌生號碼打不進(怎么設置蘋果手機陌生電話號碼打不進來)
    主站蜘蛛池模板: 亚欧色一区W666天堂| 无码乱人伦一区二区亚洲| 国产成人无码一区二区三区在线| 久久精品无码一区二区无码| 国产成人综合亚洲一区| 亚洲V无码一区二区三区四区观看| 一区二区在线视频观看| 亚洲av色香蕉一区二区三区| 国产品无码一区二区三区在线蜜桃| 国产精品一区在线麻豆 | 精品国产一区二区三区久久蜜臀| 一区二区三区在线观看| 精品无码一区二区三区在线| 又硬又粗又大一区二区三区视频| AV怡红院一区二区三区| 风流老熟女一区二区三区| 国产a久久精品一区二区三区| 精品人妻无码一区二区三区蜜桃一 | 好爽毛片一区二区三区四无码三飞| 99久久人妻精品免费一区| 久久国产精品一区二区| 国产一区二区三区91| 丰满少妇内射一区| 免费视频精品一区二区三区| 一区二区三区人妻无码 | 秋霞日韩一区二区三区在线观看| 亚洲爆乳精品无码一区二区| 亚洲精品色播一区二区| 亚洲精品色播一区二区| 在线日韩麻豆一区| 鲁大师成人一区二区三区| 午夜福利国产一区二区| 精品一区二区三区高清免费观看| 久久精品无码一区二区三区日韩| 国模大尺度视频一区二区| 亚洲日韩精品一区二区三区无码| 国产成人久久精品一区二区三区| 乱精品一区字幕二区| 中文字幕日韩一区二区不卡| 国产日韩视频一区| 国产亚洲一区二区三区在线观看|