一、CREATE DATABASE 语句
CREATE DATABASE
语句:用于创建数据库。
//SQL CREATE DATABASE 语法
CREATE DATABASE database_name
//现在我们希望创建一个名为 "my_db" 的数据库。我们使用下面的 CREATE DATABASE 语句:
CREATE DATABASE my_db
二、CREATE TABLE 语句
CREATE TABLE
语句:用于创建数据库中的表。
//SQL CREATE TABLE 语法
CREATE TABLE 表名称
(
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,
....
)
数据类型(data_type
)规定了列可容纳何种数据类型。下面的表格包含了SQL
中最常用的数据类型:
数据类型 | 描述 |
---|---|
integer(size)、int(size)、smallint(size)、tinyint(size) | 仅容纳整数。在括号内规定数字的最大位数。 |
decimal(size,d)、numeric(size,d) | 容纳带有小数的数字。“size” 规定数字的最大位数。“d” 规定小数点右侧的最大位数。 |
char(size) | 容纳固定长度的字符串(可容纳字母、数字以及特殊字符)。在括号中规定字符串的长度。 |
varchar(size) | 容纳可变长度的字符串(可容纳字母、数字以及特殊的字符)。在括号中规定字符串的最大长度。 |
date(yyyymmdd) | 容纳日期。 |
SQL CREATE TABLE 实例,本例演示如何创建名为 “Person” 的表。
该表包含 5 个列,列名分别是:“id”、“last_name”、“first_name”、“address” 以及 “city”:
CREATE TABLE Persons
(
id int,
last_name varchar(255),
first_name varchar(255),
address varchar(255),
city varchar(255)
)
id
列的数据类型是 int
,包含整数。其余 4 列的数据类型是 varchar
,最大长度为 255 个字符。空的 “Persons” 表类似这样:
id | last_name | first_name | address | city |
---|---|---|---|---|
三、约束 (Constraints)
约束:用于限制加入表的数据的类型。可以在创建表时规定约束(通过 CREATE TABLE
语句),或者在表创建之后也可以(通过 ALTER TABLE
语句)。
我们将主要探讨以下几种约束:
1、NOT NULL
NOT NULL
约束:强制列不接受 NULL
值。NOT NULL
约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。
//下面的 SQL 语句强制 "id" 列和 "last_name" 列不接受 NULL 值:
CREATE TABLE Persons
(
id int NOT NULL,
last_name varchar(255) NOT NULL,
first_name varchar(255),
address varchar(255),
city varchar(255)
)
2、UNIQUE
UNIQUE
约束:唯一标识数据库表中的每条记录。UNIQUE
和 PRIMARY KEY
约束均为列或列集合提供了唯一性的保证。PRIMARY KEY
拥有自动定义的 UNIQUE
约束。
请注意,每个表可以有多个 UNIQUE
约束,但是每个表只能有一个 PRIMARY KEY
约束。
下面的 SQL
在 “Persons” 表创建时在 “id” 列创建 UNIQUE
约束:
MySQL:
CREATE TABLE Persons
(
id int NOT NULL,
last_name varchar(255) NOT NULL,
first_name varchar(255),
address varchar(255),
city varchar(255)
UNIQUE (id)
)
SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
id int NOT NULL UNIQUE,
last_name varchar(255) NOT NULL,
first_name varchar(255),
address varchar(255),
city varchar(255)
)
如果需要命名 UNIQUE 约束,以及为多个列定义 UNIQUE 约束,请使用下面的 SQL 语法:
MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
id int NOT NULL,
last_name varchar(255) NOT NULL,
first_name varchar(255),
address varchar(255),
city varchar(255)
CONSTRAINT uc_PersonID UNIQUE (id,last_name)
)
SQL UNIQUE Constraint on ALTER TABLE
当表已被创建时,如需在 “id” 列创建 UNIQUE
约束,请使用下列 SQL:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD UNIQUE (id)
如需命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束,请使用下面的 SQL 语法:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD CONSTRAINT uc_PersonID UNIQUE (id,last_name)
撤销 UNIQUE 约束
如需撤销 UNIQUE 约束,请使用下面的 SQL:
MySQL:
ALTER TABLE Persons
DROP INDEX uc_PersonID
SQL Server / Oracle / MS Access:
ALTER TABLE Persons
DROP CONSTRAINT uc_PersonID
3、PRIMARY KEY
PRIMARY KEY 约束:唯一标识数据库表中的每条记录,主键必须包含唯一的值,主键列不能包含 NULL
值,每个表都应该有一个主键,并且每个表只能有一个主键。
MySQL:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (Id_P)
)
SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
Id_P int NOT NULL PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
如果需要命名 PRIMARY KEY 约束,以及为多个列定义 PRIMARY KEY 约束,请使用下面的 SQL 语法:
MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName)
)
如果在表已存在的情况下为 “Id_P” 列创建 PRIMARY KEY
约束,请使用下面的 SQL:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD PRIMARY KEY (Id_P)
如果需要命名 PRIMARY KEY 约束,以及为多个列定义 PRIMARY KEY 约束,请使用下面的 SQL 语法:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName)
注释:如果您使用 ALTER TABLE
语句添加主键,必须把主键列声明为不包含 NULL
值(在表首次创建时)。
如需撤销 PRIMARY KEY
约束,请使用下面的 SQL:
MySQL:
ALTER TABLE Persons
DROP PRIMARY KEY
SQL Server / Oracle / MS Access:
ALTER TABLE Persons
DROP CONSTRAINT pk_PersonID
4、FOREIGN KEY
FOREIGN KEY
约束:一个表中的 FOREIGN KEY
指向另一个表中的 PRIMARY KEY
。
例如:“Orders” 中的 “Id_P” 列指向 “Persons” 表中的 “Id_P” 列。“Persons” 表中的 “Id_P” 列是 “Persons” 表中的 PRIMARY KEY。“Orders” 表中的 “Id_P” 列是 “Orders” 表中的 FOREIGN KEY。
FOREIGN KEY 约束用于预防破坏表之间连接的动作。
FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。
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)
)
如果在 “Orders” 表已存在的情况下为 “Id_P” 列创建 FOREIGN KEY 约束,请使用下面的 SQL:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders
ADD FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)
如果需要命名 FOREIGN KEY 约束,以及为多个列定义 FOREIGN KEY 约束,请使用下面的 SQL 语法:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)
如需撤销 FOREIGN KEY 约束,请使用下面的 SQL:
MySQL:
ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders
SQL Server / Oracle / MS Access:
ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders
5、CHECK
CHECK
:约束用于限制列中的值的范围。如果对单个列定义 CHECK 约束,那么该列只允许特定的值。如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。
下面的 SQL 在 “Persons” 表创建时为 “Id_P” 列创建 CHECK 约束。CHECK 约束规定 “Id_P” 列必须只包含大于 0 的整数。
My SQL:
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
约束,以及为多个列定义 CHECK
约束,请使用下面的 SQL 语法:
MySQL / SQL Server / Oracle / MS Access:
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')
)
如果在表已存在的情况下为 “Id_P” 列创建 CHECK 约束,请使用下面的 SQL:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD CHECK (Id_P>0)
如果需要命名 CHECK 约束,以及为多个列定义 CHECK 约束,请使用下面的 SQL 语法:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')
如需撤销 CHECK 约束,请使用下面的 SQL:
SQL Server / Oracle / MS Access:
ALTER TABLE Persons
DROP CONSTRAINT chk_Person
MySQL:
ALTER TABLE Persons
DROP CHECK chk_Person
6、DEFAULT
DEFAULT
约束:用于向列中插入默认值。如果没有规定其他的值,那么会将默认值添加到所有的新记录。
下面的 SQL 在 “Persons” 表创建时为 “City” 列创建 DEFAULT 约束:
My SQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT 'Sandnes'
)
通过使用类似 GETDATE() 这样的函数,DEFAULT 约束也可以用于插入系统值:
CREATE TABLE Orders
(
Id_O int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
OrderDate date DEFAULT GETDATE()
)
如果在表已存在的情况下为 “City” 列创建 DEFAULT 约束,请使用下面的 SQL:
MySQL:
ALTER TABLE Persons
ALTER City SET DEFAULT 'SANDNES'
SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ALTER COLUMN City SET DEFAULT 'SANDNES'
如需撤销 DEFAULT 约束,请使用下面的 SQL:
MySQL:
ALTER TABLE Persons
ALTER City DROP DEFAULT
SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ALTER COLUMN City DROP DEFAULT
四、ALTER TABLE 语句
ALTER TABLE
语句:用于在已有的表中添加、修改或删除列。
如需在表中添加列,请使用下列语法:
ALTER TABLE table_name
ADD column_name datatype
要删除表中的列,请使用下列语法:
ALTER TABLE table_name
DROP COLUMN column_name
注释:某些数据库系统不允许这种在数据库表中删除列的方式 (DROP COLUMN
column_name)。
要改变表中列的数据类型,请使用下列语法:
ALTER TABLE table_name
ALTER COLUMN column_name datatype
现在,我们希望在表 “Persons” 中添加一个名为 “Birthday” 的新列。
我们使用下列 SQL 语句:
ALTER TABLE Persons
ADD Birthday date
注意:新列 “Birthday” 的类型是 date,可以存放日期。数据类型规定列中可以存放的数据的类型。
五、AUTO INCREMENT 字段
Auto-increment
会在新记录插入表中时生成一个唯一的数字。
AUTO INCREMENT
字段:我们通常希望在每次插入新记录时,自动地创建主键字段的值。我们可以在表中创建一个 auto-increment 字段。
下列 SQL 语句把 “Persons” 表中的 “P_Id” 列定义为 auto-increment 主键:
CREATE TABLE Persons
(
P_Id int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (P_Id)
)
MySQL 使用 AUTO_INCREMENT
关键字来执行 auto-increment 任务。默认地,AUTO_INCREMENT
的开始值是 1,每条新记录递增 1。要让 AUTO_INCREMENT
序列以其他的值起始,请使用下列 SQL 语法:
ALTER TABLE Persons AUTO_INCREMENT=100
七、AFTER
AFTER :在哪一列后面添加字段。
在Persons中City列之后添加Birthday列:
ALTER TABLE Persons
ADD Birthday date AFTER City
参考:W3CSchool SQL学习