自学W3School
http://www.w3school.com.cn/sql/index.asp

索引和约束

索引是什么?

相当于隐形的目录,以此计算机能更加快速高效地查询数据。

注释:更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。

如何创建索引?

CREATE {UNIQUE} INDEX Index_Name ON Table_Name(Column_Name) {DESC}

注释:在表上创建一个唯一的索引(添加UINIQUE关键字)。唯一的索引意味着两个行不能拥有相同的索引值。

注释:以降序索引某个列中的值,您可以在列名称之后添加保留字 DESC

注释:若希望索引不止一个列,您可以在括号中列出这些列的名称,用逗号隔开

CREATE INDEX Index_Name ON Table_Name(Column1_Name,Column2_Name,...)

约束是什么?

约束用于限制加入表的数据的类型。

可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句)。

我们将主要探讨以下几种约束:

  • NOT NULL
  • UNIQUE
  • PRIMARY KEY
  • FOREIGN KEY
  • CHECK
  • DEFAULT

NOT NULL

NOT NULL 约束强制列不接受 NULL 值。示例如下:

CREATE TABLE Table_Eg{

Id INT NOT NULL,

Eg CHAR(20)

}

ALTER TABLE Table_Eg

ADD COLUMN Name NVARCHAR(200) NOT NULL

CHECK

CHECK 约束用于限制列中的值的范围。可对单一列设CHECK,示例如下:

CREATE TABLE Table_Eg{

Id INT NOT NULL CHECK(Id>0),

Eg CHAR(20)

}

ALTER TABLE Table_Eg

ADD CHECK(Id>0)

也可对整张表的多个列CHECK:

CREATE TABLE Table_Eg{

Id INT,

Price INT,

COSNTRAINT chk_Table_Eg CHECK(Id>0 AND Price>=0)

}

DEFAULT

DEFAULT 约束用于向列中插入默认值。 如果没有规定其他的值,那么会将默认值添加到所有的新记录。示例如下:

CREATE TABLE Table_Eg{

Id INT,

Price INT DEFAULT 0

}

ALTER Table_Eg

ADD DEFAULT 0 FOR Price

UNIQUE

UNIQUE 为列或列集合提供了唯一性的保证,每张表可以有多个 UNIQUE。示例如下:

CREATE TABLE Table_Eg{

Id INT UNIQUE,

Price INT DEFAULT 0

}

多个UNIQUE:

CREATE TABLE Table_Eg{

Id INT,

Eg CHAR(20),

COSNTRAINT uc_Table_Eg UNIQUE(Id,Eg)

}

下篇重点讲主键和外键Primary Key & Foreign Key