目录
一、SQL CREATE DATABASE 语句
1.CREATE DATABASE 语句
2.SQL CREATE DATABASE 语法
3.SQL CREATE DATABASE 实例
二、SQL CREATE TABLE 语句
1.CREATE TABLE 语句
2.SQL CREATE TABLE 语法
3.SQL中最常用的数据类型
4.SQL CREATE TABLE 实例
三、SQL 约束 (Constraints)
四、SQL NOT NULL 约束
五、SQL UNIQUE 约束
1.在 "Persons" 表创建时,在 "Id_P" 列创建 UNIQUE 约束
2.命名 UNIQUE 约束,以及为多个列定义 UNIQUE 约束
3.当表已被创建时,在 "Id_P" 列创建 UNIQUE 约束
4.命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束
5.撤销 UNIQUE 约束
六、SQL PRIMARY KEY 约束
1.SQL PRIMARY KEY 约束
2.在 "Persons" 表创建时,在 "Id_P" 列创建 PRIMARY KEY 约束
3.命名 PRIMARY KEY 约束,以及为多个列定义 PRIMARY KEY 约束
4.在表已存在的情况下为 "Id_P" 列创建 PRIMARY KEY 约束
5.命名 PRIMARY KEY 约束,以及为多个列定义 PRIMARY KEY 约束
6.撤销 PRIMARY KEY 约束
七、SQL FOREIGN KEY 约束
1.SQL FOREIGN KEY 约束
2.在 "Orders" 表创建时为 "Id_P" 列创建 FOREIGN KEY
3.命名 FOREIGN KEY 约束,以及为多个列定义 FOREIGN KEY 约束
4.在 "Orders" 表已存在的情况下为 "Id_P" 列创建 FOREIGN KEY 约束
5.命名 FOREIGN KEY 约束,以及为多个列定义 FOREIGN KEY 约束
6.撤销 FOREIGN KEY 约束
八、SQL CHECK 约束
1.SQL CHECK 约束
2.在 "Persons" 表创建时为 "Id_P" 列创建 CHECK 约束
3.命名 CHECK 约束,以及为多个列定义 CHECK 约束
4.在表已存在的情况下为 "Id_P" 列创建 CHECK 约束
5.命名 CHECK 约束,以及为多个列定义 CHECK 约束
6.撤销 CHECK 约束
九、SQL DEFAULT 约束
1.SQL DEFAULT 约束
2.在 "Persons" 表创建时为 "City" 列创建 DEFAULT 约束
3.通过使用类似 GETDATE() 这样的函数,DEFAULT 约束也可以用于插入系统值
4.在表已存在的情况下为 "City" 列创建 DEFAULT 约束
5.撤销 DEFAULT 约束
CREATE DATABASE 用于创建数据库。
CREATE DATABASE database_name
创建一个名为 "my_db" 的数据库,使用的 CREATE DATABASE 语句:
CREATE DATABASE my_db
CREATE TABLE 语句用于创建数据库中的表。
CREATE TABLE 表名称
(
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,
....
)
数据类型 |
描述 |
integer(size) int(size) smallint(size) tinyint(size) |
仅容纳整数。在括号内规定数字的最大位数。 |
decimal(size,d) numeric(size,d) |
容纳带有小数的数字。"size" 规定数字的最大位数。"d" 规定小数点右侧的最大位数。 |
char(size) |
容纳固定长度的字符串(可容纳字母、数字以及特殊字符)。在括号中规定字符串的长度。 |
varchar(size) |
容纳可变长度的字符串(可容纳字母、数字以及特殊的字符)。在括号中规定字符串的最大长度。 |
date(yyyymmdd) |
容纳日期。 |
创建名为 "Person" 的表,该表包含 5 个列。
列名分别是:"Id_P"、"LastName"、"FirstName"、"Address" 以及 "City"。
CREATE TABLE Persons
(
Id_P int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
解析:Id_P 列的数据类型是 int,包含整数。其余 4 列的数据类型是 varchar,最大长度为 255 个字符。
空的 "Persons" 表类似这样:
Id_P |
LastName |
FirstName |
Address |
City |
可使用 INSERT INTO 语句向空表写入数据。
约束用于限制加入表的数据的类型。可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句)。
NOT NULL 约束强制列不接受 NULL 值、强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。
强制 "Id_P" 列和 "LastName" 列不接受 NULL 值:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
UNIQUE 约束唯一标识数据库表中的每条记录。
UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。
PRIMARY KEY 拥有自动定义的 UNIQUE 约束。
每个表可以有多个 UNIQUE 约束,但是只能有一个 PRIMARY KEY 约束。
①MySQL:
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)
)
②SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
Id_P int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
)
ALTER TABLE Persons
ADD UNIQUE (Id_P)
ALTER TABLE Persons
ADD CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
①MySQL:
ALTER TABLE Persons
DROP INDEX uc_PersonID
②SQL Server / Oracle / MS Access:
ALTER TABLE Persons
DROP CONSTRAINT uc_PersonID
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)
)
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)
)
ALTER TABLE Persons
ADD PRIMARY KEY (Id_P)
ALTER TABLE Persons
ADD CONSTRAINT pk_PersonID PRIMARY KEY (Id_P,LastName)
注:在表首次创建时使用 ALTER TABLE 语句添加主键,必须把主键列声明为不包含 NULL 值。
①MySQL:
ALTER TABLE Persons
DROP PRIMARY KEY
②SQL Server / Oracle / MS Access:
ALTER TABLE Persons
DROP CONSTRAINT pk_PersonID
一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。
"Persons" 表:
Id_P |
LastName |
FirstName |
Address |
City |
001 |
Aam |
Joh |
Oxd Street |
London |
002 |
Buh |
Grge |
Fifth Aue |
New York |
003 |
Car |
Tmas |
Can Street |
Beijing |
"Orders" 表:
Id_O |
OrderNo |
Id_P |
1 |
77895 |
003 |
2 |
44678 |
003 |
3 |
22456 |
001 |
4 |
24562 |
001 |
"Orders" 中的 "Id_P" 列指向 "Persons" 表中的 "Id_P" 列。
"Persons" 表中的 "Id_P" 列是 "Persons" 表中的 PRIMARY KEY。
"Orders" 表中的 "Id_P" 列是 "Orders" 表中的 FOREIGN KEY。
FOREIGN KEY 约束用于预防破坏表之间连接的动作,也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。
①MySQL:
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)
)
②SQL Server / Oracle / MS Access:
CREATE TABLE Orders
(
Id_O int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
Id_P int FOREIGN KEY REFERENCES Persons(Id_P)
)
CREATE TABLE Orders
(
Id_O int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
PRIMARY KEY (Id_O),
CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)
)
ALTER TABLE Orders
ADD FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)
ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)
①MySQL:
ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders
②SQL Server / Oracle / MS Access:
ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders
CHECK 约束用于限制列中的值的范围。
如果对单个列定义 CHECK 约束,那么该列只允许特定的值。
如果对一个表定义 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)
)
②SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
Id_P int NOT NULL CHECK (Id_P>0),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
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')
)
ALTER TABLE Persons
ADD CHECK (Id_P>0)
ALTER TABLE Persons
ADD CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')
①MySQL:
ALTER TABLE Persons
DROP CHECK chk_Person
②SQL Server / Oracle / MS Access:
ALTER TABLE Persons
DROP CONSTRAINT chk_Person
DEFAULT 约束用于向列中插入默认值。
如果没有规定其他的值,那么会将默认值添加到所有的新记录。
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT 'Sandnes'
)
CREATE TABLE Orders
(
Id_O int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
OrderDate date DEFAULT GETDATE()
)
①MySQL:
ALTER TABLE Persons
ALTER City SET DEFAULT 'SANDNES'
②SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ALTER COLUMN City SET DEFAULT 'SANDNES'
①MySQL:
ALTER TABLE Persons
ALTER City DROP DEFAULT
②SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ALTER COLUMN City DROP DEFAULT