亚洲区国产区激情区无码区,国产成人mv视频在线观看,国产A毛片AAAAAA,亚洲精品国产首次亮相在线

SQL 約束(Constraints)

在本教程中,您將學(xué)習(xí)如何使用SQL約束。

什么是約束?

約束只是對表的一個或多個列的限制,以限制可以存儲在該列中的值的類型。約束提供了一種標(biāo)準(zhǔn)機制來維護數(shù)據(jù)庫表內(nèi)數(shù)據(jù)的準(zhǔn)確性和完整性。

SQL中有幾種不同類型的約束,包括:

現(xiàn)在,讓我們詳細討論每個約束。

NOT NULL約束

該NOT NULL限制指定列不接受NULL值。

這意味著,如果NOT NULL對列施加約束,那么您必須在表中插入新行而不為該列添加非NULL值。

以下SQL語句創(chuàng)建一個名為person的表,該表有四列,其中三列id,namephone不接受NULL值。

CREATE TABLE persons (
    id INT NOT NULL,
    name VARCHAR(30) NOT NULL,
    birth_date DATE,
    phone VARCHAR(15) NOT NULL
);

注意:空值或NULL不同于零,空白或長度為零的字符串,例如''。NULL表示尚未輸入。

主鍵約束(PRIMARY KEY)

PRIMARY KEY約束標(biāo)識具有唯一標(biāo)識表中的行值的列的列或集。表中的任何兩行都不能具有相同的主鍵值。同樣,您不能NULL在主鍵列中輸入值。

以下SQL語句創(chuàng)建一個名為persons的表,并將id列指定為主鍵。這意味著該字段不允許NULL或重復(fù)值。

CREATE TABLE persons (
    id INT NOT NULL PRIMARY KEY,
    name VARCHAR(30) NOT NULL,
    birth_date DATE,
    phone VARCHAR(15) NOT NULL
);

提示:主鍵通常由一個表中的一列組成,但是可以由多個列組成該主鍵,例如,員工的電子郵件地址或分配的標(biāo)識號是員工表的邏輯主鍵。

唯一約束(UNIQUE)

UNIQUE約束限制一個或多個列在表中包含唯一值。

盡管UNIQUE約束和PRIMARY KEY約束都強制唯一性,UNIQUE但是PRIMARY KEY當(dāng)您要強制列或列組合(而不是主鍵)的唯一性時,請使用約束而不是約束。

以下SQL語句創(chuàng)建一個名為persons的表,并將phone列指定為unique。這意味著該字段不允許重復(fù)值。

CREATE TABLE persons (
    id INT NOT NULL PRIMARY KEY,
    name VARCHAR(30) NOT NULL,
    birth_date DATE,
    phone VARCHAR(15) NOT NULL UNIQUE
);

注意:可以在一個表上定義多個UNIQUE約束,而在一個表上只能定義一個PRIMARY KEY約束。而且,與PRIMARY KEY約束不同,UNIQUE約束允許NULL值。

默認約束(DEFAULT)

DEFAULT約束指定列的默認值。

列的默認值是當(dāng)INSERT語句未顯式分配特定值時,數(shù)據(jù)庫引擎將在列中插入的某個值。

以下SQL語句為“ 國家/地區(qū)”列創(chuàng)建一個默認值。

CREATE TABLE persons (

    id INT NOT NULL PRIMARY KEY,
    name VARCHAR(30) NOT NULL,
    birth_date DATE,
    phone VARCHAR(15) NOT NULL UNIQUE,
    country VARCHAR(30) NOT NULL DEFAULT 'Australia'

);

注意:如果將表列定義為NOT NULL,但為該列分配一個默認值,則在INSERT語句中無需為該列顯式分配一個值即可在表中插入新行。

外鍵約束(FOREIGN KEY)

外鍵(FK)是一列或列的組合,用于在兩個表中的數(shù)據(jù)之間建立和加強關(guān)系。

這是顯示雇員(employees)部門departments)表之間關(guān)系的示例圖。如果仔細查看,您會注意到employees表的dept_id列與departments表的主鍵列匹配。因此,dept_id為的列名員工表的外鍵的部門表。

外鍵關(guān)系圖

在MySQL中,您可以如下創(chuàng)建FOREIGN KEY表時通過定義約束來創(chuàng)建外鍵。以下語句在employees表的dept_id列上建立一個外鍵,該外鍵引用departments表的dept_id列。

CREATE TABLE employees (
    emp_id INT NOT NULL PRIMARY KEY,
    emp_name VARCHAR(55) NOT NULL,
    hire_date DATE NOT NULL,
    salary INT,
    dept_id INT,
    FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);

檢查約束(CHECK)

CHECK約束用于限制可以放置在列中的值。

例如,可以通過創(chuàng)建一個CHECK約束來限制薪水列的值范圍,該約束只允許值在3,000到10,000之間。這樣可以防止輸入超出正常工資范圍的工資。這是一個實例:

CREATE TABLE employees (
    emp_id INT NOT NULL PRIMARY KEY,
    emp_name VARCHAR(55) NOT NULL,
    hire_date DATE NOT NULL,
    salary INT NOT NULL CHECK (salary >= 3000 AND salary <= 10000),
    dept_id INT,
    FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);

注意: MySQL不支持SQL檢查約束。 雖然,MySQL的所有存儲引擎都會解析CHECK子句,但會將其忽略。