SQL高级特性(续)
创建
CREATE DATABASE
CREATE DATABASE 用于创建数据库。
SQL CREATE DATABASE 语法
CREATE DATABASE database_name
CREATE TABLE
CREATE TABLE 语句用于创建数据库中的表。
SQL CREATE TABLE 语法
CREATE TABLE 表名称
(
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,
….
)
SQL 约束
约束用于限制加入表的数据的类型。
NOT NULL
NOT NULL 约束强制列不接受 NULL 值。
NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。
下面的 SQL 语句强制 “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)
)
SQL Unique
UNIQUE 约束唯一标识数据库表中的每条记录。
UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。
PRIMARY KEY 拥有自动定义的 UNIQUE 约束。
在MySQL
CREATE TABLE Persons(
Id_P int NOT NULL,
UNIQUE (Id_P)
-
p.s.
- 当表已被创建时,如需在 “Id_P” 列创建 UNIQUE 约束(MySQL / SQL Server / Oracle / MS Access):
ALTER TABLE Persons ADD UNIQUE (Id_P) -
如需命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons ADD CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName) -
撤销 UNIQUE 约束
MySQL: ALTER TABLE Persons DROP INDEX uc_PersonID
PRIMARY KEY & FOREIGN KEY
PRIMARY KEY
约束唯一标识数据库表中的每条记录。
主键必须包含唯一的值。主键列不能包含 NULL 值。
每个表都应该有一个主键,并且每个表只能有一个主键。FOREIGN KEY
一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。
上一篇给出的例子
“Persons” 表中的 “Id_P” 列是 “Persons” 表中的 PRIMARY KEY。
“Orders” 表中的 “Id_P” 列是 “Orders” 表中的 FOREIGN KEY。
MySQL:
CREATE TABLE Orders
(
Id_O int NOT NULL,
PRIMARY KEY (Id_O),
FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
)
需要命名 FOREIGN KEY 约束,以及为多个列定义 FOREIGN KEY 约束
CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)
CHECK
CHECK 约束用于限制列中的值的范围。
如果对单个列定义 CHECK 约束,那么该列只允许特定的值。
如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。
CREATE TABLE Orders
(
CHECK (Id_P>0)
)
DEFAULT
DEFAULT 约束用于向列中插入默认值。
如果没有规定其他的值,那么会将默认值添加到所有的新记录。
CREATE TABLE Orders
(
City varchar(255) DEFAULT ‘Sandnes’
)
修改表
CREATE INDEX
CREATE INDEX 语句用于在表中创建索引。
在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。
- 索引
用户无法看到索引,它们只能被用来加速搜索/查询。
注释:更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。
SQL CREATE INDEX 语法
在表上创建一个简单的索引,允许使用重复的值:
CREATE INDEX index_name ON table_name (column_name)
p.s. “column_name” 规定需要索引的列。
SQL CREATE UNIQUE INDEX 语法
在表上创建一个唯一的索引。唯一的索引意味着两个行不能拥有相同的索引值。
CREATE UNIQUE INDEX index_name ON table_name (column_name)
e.g.1、以降序索引某个列中的值,您可以在列名称之后添加保留字 DESC:
CREATE INDEX PersonIndex ON Person (LastName DESC)
2、希望索引不止一个列,在括号中列出这些列的名称,用逗号隔开:
CREATE INDEX PersonIndex ON Person (LastName, FirstName)
DROP
DROP INDEX
DROP INDEX 命令删除表格中的索引ALTER TABLE table_name DROP INDEX index_name
不同的数据库会有所不同DROP TABLE
DROP TABLE 语句用于删除表(表的结构、属性以及索引也会被删除):DROP TABLE 表名称
DROP DATABASE
DROP DATABASE 语句用于删除数据库:DROP DATABASE 数据库名称
TRUNCATE TABLE
仅仅除去表内的数据,但并不删除表本身(仅仅删除表格中的数据):TRUNCATE TABLE 表名称
ALTER TABLE
ALTER TABLE 语句用于在已有的表中添加、修改或删除列。
SQL ALTER TABLE 语法
表中添加列: ALTER TABLE table_name ADD column_name datatype
删除表中的列: ALTER TABLE table_name DROP COLUMN column_name
p.s.某些数据库系统不允许这种在数据库表中删除列的方式 (DROP COLUMN column_name)。
- 改变数据类型 ALTER TABLE table_name ALTER COLUMN column_name datatype
AUTO INCREMENT
我们通常希望在每次插入新记录时,自动地创建主键字段的值。
我们可以在表中创建一个 auto-increment 字段。
用于 MySQL 的语法
下列 SQL 语句把 “Persons” 表中的 “P_Id” 列定义为 auto-increment 主键:
CREATE TABLE Persons
(
P_Id int NOT NULL AUTO_INCREMENT,
)