SqlServer對錶的基本操作

来源:https://www.cnblogs.com/e-link/archive/2022/09/16/16698507.html
-Advertisement-
Play Games

SqlServer對錶的基本操作 手動建庫建表 腳本建庫建表 SQL Server關係資料庫的數據表結構主要是由記錄(行)和欄位(列)構成,每一行代表唯一的一條記錄(Record),而每列則代表所有記錄中的一個域(Field)(也稱為欄位、屬性)。 註意:在同一個資料庫里,表的名字也必須是唯一的。在 ...


SqlServer對錶的基本操作

手動建庫建表 

 

腳本建庫建表 

  SQL Server關係資料庫的數據表結構主要是由記錄(行)和欄位(列)構成,每一行代表唯一的一條記錄(Record),而每列則代表所有記錄中的一個域(Field)(也稱為欄位、屬性)。

註意:在同一個資料庫里,表的名字也必須是唯一的。在同一個表裡,列的名字必須是唯一的。

SQL Server中的表一共有兩類,即永久表和臨時表。

  1. 永久表都保存在資料庫文件中
  2. 臨時表雖然與永久表很相似,但它們卻是存儲在tempdb資料庫中的,而且當不再使用這些臨時表時,它們會被自動刪除。

SQL Server的數據類型可以分為系統內置的數據類型和用戶自定義數據類型。系統數據類型是系統內置的數據類型,主要有:

  1)整數型

    

  2)小數數據類型(精確數據類型)

  3)近似數值型(浮點數據類型)

  4)字元型和Unicode字元型

  5)邏輯數值型

  6)日期和時間數據

  7)二進位數據類型

  8)貨幣型數據

  9)其他數據類型

定義:

  數據完整性就是要求資料庫表中的數據具有準確性。

方法:

  為了維護資料庫中數據的準確性,通常是在創建表時為表中的欄位定義約束,防止將錯誤的數據插入到表中。

分類:

 SQL Server中數據完整性包含四種類型分別是:實體完整性、域完整性、參照完整性、用戶定義完整性。

(1)實體完整性

  實體完整性將記錄(行)定義為特定表的唯一實體,即每一行數據都反映不同的實體,不能存在相同的數據行。

  通過索引、UNIQUE(唯一)約束、PRIMARY KEY(主鍵)約束、標識列屬性可以實現實體完整性。

約束種類 功能描述

PRIMARY

KEY(主鍵)約束,唯一識別每一條記錄的標誌,可以有多列共同組成

IDENTITY(自增)約束

列值自增,一般使用此屬性設置的列作為主鍵

UNIQUE(唯一)約束

可以使用UNIQUE約束確保在非主鍵列中不存在重覆值,但列值可以是NULL(空)

(2)域完整性

域完整性指特定欄位項的有效性。

可以強制域完整性限制類型(通過使用數據類型)、限制格式(通過使用CHECK約束和規則)或限制可能值的範圍(通過使用FOREIGN KEY 約束、CHECK約束、DEFAULT定義、NOTNULL定義和規則)。

名稱 描述

CHECK(檢查)約束

用於限制列中值得範圍

FOREIGN KEY(外鍵)

一個表中的FORENIGN KEY 指向另一個表中的PRIMARY KEY

DEFAULT(預設值)約束

用於向列中插入預設值

NOT NULL(非空)約束

用於強制列不接受NULL(空)值

(3)參照完整性

在輸入或刪除數據行時,參照完整性約束用來保持表與表之間已定義的關係。在SQL Server 2016中,參照完整性通過FOREIGN KEY和CHECK約束,以外鍵與主鍵之間或外鍵與唯一鍵之間的關係為基礎。參照完整性確保鍵值在所有表中一致。這類一致性要求不能引用不存在的值,如果一個鍵值發生更改,則整個資料庫中,對該鍵值的所有引用要進行一致的更改

(4)用戶定義完整性

用戶自定義完整性用來定義特定的規則。例如,輸入學生年齡時,只能輸入大於0的值。所有完整性類別都支持用戶定義完整性。這包括創建表中所有列級約束和表級約束、存儲過程以及觸發器。

創建表的步驟:

  1)定義表結構:給表的每一列取欄位名,並確定每一列的數據類型、數據長度、列數據是否可以為空等。

  2)設置約束:設置約束是為了限制該列輸入值的取值範圍,以保證輸入數據的正確性和一致性。

  3)添加數據:表結構建立完成之後,就可以向表中輸入數據了。

create table
CREATE TABLE 表名                                        
(列1定義,                                  
   列2定義,                                    
   列n 定義)
   
   /*其中:
< 列定義 > ::= { 列名 數據類型 }
       [ [ DEFAULT 約束表達式 ]
        | [ IDENTITY [ ( seed , increment ) [ NOT FOR REPLICATION ] ] ]
       ] 
       [ < 列約束> ] [ ...n ] 
       */
   

  案例1.

    創建帶有參照約束的學生表,學生表的表結構定義如下表所示。“學號”欄位為學生表的主鍵,“班級代碼”欄位為學生表的外鍵,它必須參照班級表中的“班級代碼”欄位的值。

CREATE TABLE 學生(   
    // identity表示自增列的意思,而intidentity(1,1)表示從1開始遞增,每次自增1。
    // primary key的作用是定義主鍵;主鍵的值不可以重覆,也不可以為空
學號  char(12)   IDENTITY(1,1)  PRIMARY KEY,  
姓名 varchar(20)   NOT NULL,  // not null為不為空
性別 char(2), 
出身日期 datatime, 
入學時間 datatime, 
班級代碼 char(9)   CONSTRAINT fk_bjdm REFERENCES 班級(班級代碼)  )

// 代碼中的PRIMARY IDENTITY CONSTRAINT等關鍵字是對錶中各列進行完整性約束的一些詞語

表的查看

1、 使用系統存儲過程Sp_help 查看

  使用系統存儲過程sp_help來查看表的屬性的方法是:在sp_help後面加上要看的表名作為參數。其格式如下: 

  EXEC sp_help  表名 

    例如,要查看上述在Students資料庫中所創建的學生表的屬性,可以使用如下語句: EXEC sp_help 學生表

    如果用戶想查看該資料庫中所有表的屬性,則可以直接使用系統存儲過程sp_help後不帶任何參數來進行顯示。 

2、使用SQL Server Management Studio(SSMS)查看 

  除了上述使用系統存儲過程來顯示表的屬性外,在SQL Server Management Studio中查看表的定義會更加方便。其方法如下: 

  1)、在【對象資源管理器】下展開資料庫並選中“表”選項,在需要查看表的名稱上右鍵單擊,在彈出的快捷菜單中選擇“屬性”選項,可以打開“表屬性”對話框,用戶可以查看表中每一列的定義。

表的修改

  要修改表,可以使用ALTER TABLE語句或SQL Server ManagementStudio兩種方法來進行。

  1使用T-SQL 語句ALTER TABLE命令修改表

  使用ALTER TABLE語句對錶進行修改常見的情況有以下幾種。 

    1、向表中添加新列 

    向表中添加新列時  :  需要在  ALTER TABLE  語句中使用 ADD子句。

    語法格式如下:

      修改表中列的定義  ALTER TABLE 表名 ALTER COLUMN 列名 <列屬性> ;

ALTER TABLE 表名 ADD 列名  數據類型  屬性1 屬性2…….. 

//【例】向教材表增加單價列,列名為單價,數據類型為float,預設空值,代碼如下: 

ALTER TABLE 教材  

ADD 單價 float(2)  NULL;

GO

 

註意:向已存在的表中增加列時,應使新增加的列具有預設值或允許其為空值。添加列完成時,SQL Server將向表中已存在的行填充新增列的預設值或空值。如果既沒有提供預設值也不允許為空值,那麼新增列的操作將出錯,因為SQL Sever不知道該怎麼處理那些已經存在的行。

     2、刪除表中的列 

      刪除表中的列需要使用ALTER TABLE語句的DROP COLUMN子句。 格式: 

      ALTER TABLE 表名 DROP COLUMN 列名 ;  // column是欄位,也就是列!

    【例】將教材表中建立的“單價”列刪除。其代碼如下: 

ALTER TABLE 教材 DROP COLUMN單價;
GO

         3、修改表中列的定義 

        修改表中某列的屬性定義語法如下:

             ALTER TABLE 表名 ALTER COLUMN 列名 <列屬性> ;

    例】將教材表中教材名稱欄位數據類型的長度修改為20

ALTER TABLE 教材 ALTER COLUMN 教材名稱 varchar(20);
GO

   4、修改表中列的名稱

        修改表中某列的列名語法如下:

     EXEC SP_RENAME‘表名.原列名’,‘新列名’, ‘COLUMN’ ;

    【例】將班級表中系部名稱修改為院系名稱

EXEC SP_RENAME ‘班級.系部代碼’,‘院系代碼’, ’COLUMN’;
GO

 

 

數據表中的數據操作

   數據刪除

    當省略WHERE語句時,將刪除表中所有的行。

      註意:如果刪除的數據就直接來源於後面聲明的基本表,可以省略FROM命令

   1)普通DELETE語句。

     基本語法: DELETE FROM 表名 [WHERE 邏輯表達式 ]

  2)關聯DELETE語句。

    在部分刪除數據的任務中,需要使用其它表中的數據作為條件依據,此時就可用關聯DELETE。

     DELETE 表名 [FROM 源表名 [ , … N ]] [WHERE 邏輯表達式 ]

     【例】將“選課”表中的學分欄位值小於課程表中學分的課程刪除。

    代碼如下:

DELETE 選課 FROM 選課 a,課程 b WHERE a.課程號=b.課程號 AND a.學分<b.學生

   3)子查詢DELETE語句。

 ·    基本語法: DELETE FROM 表名 [WHERE 邏輯表達式 ]

     【例】找出課程號在“選課”表中而又不在“課程”表中的記錄給予刪除。

    代碼如下:

 DELETE 選課 WHERE 課程號 NOT IN (SELECT 課程號 FROM 課程)

   4)TRUNCATE TABLE語句 。

    當需要快速清除某表的全部數據時,可以用TRUNCATE命令。TRUNCATE命令可以將表中所有數據刪除,但是並不刪除基本表,表的基本結構還存在。

     基本語法: TRUNCATE TABLE 表名;

     【例】清空“教材”表。

    代碼如下: TRUNCATE TABLE 教材;

 


數據添加

 INSERT插入數據時有兩種方式:

    插入單行數據(使用關鍵字VALUES)和插入多行數據(使用關鍵字SELECT)。

 1、使用INSERT語句插入單行數據

    使用INSERT語句一次插入一行數據,是最常用的數據添加方法。

    INSERT語句基本語法格式如下:

INSERT  [INTO] <表名>  [<欄位名列表>]
VALUES (值列表)

  <欄位名列表>中個各欄位之間用逗號隔開,<值列表>中個各值之間也用逗號隔開。

  在插入數據的時候,需要註意以下事項:

  1.   值列表與欄位名列表中的各項是一一對應的,每個數據值的數據類型也必須與對應欄位匹配。
  2.   INSERT語句不能為標識列指定值,因為其中數據是由系統自動生成的。
  3.   對於非數值型數據需用單引號括起來。

 

  有約束的欄位,輸入內容必須滿足約束條件。

 對於不允許為空的欄位,必須要輸入內容,允許為空的欄位可以用NULL代替。

  有預設值的欄位,如果沒有添加數據,系統會自動插入預設值。

  如果<欄位名列表>省略,則對錶中所有列插入數據。

【例】向“教材表”插入一行數據。

INSERT INTO 教材(教材編碼,教材名稱,出版商名稱)
VALUES ('2008001','SQLServer','北京郵電大學')
// 由於本例是對錶中所有列插入數據,所以也可改為:
INSERT INTO 教材
VALUES ('2008001','SQL Server','北京郵電大學')

  註意:只有當填入數據的數量、順序都與基本表中欄位一一對應的時候,才可以省略欄位名列表。

 2、使用INSERT語句插入多行數據

    如果需要把其他表中的多條記錄添加到當前表中,可以在插入數據時通過INSERT SELECT 語句可以實現將SELECT查詢語句的結果集添加到當前表中,格式如下:

INSERT [INTO] <當前表名>[<欄位名列表>]
SELECT <欄位名列表>
FROM 源表名 [, … N ]
[WHERE 邏輯表達式 ]

其中SELECT查詢語句的結果集中每個欄位必須要有列名,如果無列名必須聲明別名。

 

【例】新建一表,其名為“教材副表”,表結構完全與“教材表”相同。將“教材表”中出版商為北京郵電大學的記錄插入到該表中。代碼如下:

SELECT * INTO 教材副表 FROM 教材 WHERE 2=3
GO

註意:以上代碼僅僅只是建立了一張空表,表的結構和教材表的結構一致,卻沒有具體數據,因為用到查詢條件“WHERE 1=2”永遠不成立,這是一常用方法

INSERT INTO 教材副表(教材編碼,教材名稱,出版商名稱)

SELECT *

FROM 教材 WHERE 出版商名稱='北京郵電大學'

GO

在本例中,也可以把INSERT語句改為以下語句:

INSERT INTO 教材副表

SELECT *

FROM 教材 WHERE出版商名稱='北京郵電大學'

GO

註意:使用這種方法一定要杜絕表中有標識列的情況,因為INSERT語句不能為標識列指定值,系統會提示錯誤。

 

   1. 使用INSERT語句插入單行數據

    使用INSERT語句一次插入一行數據,是最常用的數據添加方法。

    基本語法: INSERT [INTO] <表名> [<欄位名列表>] VALUES (值列表)

·    【例】向“教材表”插入一行數據。代碼如下:

   INSERT INTO 教材(教材編碼,教材名稱,出版商名稱) VALUES ('2008001','SQL Server','北京郵電大學')

   2. 使用INSERT語句插入多行數據。

    如果需要把其他表中的多條記錄添加到當前表中,可以在插入數據時通過INSERT SELECT 語句可以實現將SELECT查詢語句的結果集添加到當前表中

INSERT [INTO] <當前表名> [<欄位名列表>]
SELECT <欄位名列表>
FROM 源表名 [, … N ]
[WHERE 邏輯表達式 ] 

    【例】新建一表,其名為“教材副表”,表結構完全與“教材表”相同。將“教材表”中出版商為北京郵電大學的記錄插入到該表中。代碼如下: 

SELECT * INTO 教材副表 FROM 教材 WHERE 1=2    
GO
INSERT INTO 教材副表(教材編碼,教材名稱,出版商名稱)
SELECT * 
FROM 教材 WHERE 出版商名稱='北京郵電大學'
GO

數據更新

    2. 普通UPDATE語句

     使用INSERT語句一次插入一行數據,是最常用的數據添加方法。

    基本語法: UPDATE 表名 SET {欄位名 = 表達式 | NULL | DEFAULT } [ , …N] [ WHERE 邏輯表達式 ]

  

 其中:

    表名 :需修改的表的名稱

    欄位名 = 表達式 | NULL | DEFAULT:指修改指定欄位的值

    WHERE表示滿足什麼條件才能修改

   【例】修改選課表中是資料庫基礎的所有課程號學分為從4改為3。代碼如下:

     UPDATE 選課

       SET 學分=3

       WHERE 課程號 = (SELECT 課程號 FROM 課程 WHERE 課程名稱='資料庫基礎')

    3. 關聯UPDATE語句    

// 基本語法:
UPDATE  表名
SET  {欄位名 = 表達式 | NULL | DEFAULT } [ , …N]
[ FROM 源表名  [ , … N ]] 
[ WHERE 邏輯表達式 ] 

  例】用“選課表”中的成績來修改“成績表”中的期末成績。代碼如下:

UPDATE 成績
SET 期末成績=b.成績
FROM 成績a,選課b
WHERE a.課程號=b.課程號


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 大家好,我是三友~~ 在對於讀寫鎖的認識當中,我們都認為讀時加讀鎖,寫時加寫鎖來保證讀寫和寫寫互斥,從而達到讀寫安全的目的。但是就在我翻Eureka源碼的時候,發現Eureka在使用讀寫鎖時竟然是在讀時加寫鎖,寫時加讀鎖,這波操作屬實震驚到了我,於是我就花了點時間研究了一下Eureka的這波操作。 ...
  • DotnetZip使用方法見此文章https://www.cnblogs.com/pengze0902/p/6124659.html在netframework環境下,使用上面文章中的設置Encoding為Default的方法即可解決中文亂碼問題 但是當我使用.net6創建控制台項目並採用上述代碼時, ...
  • iNeuOS工業互聯網操作系統面向:儀器儀錶、雙碳環保、核能科學與工程和鋼鐵冶金領域頒發第一批技術認證資質,一共21名同志在項目實施過程中表現突出,從iNeuOS的應用、開發及項目過程中的交流都大大促進了項目保質保量的快速交付,特此頒發應用實施和二次開發工程認證。 ...
  • 一:背景 1. 講故事 前段時間有位朋友在微信上找到我,說他的程式出現了記憶體泄漏,能不能幫他看一下,這個問題還是比較經典的,加上好久沒上非托管方面的東西了,這篇就和大家分享一下,話不多說,上 WinDbg 說話。 二:WinDbg 分析 1. 到底是哪裡的泄漏 好的開始就是成功的一半,否則就南轅北轍 ...
  • sed高階用法 sed編輯器 sed是一種流編輯器,流編輯器會在編輯器處理數據之前基於預先提供的一組規則來編輯數據流。 1.sed編輯器工作流程 sed編輯器可以根據命令來處理數據流中的數據,這些命令要麼從命令行中輸入,要麼存儲在一個命令文本文件中。 sed的工作流程主要包括讀取、執行和顯示三個過程 ...
  • 個人學習-Linux文件系統架構 1. 參考文章 [1]https://blog.csdn.net/Holy_666/article/details/86532671 [2]CSDN博主土豆西瓜大芝麻:[Linux的VFS詳解]:https://blog.csdn.net/jinking01/art ...
  • Linux的哲學思想 優勢 一切都是一個文件。(包括硬體,文本,二進位,源代 碼) 系統中擁有小型,單一用途的程式。(一個程式只負責 做好自己的本職工作) 當遇到複雜任務,通過不同功能用途的程式組合起來 完成。 輕量級,一臺服務 dhcp ip 資料庫服務 網 頁 避免令人困惑的用戶界面就是沒有複雜 ...
  • This blog introduces how to do SLAM related development natively on M1(Apple silicon) macbook. Most people come from Ubuntu environment will choose th ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...