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
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...