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
  • 前言 當別人做大數據用Java、Python的時候,我使用.NET做大數據、數據挖掘,這確實是值得一說的事。 寫的並不全面,但都是實際工作中的內容。 .NET在大數據項目中,可以做什麼? 寫腳本(使用控制台程式+頂級語句) 寫工具(使用Winform) 寫介面、寫服務 使用C#寫代碼的優點是什麼? ...
  • 前言 本文寫給想學C#的朋友,目的是以儘快的速度入門 C#好學嗎? 對於這個問題,我以前的回答是:好學!但仔細想想,不是這麼回事,對於新手來說,C#沒有那麼好學。 反而學Java還要容易一些,學Java Web就行了,就是SpringBoot那一套。 但是C#方向比較多,你是學控制台程式、WebAP ...
  • 某一日晚上上線,測試同學在回歸項目黃金流程時,有一個工單項目介面報JSF序列化錯誤,馬上升級對應的client包版本,編譯部署後錯誤消失。 線上問題是解決了,但是作為程式員要瞭解問題發生的原因和本質。但這都是為什麼呢? ...
  • 本文介紹基於Python語言中TensorFlow的Keras介面,實現深度神經網路回歸的方法。 1 寫在前面 前期一篇文章Python TensorFlow深度學習回歸代碼:DNNRegressor詳細介紹了基於TensorFlow tf.estimator介面的深度學習網路;而在TensorFl ...
  • 前段時間因業務需要完成了一個工作流組件的編碼工作。藉著這個機會跟大家分享一下整個創作過程,希望大家喜歡,組件暫且命名為"easyFlowable"。 接下來的文章我將從什麼是工作流、為什麼要自研這個工作流組件、架構設計三個維度跟大家來做個整體介紹。 ...
  • 1 簡介 我們之前使用了dapr的本地托管模式,但在生產中我們一般使用Kubernetes托管,本文介紹如何在GKE(GCP Kubernetes)安裝dapr。 相關文章: dapr本地托管的服務調用體驗與Java SDK的Spring Boot整合 dapr入門與本地托管模式嘗試 2 安裝GKE ...
  • 摘要:在jvm中有很多的參數可以進行設置,這樣可以讓jvm在各種環境中都能夠高效的運行。絕大部分的參數保持預設即可。 本文分享自華為雲社區《為什麼需要對jvm進行優化,jvm運行參數之標準參數》,作者:共飲一杯無。 我們為什麼要對jvm做優化? 在本地開發環境中我們很少會遇到需要對jvm進行優化的需 ...
  • 背景 我們的業務共使用11台(阿裡雲)伺服器,使用SpringcloudAlibaba構建微服務集群,共計60個微服務,全部註冊在同一個Nacos集群 流量轉發路徑: nginx->spring-gateway->業務微服務 使用的版本如下: spring-boot.version:2.2.5.RE ...
  • 基於php+webuploader的大文件分片上傳,帶進度條,支持斷點續傳(刷新、關閉頁面、重新上傳、網路中斷等情況)。文件上傳前先檢測該文件是否已上傳,如果已上傳提示“文件已存在”,如果未上傳則直接上傳。視頻上傳時會根據設定的參數(分片大小、分片數量)進行上傳,上傳過程中會在目標文件夾中生成一個臨 ...
  • 基於php大文件分片上傳至七牛雲,使用的是七牛雲js-sdk V2版本,引入js文件,配置簡單,可以暫停,暫停後支持斷點續傳(刷新、關閉頁面、重新上傳、網路中斷等情況),可以配置分片大小和分片數量,官方文檔https://developer.qiniu.com/kodo/6889/javascrip ...