sql >> データベース >  >> RDS >> Sqlserver

SQLServerの一意の制約とは-SQLServer/TSQLチュートリアルパート95

    SQL Serverの一意性制約とは:

    SQL Serverの一意の制約は、一意の値のみを受け入れるように列を制限するために1つまたは複数の列に作成されます。
    一意の制約が作成される列では、単一のNull値のみが許可されます。

    シナリオ:

    保険会社のSQLServer開発者として働いているとすると、SSN列を持ち、常に一意の値を受け入れる必要があるdbo.Customerテーブルを作成するように求められます。


    解決策:

    上記のシナリオでは、SSN列に一意性制約を使用できます。以下のスクリプトを使用して、列に一意の制約を作成できます。
    USE [YourDatabaseName]
    GO
    CREATE TABLE [dbo].[Customer](
        [FirstName] [varchar](50) NULL,
        [LastName] [varchar](50) NULL,
        [SSN] VARCHAR(11),
        Unique(SSN)
    ) 
    
    --Insert sample records in table 
    Insert into dbo.Customer(FirstName,LastName,SSN)
    Values('Raza','M',Null)
    ,('Aamir','Shahzad','000-00-0001')
    ,('Aamir','Shahzad','000-00-0002')
     
     
    Select query
    を使用して、dbo.Customerテーブルのデータを確認します。
    SQLServerの列に一意性制約を追加する方法

    システムビューを使用して、一意の制約が追加されているかどうか、およびSQLServerがそれに付けた名前を確認しましょう。
    SELECT *
    FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
    WHERE CONSTRAINT_TYPE = 'UNIQUE'
     
    SQLServerに一意の制約を追加する方法
     SQLServerがUniqueConstraintに「UQ__Customer__CA1E8E3C7E8AFCB1」という名前を付けていることがわかります。命名規則を実装する場合は、自分で名前を指定する必要があります。
    [一意の制約]列に既に存在する値を挿入しようとすると、以下のエラーが発生します。
    Insert into dbo.Customer(FirstName,LastName,SSN)
    Values('Raza','M',Null)
     
     メッセージ2627、レベル14、状態1、行11 
    UNIQUEKEY制約の違反'UQ__Customer__CA1E8E3C7E8AFCB1'。オブジェクト'dbo.Customer'に重複するキーを挿入できません。重複するキー値は()です。
    ステートメントは終了しました。

    何らかの命名規則を使用して一意性制約を作成する場合は、以下の構文を使用できます。

    USE [YourDatabaseName]
    GO
    CREATE TABLE [dbo].[Customer](
        [FirstName] [varchar](50) NULL,
        [LastName] [varchar](50) NULL,
        [SSN] VARCHAR(11),
        Constraint UQ_Dbo_Customer_SSN Unique(SSN)
    ) 
     


    ビデオデモ:SQLServerの一意の制約とは





    1. Androidルームライブラリがアセットからデータベースをコピーできません

    2. MariaDBで省略記号を使用してテキストを切り捨てる方法

    3. SQL Server 2005で電話番号を格納するために使用するデータ型は何ですか?

    4. SQLServerデータベースでID列を持つすべてのテーブルを検索する方法-SQLServer/T-SQLチュートリアルパート45