主頁 > 資料庫 > SQL必知必會

SQL必知必會

2022-05-12 08:12:35 資料庫

宣告:全文來源《mysql SQL必知必會(第3版)》

第一章 了解SQL

1.1 資料庫基礎

  資料庫(database)保存有組織的資料的容器

  表(table)某種特定型別資料的結構化清單,資料庫中的每個表都有一個用來標識自己的名字,此名字是唯一的,

  模式(schema)關于資料庫和表的布局及特性的資訊,

  列(column)表中的一個欄位,所有表都是由一個或多個列組成的,

  資料型別(datatype)所容許的資料的型別,每個表列都有相應的資料型別,它限制該列中存盤的資料,

  行(row)表中的一個記錄,

  主鍵(primary key)一列,其值能夠唯一標識表中每一行,

    • 任意兩行都不具有相同的主鍵值;
    • 每個行都必須具有一個主鍵值(主鍵值不允許NULL值)
    • 主鍵列中的值不允許修改或更新
    • 主鍵值不嫩惡搞重用(如果某行從表中洗掉,它的主鍵不能賦給以后的新行),

  結構化查詢語言(SQL)Structured Query Language

第二章 創建和操縱表

  班級資訊ClassInfo

班級編號

班主任編號

學生編號

年級

ClassID

TeacherID

StudentID

Grade

  學生資訊StudentInfo

學生編號

性別

年齡

身份證

學生姓名

StudentID

Gender

Age

CardID

StudentName

  學生成績StudentAchieve

學生編號

語文

數學

英語

年份

班級編號

StudentID

Chinese

Math

English

TestYear

ClassID

2.1 創建表

  為利用CREATE TABLE創建表,必須給出下列資訊:

    • 新表的名字,在關鍵字CREATE TABLE之后給出;
    • 表列的名字和定義,用逗號分隔;
CREATE TABLE ClassInfo
(
    ClassID  CHAR(20) NOT NULL, --班級編號
    TeacherID CHAR(20) NOT NULL, --班主任編號
    StudentID CHAR(20) NOT NULL, --學生編號
    Grade CHAR(15) NOT NULL --年級
)
CREATE TABLE StudentInfo
(
    StudentID CHAR(20) NOT NULL, --學生編號
    StudentName CHAR(50) NOT NULL, --學生姓名
    Gender CHAR(5) NOT NULL, --性別
    Age INT NOT NULL DEFAULT 0, --年齡
    CardID VARCHAR(50) NULL DEFAULT '' --身份證
)
CREATE TABLE StudentAchieve
(
    StudentID CHAR(20) NOT NULL, --學生編號
    ClassID  CHAR(20) NOT NULL, --班級編號
    Chinese DECIMAL(10,5) NOT NULL DEFAULT 0, --語文
    Math DECIMAL(10,5) NOT NULL DEFAULT 0, --數學
    English DECIMAL(10,5) NOT NULL DEFAULT 0 --英語
)

2.2 更新表

  為更新表定義,可使用ALTER TABLE陳述句,

  為了使用ALTER TABLE更改表結構,必須給出下面的資訊:

    • 在ALTER TABLE之后給出要更改的表名
    • 所做更改的列名
ALTER TABLE dbo.StudentAchieve ADD TestYear CHAR(20) NOT NULL --考試年份

添加考試年份的列

ALTER TABLE dbo.StudentAchieve DROP COLUMN TestYear

洗掉考試年份的列

2.3 洗掉表

DROP TABLE dbo.StudentAchieve

  洗掉學生成績這張表,洗掉表沒有確認,也不能撤銷,執行這條陳述句將永久洗掉該表,

  注:可使用關系規則防止意外洗掉

第三章 檢索資料

3.1 檢索單個列

SELECT StudentName FROM dbo.StudentInfo

  

3.2 檢索多個列

SELECT StudentID,Gender,StudentName FROM dbo.StudentInfo 

  

3.3 檢索所有列

SELECT * FROM dbo.StudentInfo

  

第四章 排序檢索資料

4.1 排序資料

SELECT StudentName FROM dbo.StudentInfo  ORDER BY StudentName

  Order by子句的位置:應保證它是slect陳述句中最后一條子句,

4.2 按多個列排序

SELECT StudentID,Gender,StudentName FROM dbo.StudentInfo ORDER BY StudentName,StudentID 

  

4.3 按列位置排序

SELECT StudentID,Gender,StudentName FROM dbo.StudentInfo ORDER BY 1,3 

  

4.4 指定排序方向

SELECT StudentID,Gender,StudentName FROM dbo.StudentInfo ORDER BY Gender DESC 

  

  DESC降序排列,DESCENDING

  ASC升序排列,默認

第五章 過濾資料

5.1 使用WHERE子句

SELECT StudentID,StudentName FROM dbo.StudentInfo WHERE Age=5 

  

5.2 where子句運算子

運算子

說明

=

等于

<> 

不等于

!=

不等于

小于

<=

小于等于

!<

不小于

大于

>=

大于等于

!>

不大于

BETWEEN

再指定的兩個值之間

IS NULL

為NULL值

5.2.1 檢查單個值

SELECT StudentID,ClassID FROM dbo.StudentAchieve WHERE Chinese<95 

  

5.2.2 不匹配檢查

SELECT * FROM dbo.StudentInfo WHERE CardID <>'' 

  

5.2.3 范圍值檢查

SELECT StudentID,Math FROM dbo.StudentAchieve WHERE Math BETWEEN 90 AND 100

  

5.2.4 空值檢查

SELECT StudentName,StudentID FROM dbo.StudentInfo WHERE CardID IS NULL

  

第六章 高級資料過濾

6.1 組合WHERE子句

6.1.1 AND運算子

SELECT StudentID,StudentName FROM dbo.StudentInfo WHERE Gender='' AND Age=6

  

6.1.2 OR運算子

SELECT StudentID,StudentName FROM dbo.StudentInfo WHERE Gender='' OR Age=6

  

6.2 IN 運算子

SELECT StudentID,StudentName FROM dbo.StudentInfo WHERE Age IN (5,6)

  

6.2 NOT運算子

SELECT StudentID,StudentName,Gender FROM dbo.StudentInfo WHERE NOT Gender=''

  

第七章 用通配符進行過濾

7.1 LIKE運算子

  通配符(wildcard)用來匹配值的一部分的特殊字符,

  搜索模式(search pattern)由字面值、通配符或兩者組合構成的搜索條件,

7.1.1 百分號(%)通配符

SELECT StudentID,StudentName,CardID FROM dbo.StudentInfo WHERE CardID LIKE 'card%'

     

  檢索任意以card起頭的詞,

  %告訴DBMS接受card之后的任意字符,不管他有多少字符,

SELECT StudentID,StudentName,CardID FROM dbo.StudentInfo WHERE CardID LIKE '%01%'

  

  %可以匹配0個字符,%代表搜索模式中給定位置的0個、1個或多個字符,

7.1.2 下劃線(_)通配符

  下劃線的用途與%一樣,但下劃線只匹配一個字符而不是多個字符,

SELECT StudentID,StudentName,CardID FROM dbo.StudentInfo WHERE StudentName LIKE '名_2'

   

7.1.3 方括號([])通配符

  方括號通配符用來指定一個字符集,它必須匹配指定位置得一個字符,

SELECT * FROM dbo.StudentInfo WHERE CardID LIKE 'card000[23]%'

   

  找出以card0002或card0003開頭得cardid

  此通配符可以用前綴字符^(脫子號)來否定,

SELECT * FROM dbo.StudentInfo WHERE CardID LIKE 'card000[^23]%'

   

7.2 使用通配符得技巧

    • 不用過分使用通配符,如果其他運算子能達到相同得目的,應該使用其他運算子,
    • 在確實需要使用通配符時,除非絕對又必要,否則不要把它們用在搜索模式得開始處,把通配符置于搜索模式得開始處,搜索起來時最慢的,
    • 仔細注意通配符的位置,如果放錯地方,可能不會回傳想要的資料,

第八章 創建計算欄位

8.1 計算欄位

  欄位(field)基本上與列(column)的意思相同,經常互換使用,不過資料列一般稱為列,而術語欄位通常用在計算欄位的連接上,

8.2 拼接欄位

  拼接(concatenate)將值聯結到一起構成單個值,

SELECT StudentID+'name: '+StudentName  FROM dbo.StudentInfo

   

SELECT RTRIM(StudentID)+'name: '+RTRIM(StudentName)  FROM dbo.StudentInfo

   RTRIM()函式去掉右邊的所有空格, 

SELECT RTRIM(StudentID)+'name: '+RTRIM(StudentName) info FROM dbo.StudentInfo

  使用別名

8.3 執行算術計算

SELECT StudentID,Chinese+Math+English AS total FROM dbo.StudentAchieve

   

第九章 使用資料處理函式

9.1 函式

  可移植(portable)所撰寫的代碼可以在多個系統上運行,

9.2 使用函式

9.2.1 文本處理函式

SELECT StudentID,UPPER(CardID) cardinfo FROM dbo.StudentInfo

  UPPER()將文本轉換為大寫

  常用的文本處理函式

函式

說明

LEFT()

回傳串左邊的字符

LENGTH()

回傳串的長度

LOWER()

將串轉換為小寫

LTRIM()

去掉串左邊的空格

RIGHT()

回傳串右邊的字符

RTRIM()

去掉串右邊的空格

SOUNDEX()

回傳串的SOUNDEX值

UPPER()

將串轉換為大寫

  SOUNDEX()函式是一個將任何文本串轉換為描述其語音表達的字母數字模式的演算法,SOUNDEX考慮了類似的發音字符和音節,使得能對串進行發音比較而不是字母比較,

9.2.2 日期和時間處理函式

  日期和時間采用相應的資料型別存盤在表中,每種DBMS都有自己的變體,日期和時間值以特殊的格式存盤,以便能快速和有效地排序或過濾,并且節約物理存盤空間,

9.2.3 數值處理函式

函式

說明

ABS()

絕對值

COS()

余弦

EXP()

指數

PI()

圓周率

SIN()

正弦

SQRT()

平方根

TAN()

正切

第十章 匯總資料

10.1 聚集函式

  聚集函式(aggregate function)運行在行組上,計算和回傳單個值的函式,

函式

說明

AVG()

平均值

COUNT()

行數

MAX()

最大值

MIN()

最小值

SUM()

10.1.1 AVG()函式

SELECT AVG(Chinese) AS avg_chinese FROM dbo.StudentAchieve

   

SELECT  AVG(Chinese) AS avg_chinese_11 FROM dbo.StudentAchieve WHERE ClassID='c00011'

   

  AVG()只能用來確定特定數值列的平均值,而且列名必須作為函式引數給出,只能用于單個列,

  AVG()函式忽略值為NULL的行,

10.1.2 COUNT()函式

  COUNT()函式又兩種使用方式

    • 使用COUNT(*)對表中行的資料進行計數,不管表列中包含的是空值還是非空值,
    • 使用COUNT(column)對特定列中具有值得行進行計數,忽略NULL值
SELECT COUNT(*) AS num FROM dbo.StudentInfo

   

SELECT COUNT(StudentID) AS num FROM dbo.StudentInfo

   

10.1.3 MAX()函式

SELECT MAX(Math) AS max_math FROM dbo.StudentAchieve

 

10.1.4 MIN()函式

SELECT MIN(Math) AS min_math FROM dbo.StudentAchieve

   

10.1.5 SUM()函式

SELECT sum(Math) AS sum_math FROM dbo.StudentAchieve

   

SELECT sum(Math+Chinese) AS total FROM dbo.StudentAchieve

   

10.2 聚集不同值

  以上5個聚集函式都可以如下使用:

    • 對所有得行執行計算,指定ALL引數或不給引數,
    • 值包含不同的值,指定DISTINCT引數
SELECT AVG(distinct Math) AS math_avg FROM dbo.StudentAchieve

   

10.3 組合聚集函式

SELECT COUNT(*) as num_count,MIN(Math) AS min_math,MAX(Math) AS max_math FROM dbo.StudentAchieve

   

第十一章 分組資料

11.1 資料分組

SELECT COUNT(*) AS math_95 FROM dbo.StudentAchieve WHERE Math>95

   

11.2 創建分組

SELECT StudentID,COUNT(*) AS column1 FROM dbo.StudentAchieve GROUP BY StudentID

   

在具體使用GROUP BY子句前,需要知道一些重要的規定:

    • GROUP BY子句可以包含任意數目的列,這使得能對分組進行嵌套,為資料分組提供更細致的控制,
    • 如果在GROUP BY子句中快安了分組,資料將在最后規定的分組上進行匯總,換句話說,在建立分組時指定的所有列都一起計算(所以不能從個別的列取回資料),
    • GROUP BY子句中列出的每個列都必須是檢索列或有效的運算式(但不能是聚集函式),如果在SELECT中使用運算式,則必須在GROUP BY子句中指定相同的運算式,不能使用別名,
    • 大多數SQL實作不允許GROUP BY列帶有長度可變的資料型別(如文本或備注型欄位),
    • 除聚集計算陳述句外,SELECT陳述句中的每個列都必須在GROUP BY子句中給出,
    • 如果分組列中具有NULL值,則NULL將作為一個分組回傳,如果列中有多行NULL值,它們將分為一組
    • GROUP BY子句必須出現在WHERE子句之后,ORDER BY子向之前,

11.3 過濾分組

SELECT StudentID,COUNT(*) AS column1 FROM dbo.StudentAchieve GROUP BY StudentID HAVING COUNT(*)=2

   

11.4 分組和排序

  ORDER BY與GROUP BY

ORDER BY

GROUP BY

排序產生的輸出

任意列都可以使用(甚至非選擇的列也可以使用) 

不一定需要

分組行,但輸出可能不是分組的順序

只可能使用選擇列或運算式列,而且必須使用每個選擇列運算式

如果與聚集函式一起使用列(或運算式),則必須使用

11.5 SELECT子句順序

子句

說明

是否必須使用

SELECT

要回傳的列或運算式

FROM

從中檢索資料的表

僅在從表選擇資料時使用

WHERE

行級過濾

GROUP BY

分組說明

僅在按組計算聚集時使用

HAVING

組級說明

ORDER BY

輸出排序順序

第十二章 使用子查詢

12.1 子查詢

  查詢(query)任何SQL陳述句都是查詢,

  SQL還允許創建子查詢(subquery),即:嵌套在其他查詢中的查詢,

12.2 利用子查詢進行過濾

SELECT StudentName FROM dbo.StudentInfo WHERE StudentID IN ( SELECT StudentID FROM dbo.StudentAchieve WHERE Math > 95 );

   

12.3 作為計算欄位使用子查詢

SELECT StudentID,(  SELECT COUNT(*)FROM dbo.StudentAchieve WHERE StudentID = StudentID) AS column1 FROM dbo.StudentInfo;

   

第十三章 聯結表

13.1 聯結

  可伸縮性(scale)能夠適應不斷增加的作業量而不失敗,設計良好的資料庫或應用程式稱之為可伸縮性好、

13.2 創建聯結

SELECT StudentName,Math, Chinese FROM dbo.StudentInfo,dbo.StudentAchieve WHERE StudentAchieve.StudentID = StudentInfo.StudentID;

   

13.2.1 WHERE子句的重要性

  笛卡兒積(cartesian product)由沒有聯結條件的表關系回傳的結果為笛卡兒積,檢索出的行的數目將是第一個表中的行數乘以第二個表中的行數,

SELECT StudentName,Math,Chinese FROM dbo.StudentInfo,dbo.StudentAchieve

   

13.2.2 內部聯結

SELECT StudentName, Math,Chinese FROM dbo.StudentInfo INNER join dbo.StudentAchieve ON StudentAchieve.StudentID = StudentInfo.StudentID

   

13.2.3 聯結多個表

SELECT StudentName,Math,Chinese, Grade FROM dbo.StudentInfo,dbo.StudentAchieve, dbo.ClassInfo
WHERE StudentInfo.StudentID = StudentAchieve.StudentID  AND ClassInfo.StudentID = StudentAchieve.StudentID  AND Math > 90;

   

第十四章 創建高級聯結

14.1 使用表別名

SELECT StudentName,Math, Chinese,Grade FROM dbo.StudentInfo AS a, dbo.StudentAchieve AS b, dbo.ClassInfo AS c
WHERE a.StudentID = b.StudentID  AND c.StudentID = a.StudentID  AND Math > 90;

   

14.2 使用不同型別的聯結

14.2.1 自聯結

SELECT StudentID,StudentName,Gender FROM dbo.StudentInfo WHERE Gender =( SELECT Gender FROM dbo.StudentInfo WHERE StudentID = 's00001')

   

SELECT a.StudentID,a.StudentName,a.Gender FROM dbo.StudentInfo AS a,dbo.StudentInfo AS b WHERE a.Gender = b.Gender  AND b.StudentID = 's00001';

   

14.2.2 自然聯結

SELECT StudentName,Math, Chinese,Grade FROM dbo.StudentInfo AS a, dbo.StudentAchieve AS b, dbo.ClassInfo AS c WHERE a.StudentID = b.StudentID  AND c.StudentID = a.StudentID AND Math > 90;

   

14.2.3 外部聯結

SELECT StudentName,Gender,Math,Chinese FROM dbo.StudentInfo  LEFT JOIN dbo.StudentAchieve ON StudentAchieve.StudentID = StudentInfo.StudentID;

   

SELECT StudentName,Gender,Math,Chinese FROM dbo.StudentInfo RIGHT JOIN dbo.StudentAchieve ON StudentAchieve.StudentID = StudentInfo.StudentID;

      

14.3 使用帶聚集函式的聯結

SELECT Grade,COUNT(Age) AS age_count,Age FROM dbo.StudentInfo INNER JOIN dbo.ClassInfo ON ClassInfo.StudentID = StudentInfo.StudentID GROUP BY ClassInfo.Grade,Age

   

14.4 使用聯結和聯結條件

    • 注意所使用的聯結型別,一般我們使用內部聯結,但使用外部聯結也是有效的,
    • 關于確切的聯結語法,應該查看具體的檔案,看相應的DBMS支持何種語法(大多數DBMS使用這兩章中描述的某種語法形式),
    • 保證使用正確的聯結條件(不管是采用哪種語法),否則將回傳不正確的資料,
    • 應該總是提供聯結條件,否則會得出笛卡兒積,
    • 在一個聯結中可以包含多個表,甚至對于每個聯結可以采用不同的聯結型別,雖然這樣做是合法的,一般也很有用,但應該在起測驗它們前,分別測驗每個聯結,這將使故障排除更為簡單,

第十五章 組合查詢

15.1 組合查詢

  SQL允許執行多個查詢,并將結果作為單個查詢結果集回傳,這些組合查詢通常稱為并(union)或復合查詢(compound query),

15.2 創建組合查詢

15.2.1 使用UNION

SELECT StudentID,StudentName,Age,Gender FROM dbo.StudentInfo WHERE Age=5
UNION
SELECT StudentID,StudentName,Age,Gender FROM dbo.StudentInfo WHERE Gender=''

   

SELECT StudentID,StudentName,Age,Gender FROM dbo.StudentInfo WHERE Age=5 OR Gender=''

   

15.2.2 UNION規則

    • UNION必須由兩潭訓兩條以上的SELECT陳述句組成,陳述句之間用關鍵宇UNION分隔(因此,如果組合4條SELECT陳述句,將要使用3個UNION關鍵宇),
    • UNION中的每個查詢必須包含相同的列、運算式或聚集西數(不過各個列不需要以相同的次序列出),
    • 列資料型別必須兼容:型別不必完全相同,但必須是DBMS可以隱含地轉換的型別(例如,不同的數值型別或不同的日期型別),

15.2.3 包含或取消重復的行

SELECT StudentID,StudentName,Age,Gender FROM dbo.StudentInfo WHERE Age=5
UNION ALL
SELECT StudentID,StudentName,Age,Gender FROM dbo.StudentInfo WHERE Gender=''

   

15.2.4 對組合查詢結果排序

SELECT StudentID,StudentName,Age,Gender FROM dbo.StudentInfo WHERE Age=5
UNION
SELECT StudentID,StudentName,Age,Gender FROM dbo.StudentInfo WHERE Gender=''
ORDER BY Gender

   

第十六章 插入資料

16.1 資料插入

16.1.1 插入完整的行

INSERT INTO dbo.StudentInfo
VALUES( 's00010','新的名字', '',7,'cardcard' )

   

更標準的寫法:

INSERT INTO dbo.StudentInfo(StudentID,StudentName,Gender,Age,CardID)
VALUES('s00010','新的名字','',7,'cardcard')

16.1.2 插入部分行

INSERT INTO dbo.StudentInfo( StudentID,StudentName,Gender, Age)
VALUES( 's00014','新的名字2', '',7)

16.1.3 插入檢索出的資料

INSERT INTO dbo.StudentInfo(StudentID,StudentName,Gender,Age)
VALUES('s00014','新的名字2', '',7)

16.2 從一個表復制到另一個表

SELECT * INTO #tmp1 FROM dbo.StudentInfo

第十七章 更新和洗掉資料

17.1 更新資料

UPDATE dbo.StudentInfo SET CardID='cardnew' WHERE StudentID='s00002' AND Age=7

17.2 洗掉資料

DELETE FROM dbo.StudentInfo WHERE StudentID='s00002' AND Age=7

第十八章 使用視圖

18.1 視圖

  視圖不包含任何列或資料,它包含的是一個查詢,

18.1.1 為什么使用視圖

    • 重用SQL陳述句
    • 簡化復雜的SQL操作,在撰寫查詢后,可以方便地重用它而不必知道它的基本查詢細節,
    • 使用表的組成部分而不是整個表,
    • 保護資料,可以給用戶授予表的特定部分的訪問權限而不是鱉個表的訪問權限,
    • 更改資料格式和表示,視圖可回傳與底層表的表示和格式不同的資料,

18.1.2 視圖的規則和限制

    • 與表一樣,視圖必須唯一命名(不能給視圖取與別的視圖或表相同的名字),
    • 對于可以創建的視圖數目沒有限制,
    • 為了創建視圖,必須具有足形的訪問權限,這些限制通常由資料庫管理人員授子,
    • 視圖可以嵌套,即:可以利用從其他視圖中檢素資料的查詢來構造一個視圖,所允許的恢套層數在不同的DBMS中有所不同(嵌套視圖可能會嚴重降低查詢的性能,因此在產品環境中使用之前,應該對其進行詳細的測驗),
    • 許多DBMS禁止在視圖查詢中使用ORDER BY子句,
    • 有的DBMS要求命名回傳的所有列,如果列是計算欄位,則需要使用別名
    • 視圖不能索引,也不能有關聯的觸發器或默認值,
    • 有的DBMS把視圖作為只讀的查詢,這表示可以從視圖檢索資料,但不能將資料寫回呼層表,詳情請參閱具體的DBMS檔案,
    • 有的DBMS允許創建這樣的視圖,它不允許進行導致行不再屬于視圖的插入或更新,例如,有這樣一個視圖,它只檢索帶有電子郵件地址的客戶,如果更新東個客戶,刪除他的電子郵件地址,這將使該客戶不再屬于視圖,這是默認行為,而且是允許的,但在具體的DBMS上可能能夠防止這種情況發生

18.2 創建視圖

18.2.1 利用視圖簡化復雜的聯結

CREATE VIEW student_view
AS
SELECT StudentName,Gender,Math,Chinese FROM dbo.StudentInfo LEFT JOIN dbo.StudentAchieve  ON StudentAchieve.StudentID = StudentInfo.StudentID;

18.2.2 用視圖重新格式化檢索出的資料

CREATE VIEW student_view
AS
SELECT RTRIM(StudentID)+'('+RTRIM(StudentName)+')' AS stuinfo FROM dbo.StudentInfo
SELECT * FROM student_view

   

第十九章 使用存盤程序

19.1 存盤程序

  存盤程序簡單來說,就是為了以后的使用而保存的一潭訓多條SQL陳述句的集合,可將其視為批檔案,

19.2 為什么要使用存盤程序

  簡單、安全、高性能,

19.3 執行存盤程序

  EXECUTE

  EXECUTE后面跟著存盤程序和需要傳遞給它的任何引數,

19.4 創建存盤程序

CREATE PROCEDURE test
AS
DECLARE @n INTEGER
SELECT @n=COUNT(*) FROM dbo.StudentInfo WHERE CardID IS NOT NULL
RETURN @n

第二十章 管理事務處理

20.1 事務處理

  事務處理(transaction processing)可以用來維護資料庫的完整性,它保證成批的SQL操作要么完全執行,要么完全不執行,

    • 事務 (transaction)指一組SQL陳述句,
    • 回退(ro11back)"指撤銷指定SOL陳述句的程序,
    • 提交(commit)指將未存盤的SOL陳述句結果寫入資料庫表,
    • 保留點(savepoint)指事務處理中設定的臨時占位符(placcholder),你可以對它發布回退(與回退整個事務處理不同),

20.2 控制事務處理

BEGIN TRANSACTION operation
--****
COMMIT TRANSACTION operation

20.2.1 使用ROLLBACK

ROLLBACK operation

20.2.2 使用保留點

SAVE TRANSACTION operation

第二十一章 使用游標

21.1 游標

  結果集(result set)SQL查詢所檢索出的結果,

  游標(cursor)是一個存盤在DBMS服務器上的資料庫查詢,它不是一條SELECT陳述句,二十被該陳述句檢索出來的結果集,

21.2 使用游標

21.2.1 創建游標

DECLARE testcursor CURSOR
FOR
SELECT StudentID FROM dbo.StudentInfo

21.2.2 使用游標

DECLARE @n [char] (20)
DECLARE testcursor CURSOR
FOR
SELECT StudentID FROM dbo.StudentInfo
OPEN testcursor
FETCH NEXT FROM testcursor INTO @n
BEGIN
        --***
        FETCH NEXT FROM testcursor INTO @n
END

21.2.3 關閉游標

CLOSE testcursor

第二十二章 了解高級SQL特性

22.1 約束

  約束(constraint)管理如何插入或梳理資料庫資料的規則

22.1.1 主鍵

  表中任意列只要滿足以下條件,都可以用于主鍵:

    • 任意兩行的主鍵值都不相同,
    • 每行都具有一個主鍵值(即列中不允許NULL值),
    • 包含主鍵值的列不修改或更新,
    • 主鍵值不能重用,如果從表中洗掉菜一行,其主鍵值不分配給新行,

22.1.2 外鍵

  外鍵是表中的一個列,其值必須再另一個表的主鍵中列出,

  外鍵可以幫助防止意外的洗掉,

22.1.3 唯一約束

  唯一約束用來保證一個列(或一組列)中的資料唯一,

22.1.4 檢查約束

  檢查約束用來保證一個列(或一組列)中的資料滿足一組指定的條件,

  CHECK

22.2 索引

  CREATE INDEX

22.3 觸發器

  CREATE TRIGGER

22.4 資料庫安全

    • 對資料庫管理功能(創建表、更改或刪除己存在的表等)的訪問;
    • 對特定資料庫或表的訪問;
    • 訪問的型別(只讀、對特定列的訪問等)
    • 僅通過視圖或存盤程序對表進行訪問;
    • 創建多層次的安全措施,從而允許多種基于登錄的訪問和控制;
    • 限制管理用戶賬號的能力,

 

作者:可達鴨要進化
出處:http://www.cnblogs.com/Aries-rong/
本文著作權歸作者和博客園共有,歡迎轉載,但是未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利,

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/472396.html

標籤:SQL Server

上一篇:如何使用 SQL LIKE 運算子進行通配搜索

下一篇:什么是高可用性,我們為什么需要它?

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more