本篇介绍与SQL语句中有键表功能的Create Table语句。
基本语法
CREATE TABLE 表名称
(
列名称1 数据类型 约束条件,
列名称2 数据类型 约束条件,
列名称3 数据类型 约束条件,
....
)
其中约束条件可省略,代表无约束。下面介绍常用的数据类型和约束条件。
数据类型
常用的数据类型大致分为整型、小数、字符、日期等。
整型
整型有:
- integer(size)
- int(size)
- bigint(size)
- smallint(size)
tinyint(size)
int和integer并没有什么区别,其他类型之间存在表示范围的区别。一般来说使用int就足够了。size用来表示可显示出的位数。
小数
主要有两种:
- decimal(size,d)
numeric(size,d)
这两种一般没有区别,习惯使用decimal。size表示整体显示位数,d表示纯小数部分显示的位数。
字符
字符常用的也是两种:
- char(size)
varchar(size)
这两种之间就有区别了,char是指存放固定长度字符,varchar则是可变长度,例如声明100个字符的char,就算存放3个字符的数据,使用的依然是100个字符,而varchar则使用3+1个字符。总体来说,varchar使用较多,但是字符数量固定时推荐char,毕竟效率会高。
日期
常用日期就是date,格式一般为yyyymmdd,有的数据库会提供更详细的格式(包括时间和分钟)。多半与实际后台编程提供的日期格式相结合使用。
约束
约束主要有:
- NOT NULL
- UNIQUE
- PRIMARY KEY
- FOREIGN KEY
- CHECK
- DEFAULT
NOT NUL
字面意思就是不能为空,如果不添加值就会导致添加失败。使用时加在被限制的列后面。
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
UNIQUE
字面意思是独一无二的,就是说在一张表里这一列的任何数据不能出现两次,意味着添加重复的数据就会导致添加失败。可以如上所示,放在被限制的列后面也可以放在最下面。
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
UNIQUE (Id_P)
)
PRIMARY KEY
主键,每个表必须有且只能有一个主键。主键必须包含唯一的值且不能为空,这意味着主键本身自带NOT NULL和UNIQUE属性。使用PRIMARY KEY关键字像前两种使用方式即可。
FOREIGN KEY
外键,主要为参考所用,所参考的必须为其他表的主键。如下代码所示的Id_P列为参考Persons表的Id_P列。
CREATE TABLE Orders
(
Id_O int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
PRIMARY KEY (Id_O),
FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
)
CHECK
check为检查某列是否符合某种条件。例如检查Id_P列的数大于0。
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CHECK (Id_P>0)
)
同样check可以如上所示,加在列后面。
DEFAULT
DEFAULT用来为列设置默认值,例如City的默认值为Sandnes。
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT 'Sandnes'
)
举例
上面的例子很多,但基本都是对一列进行约束,我们可以使用CONSTRAINT对多列同时进行约束。
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')
)