为什么要有constraints 约束?-给输入的数据设定规则。
基本的语句结构:
CREATE TABLE table_name(
column1 datatype constraint,
column2 datatype constraint,
column3 datatype constraint,
....
);
约束用于限制输入表格的数据类型。用来确保表格中数据的准确性和可靠性。
如果约束的条件与数据操作之间存在任何冲突,该操作将会中止。
约束可以是列级别或表级别。
列级约束适用于列,而表级约束适用于整个表。
SQL中通常使用以下约束:
NOT NULL-确保列不能具有空值 UNIQUE-确保列中的所有值都不相同
PRIMARYKEY-NOT NULL和UNIQUE的组合。唯一标识表中的每一行
FOREIGNKEY-唯一标识另一个表中的行/记录
CHECK-确保列中的所有值都满足特定条件
DEFAULT-在未指定任何值的情况下为列设置一个默认值
INDEX-用于非常快速地从数据库创建和检索数据
分别举例:
CREATE TABLE table_1 ( 创建了一个新表
ID int NOT NULL, ID这一列不为空
Last Name varchar(255) NOT NULL, Last Name 这一列不为空
First Name varchar(255) NOT NULL, First Name 这一列不为空
Age int Age 为整数
);
修改已有的表格,列不为空
ALTER TABLE Persons 修改名为persons的表格
MODIFY Age int NOT NULL; 修改年龄不为空
确保单列中值都不同
CREATE TABLE Persons (
ID int NOT NULL,
Last Name varchar(255) NOT NULL,
First Name varchar(255),
Age int,
UNIQUE(ID) ID 列中值都不同
);
确保多列中值不相同
CREATE TABLE Persons (
ID int NOT NULL,
Last Name varchar(255) NOT NULL,
First Name varchar(255),
Age int,
CONSTRAINT UC_Person UNIQUE(ID,LastName)
);
修改表中的单列的值不相同
ALTER TABLE Persons
ADD UNIQUE(ID);
修改表中的多列的值不相同
ALTER TABLE Persons
ADD CONSTRAINT UC_Person UNIQUE (ID,LastName);
去掉Unique约束
ALTER TABLE Persons
DROP INDEX UC_Person;
check 单列的条件是否符合
CREATE TABLE Persons (
ID int NOT NULL,
Last Name varchar(255) NOT NULL,
First Name varchar(255),
Age int,
CHECK(Age>=18)
);
check 多列的条件是否符合
CREATE TABLE Persons (
ID int NOT NULL,
Last Name varchar(255) NOT NULL,
First Name varchar(255),
Age int,
City varchar(255),
CONSTRAINT CHK_Person CHECK (Age>=18 AND City='Sandnes')
);
check 已存在表的单列条件
ALTER TABLE Persons
ADD CHECK (Age>=18);
check已存在表的多列条件
ALTER TABLE Persons
ADD CONSTRAINT CHK_Person Age CHECK (Age>=18 AND City='Sandnes');
去掉check约束
ALTER TABLE Persons
DROP CHECK CHK_PersonAge;
默认值约束:会提供给输入的数据一个默认值
给特定列一个默认值
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
City varchar(255) DEFAULT 'Sandnes'
);
也可以输入系统数据,例如输入系统时间用getdate()
CREATE TABLE Orders (
ID int NOT NULL,
OrderNumber int NOT NULL,
OrderDate date DEFAULT GETDATE()
);
修改已存在表中的默认值:
ALTER TABLE Persons
ALTER City SET DEFAULT 'Sandnes';
去掉默认值
ALTER TABLE Persons
ALTER City DROP DEFAULT;
Index用于快速从数据库中提取数据.
基本语句:
CREATE INDEX index_name
ON table_name (column1, column2, ...);
建立Unique Index 语句:
CREATE UNIQUE INDEX index_name
ON table_name (column1, column2, ...);
不同数据库建立index的语句不通。一定要仔细看好数据库的语句结构。
CREATE INDEX 建立index指令
The SQL statement below creates an index named "idx_lastname" on the "LastName" column in the "Persons" table:
CREATE INDEX idx_lastname 建立idx_lastname 关于Persons 表格的lastname列
ON Persons (LastName);
CREATE INDEX idx_pname 建立idx_lastname 关于Persons 表格的lastname和firstname列
ON Persons (LastName, FirstName);
DROP INDEX Statement 去除index指令
ALTER TABLE table_name
DROP INDEX index_name;