一起来学SQL(三)

本文深入讲解了SQL的高级特性,包括数据库和表的创建、各种约束(如NOT NULL、UNIQUE、PRIMARY KEY、FOREIGN KEY)、CHECK约束、DEFAULT约束、索引的创建与删除等,以及如何使用ALTER TABLE进行表结构调整。

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,
)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值