SQL Server創建表

SQL Server是Microsoft開發的一個關係型數據庫管理系統,無論是開發小型還是大型應用它都有很好的表現。本文從多個方面介紹SQL Server創建表的方法和技巧。

一、表的基礎結構

在SQL Server中,創建表需要定義表的基礎結構。基礎結構包括表的名稱、列名稱、數據類型和列約束等。


CREATE TABLE [dbo].[Employee](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [First Name] [varchar](50) NOT NULL,
    [Last Name] [varchar](50) NULL,
    [Email] [varchar](50) NULL,
 CONSTRAINT [PK_Employee] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

上述代碼示例為創建名為Employee的表,並定義了四列:id(自增型整數)、First Name(非空的字符串型)、Last Name(字符串型,可以為空)和Email(字符串型,可以為空)。其中,id列被指定為主鍵,且使用IDENTITY屬性進行自增。在創建表時,需要使用CREATE TABLE語句,同時定義表的名稱和列的屬性。

二、主鍵和外鍵

主鍵和外鍵是SQL Server中非常重要的概念,它們用於建立表與表之間的關係。主鍵用於唯一標識表中的每一行數據,而外鍵則用於建立表之間的聯繫。

可以使用以下代碼來創建包含主鍵和外鍵的表:


CREATE TABLE [dbo].[Employee](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [First Name] [varchar](50) NOT NULL,
    [Last Name] [varchar](50) NULL,
    [Email] [varchar](50) NULL,
 CONSTRAINT [PK_Employee] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[Orders](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [EmployeeId] [int] NOT NULL,
    [OrderDate] [date] NOT NULL,
 CONSTRAINT [PK_Orders] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Orders]  WITH CHECK ADD  CONSTRAINT [FK_Orders_Employee] FOREIGN KEY([EmployeeId])
REFERENCES [dbo].[Employee] ([id])
GO
ALTER TABLE [dbo].[Orders] CHECK CONSTRAINT [FK_Orders_Employee]
GO

上述代碼示例創建了兩個表:Employee和Orders。Employee表中的id列被指定為主鍵,而Orders表中的EmployeeId列則被指定為外鍵,用於與Employee表建立聯繫。

三、列屬性的約束

在SQL Server中,可以使用列的屬性約束來限制列的取值範圍、驗證輸入數據等。下面介紹幾種常用的列屬性約束:

1. 非空約束

非空約束用於限制該列的值不能為空。當使用非空約束時,插入一條沒有該列的值的數據時,SQL Server將會返回一個錯誤。


CREATE TABLE [dbo].[Employee](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [First Name] [varchar](50) NOT NULL,
    [Last Name] [varchar](50) NULL,
    [Email] [varchar](50) NULL,
 CONSTRAINT [PK_Employee] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

2. 唯一約束

唯一約束用於限制該列的值不能重複。當使用唯一約束時,插入一條重複的數據時,SQL Server將會返回一個錯誤。


CREATE TABLE [dbo].[Employee](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [First Name] [varchar](50) NOT NULL,
    [Last Name] [varchar](50) NULL,
    [Email] [varchar](50) NULL,
 CONSTRAINT [PK_Employee] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY],
 CONSTRAINT [UQ_Email] UNIQUE NONCLUSTERED 
(
    [Email] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

3. 默認值約束

默認值約束用於在插入數據時設置該列的默認值。當插入數據時,如果該列沒有輸入值,將會使用默認值。


CREATE TABLE [dbo].[Employee](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [First Name] [varchar](50) NOT NULL,
    [Last Name] [varchar](50) NULL,
    [Email] [varchar](50) NULL DEFAULT 'test@test.com',
 CONSTRAINT [PK_Employee] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

4. 檢查約束

檢查約束用於限制該列的值必須符合指定條件。當插入數據時,如果該列輸入的值不符合指定條件,SQL Server將會返回一個錯誤。


CREATE TABLE [dbo].[Employee](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [First Name] [varchar](50) NOT NULL,
    [Last Name] [varchar](50) NULL,
    [Email] [varchar](50) NULL,
    [Salary] [money] NOT NULL CHECK (([Salary]>(0))),
 CONSTRAINT [PK_Employee] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

四、表的索引

索引是一個非常強大的工具,它可以加速對錶的查詢和更新操作。在SQL Server中,可以使用CREATE INDEX語句創建索引。

下面代碼示例展示了如何在Employee表的LastName列上創建索引:


CREATE NONCLUSTERED INDEX [IX_Employee_LastName] ON [dbo].[Employee]
(
    [Last Name] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO

五、表的分區

表的分區是一種高級技術,它可以將一個表中的數據分成多個分區進行管理。在SQL Server中,可以使用CREATE PARTITION FUNCTION和CREATE PARTITION SCHEME語句來實現表的分區。

下面代碼示例展示了如何使用CREATE PARTITION FUNCTION和CREATE PARTITION SCHEME語句來創建一個Employee表的分區:


CREATE PARTITION FUNCTION EmployeePF1 (int)
AS RANGE LEFT FOR VALUES (100, 200, 300)

CREATE PARTITION SCHEME EmployeePS1
AS PARTITION EmployeePF1
TO ([PRIMARY], [PRIMARY], [PRIMARY], [PRIMARY])

CREATE TABLE [dbo].[Employee](
    [id] [int] NOT NULL,
    [First Name] [varchar](50) NOT NULL,
    [Last Name] [varchar](50) NULL,
    [Email] [varchar](50) NULL,
 CONSTRAINT [PK_Employee] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON EmployeePS1(id)

六、總結

本文介紹了SQL Server中創建表的基本結構和常用技巧,包括創建主鍵和外鍵、列屬性約束、表的索引和分區等。在實際開發中,需要根據具體的需求選擇不同的技術,以提高數據庫系統的處理效率和數據管理能力。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/246183.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 13:13
下一篇 2024-12-12 13:13

相關推薦

  • Hibernate日誌打印sql參數

    本文將從多個方面介紹如何在Hibernate中打印SQL參數。Hibernate作為一種ORM框架,可以通過打印SQL參數方便開發者調試和優化Hibernate應用。 一、通過配置…

    編程 2025-04-29
  • 使用SQL實現select 聚合查詢結果前加序號

    select語句是數據庫中最基礎的命令之一,用於從一個或多個表中檢索數據。常見的聚合函數有:count、sum、avg等。有時候我們需要在查詢結果的前面加上序號,可以使用以下兩種方…

    編程 2025-04-29
  • 理解Mybatis中的SQL Limit用法

    Mybatis是一種非常流行的ORM框架,提供了SQL映射配置文件,可以使用類似於傳統SQL語言的方式編寫SQL語句。其中,SQL的Limit語法是一個非常重要的知識點,能夠實現分…

    編程 2025-04-29
  • SQL預研

    SQL預研是指在進行SQL相關操作前,通過數據分析和理解,確定操作的方法和步驟,從而避免不必要的錯誤和問題。以下從多個角度進行詳細闡述。 一、數據分析 數據分析是SQL預研的第一步…

    編程 2025-04-28
  • RabbitMQ Server 3.8.0使用指南

    RabbitMQ Server 3.8.0是一個開源的消息隊列軟件,官方網站為https://www.rabbitmq.com,本文將為你講解如何使用RabbitMQ Server…

    編程 2025-04-27
  • SQL Server Not In概述

    在今天的軟件開發領域中,數據庫查詢不可或缺。而SQL Server的”Not In”操作符就是這個領域中非常常用的操作符之一。雖然”Not In…

    編程 2025-04-25
  • Windows Server 2012激活碼

    一、激活碼是什麼? 激活碼是用於激活軟件產品的一種序列號,可以通過購買或升級軟件獲得。Windows Server 2012的激活碼可以確保軟件的合法使用,避免非法行為。 激活碼的…

    編程 2025-04-25
  • 使用VSCode Live Server進行Web開發

    Web開發已經成為現代開發的一個重要部分,而VSCode也成為了許多開發者的首選開發工具。VSCode Live Server是VSCode中一個非常有用的插件,可以幫助Web開發…

    編程 2025-04-25
  • GORM SQL注入詳解

    GORM是一個非常優秀的Go語言ORM框架,它的目標是簡化數據庫操作,提高開發效率,但是在使用的過程中,也難免會遇到SQL注入的問題。本文將從多個方面來詳細解析GORM SQL注入…

    編程 2025-04-25
  • SQL ROW_NUMBER 函數用法

    一、實現排序 SQL ROW_NUMBER 函數是 SQL Server 數據庫實現分組排序功能的一種方法,允許您根據一個或多個列進行排序。這是 SQL ROW_NUMBER 的一…

    編程 2025-04-25

發表回復

登錄後才能評論