SQL 系列教程(五)

目录

[SQL CREATE DATABASE 语句](#SQL CREATE DATABASE 语句)

[SQL CREATE DATABASE 语句](#SQL CREATE DATABASE 语句)

[CREATE DATABASE 实例](#CREATE DATABASE 实例)

[SQL DROP DATABASE 语句](#SQL DROP DATABASE 语句)

[SQL DROP DATABASE 语句](#SQL DROP DATABASE 语句)

[DROP DATABASE 实例](#DROP DATABASE 实例)

[SQL Server 的 SQL 数据库备份](#SQL Server 的 SQL 数据库备份)

[SQL 完整备份](#SQL 完整备份)

[SQL 差异备份](#SQL 差异备份)

完整备份实例

差异备份实例

[SQL CREATE TABLE 语句](#SQL CREATE TABLE 语句)

[SQL CREATE TABLE 语句](#SQL CREATE TABLE 语句)

[CREATE TABLE 实例](#CREATE TABLE 实例)

使用另一个表创建表

[SQL DROP TABLE 语句](#SQL DROP TABLE 语句)

[SQL DROP TABLE 语句](#SQL DROP TABLE 语句)

[DROP TABLE 实例](#DROP TABLE 实例)

[TRUNCATE TABLE 语句](#TRUNCATE TABLE 语句)

[SQL ALTER TABLE 语句](#SQL ALTER TABLE 语句)

[SQL ALTER TABLE 语句](#SQL ALTER TABLE 语句)

[ALTER TABLE - 添加列](#ALTER TABLE - 添加列)

[ALTER TABLE - 删除列](#ALTER TABLE - 删除列)

[ALTER TABLE - 修改列](#ALTER TABLE - 修改列)

[SQL ALTER TABLE 实例](#SQL ALTER TABLE 实例)

[更新 数据类型 实例](#更新 数据类型 实例)

删除实例

[SQL 约束 (Constraints)](#SQL 约束 (Constraints))

[SQL 创建约束](#SQL 创建约束)

[SQL 约束](#SQL 约束)

[SQL NOT NULL 约束](#SQL NOT NULL 约束)

[SQL NOT NULL 约束](#SQL NOT NULL 约束)

创建表时不为空

修改表时不为空

[SQL UNIQUE 约束](#SQL UNIQUE 约束)

[SQL UNIQUE 约束](#SQL UNIQUE 约束)

[创建表时的 UNIQUE 约束](#创建表时的 UNIQUE 约束)

[修改表时的 UNIQUE 约束](#修改表时的 UNIQUE 约束)

[撤销 UNIQUE 约束](#撤销 UNIQUE 约束)

[SQL PRIMARY KEY 约束](#SQL PRIMARY KEY 约束)

[SQL PRIMARY KEY 约束](#SQL PRIMARY KEY 约束)

[创建表时的 PRIMARY KEY 约束](#创建表时的 PRIMARY KEY 约束)

[修改表时的 PRIMARY KEY 约束](#修改表时的 PRIMARY KEY 约束)

[撤销 PRIMARY KEY 约束](#撤销 PRIMARY KEY 约束)


SQL CREATE DATABASE 语句

SQL CREATE DATABASE 语句

CREATE DATABASE 语句用于创建新的SQL数据库。

【语法】

sql 复制代码
CREATE DATABASE databasename;

CREATE DATABASE 实例

以下SQL语句创建一个名为 "testDB" 的数据库:

【实例】

sql 复制代码
CREATE DATABASE testDB;

注: 在创建任何数据库之前,请确保您具有管理员权限。创建数据库后,可以使用以下SQL命令在数据库列表中检查它: SHOW DATABASES;

SQL DROP DATABASE 语句

SQL DROP DATABASE 语句

DROP DATABASE 语句用于删除现有SQL数据库。

【语法】

sql 复制代码
DROP DATABASE databasename;

注: 删除数据库之前要小心。删除数据库将导致数据库中存储的完整信息丢失!

DROP DATABASE 实例

以下SQL语句删除现有数据库 "testDB":

【实例】

sql 复制代码
DROP DATABASE testDB;

SQL Server 的 SQL 数据库备份

SQL 完整备份

BACKUP DATABASE 语句在SQL Server中用于创建现有SQL数据库的完整备份。

【语法】

sql 复制代码
BACKUP DATABASE databasename
TO DISK = 'filepath';

SQL 差异备份

差异备份仅备份自上次完整数据库备份以来已更改的数据库部分。

【语法】

sql 复制代码
BACKUP DATABASE databasename
TO DISK = 'filepath'
WITH DIFFERENTIAL;

完整备份实例

以下SQL语句将现有数据库 "testDB" 的完整备份创建到 D 盘:

【实例】

sql 复制代码
BACKUP DATABASE testDB
TO DISK = 'D:\backups\testDB.bak';

注: 始终要将数据库备份到与实际数据库不同的驱动器。如果发生磁盘崩溃,则不会丢失全部备份文件和数据库。

差异备份实例

以下SQL语句创建数据库 "testDB" 的差异备份:

【实例】

sql 复制代码
BACKUP DATABASE testDB
TO DISK = 'D:\backups\testDB.bak'
WITH DIFFERENTIAL;

注: 差异备份缩短了备份时间(因为只备份更改)。

SQL CREATE TABLE 语句

SQL CREATE TABLE 语句

CREATE TABLE 语句用于在数据库中创建新表。

【语法】

sql 复制代码
CREATE TABLE table_name (
    column1 datatype,
    column2 datatype,
    column3 datatype,
   ....
);

column1 参数指定表中列的名称。

datatype 参数指定列可以保存的数据类型(例如varchar、integer、date等)。

CREATE TABLE 实例

以下示例创建了一个名为"Persons"的表,该表包含五列:PersonID、LastName、FirstName、Address 和 City:

【实例】

sql 复制代码
CREATE TABLE Persons (
    PersonID int,
    LastName varchar(255),
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255)
);

PersonID 列的类型为 int,将包含一个整数。

LastName、FirstName、Address和City列的类型为 varchar,将包含字符,这些字段的最大长度为255个字符。

空的 "Persons" 表类似这样:

PersonID LastName FirstName Address City

注: 可使用 INSERT INTO 语句向空表写入数据。

使用另一个表创建表

还可以使用 CREATE TABLE 创建现有表的副本。

新表获得相同的列定义。可以选择所有列或特定列。

如果使用现有表创建新表,则新表将使用旧表中的现有值填充。

【语法】

sql 复制代码
CREATE TABLE new_table_name AS
    SELECT column1, column2,...
    FROM existing_table_name
    WHERE ....;

下面的SQL创建了一个名为"TestTables"的新表(它是"Customers"表的副本):

【实例】

sql 复制代码
CREATE TABLE TestTable AS
SELECT customername, contactname
FROM customers;

SQL DROP TABLE 语句

SQL DROP TABLE 语句

DROP TABLE 语句用于删除数据库中的现有表。

【语法】

sql 复制代码
DROP TABLE table_name;

注: 删除表前要小心。删除表将导致表中存储的完整信息丢失!

DROP TABLE 实例

以下SQL语句删除现有表"Shippers":

【实例】

sql 复制代码
DROP TABLE Shippers;

TRUNCATE TABLE 语句

TRUNCATE TABLE 语句用于清空表中的数据,但不删除表本身。

【语法】

sql 复制代码
TRUNCATE TABLE table_name;

SQL ALTER TABLE 语句

SQL ALTER TABLE 语句

ALTER TABLE 语句用于添加、删除或修改现有表中的列。

ALTER TABLE 语句还用于添加和删除现有表上的各种约束。

ALTER TABLE - 添加列

要在表中添加列,请使用以下语法:

sql 复制代码
ALTER TABLE table_name
ADD column_name datatype;

以下SQL将"Email"列添加到"Customers"表中:

【实例】

sql 复制代码
ALTER TABLE Customers
ADD Email varchar(255);

ALTER TABLE - 删除列

要删除表中的列,请使用以下语法(请注意,某些数据库系统不允许删除列):

sql 复制代码
ALTER TABLE table_name
DROP COLUMN column_name;

以下SQL从"Customers" 表中删除 "Email" 列:

【实例】

sql 复制代码
ALTER TABLE Customers
DROP COLUMN Email;

ALTER TABLE - 修改列

要更改表中列的数据类型,请使用以下语法:

【SQL Server / MS Access】

sql 复制代码
ALTER TABLE table_name
ALTER COLUMN column_name datatype;

【My SQL / Oracle (prior version 10G)】

sql 复制代码
ALTER TABLE table_name
MODIFY COLUMN column_name datatype;

【Oracle 10G and later】

sql 复制代码
ALTER TABLE table_name
MODIFY column_name datatype;

SQL ALTER TABLE 实例

请看 "Persons" 表:

ID LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger

现在我们想在"Persons"表中添加一个名为"DateOfBirth"的列。

我们使用以下SQL语句:

sql 复制代码
ALTER TABLE Persons
ADD DateOfBirth date;

注:请注意,新列"DateOfBirth"的类型为date,将保存一个日期。数据类型指定列可以保存的数据类型。

现在,"Persons" 表将如下所示:

ID LastName FirstName Address City DateOfBirth
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger

更新 数据类型 实例

现在我们要更改"Persons"表中名为"DateOfBirth"的列的数据类型。

我们使用以下SQL语句:

sql 复制代码
ALTER TABLE Persons
ALTER COLUMN DateOfBirth year;

注:请注意,"DateOfBirth" 列现在是 year 类型,将以两位数或四位数的格式保存一年。

删除实例

接下来,我们要删除"Persons"表中名为"DateOfBirth"的列。

我们使用以下SQL语句:

sql 复制代码
ALTER TABLE Persons
DROP COLUMN DateOfBirth;

现在,"Persons" 表将如下所示:

ID LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger

SQL 约束 (Constraints)

SQL 约束用于为表中的数据指定规则。

SQL 创建约束

可以在使用 CREATE TABLE 语句创建表时或在使用 ALTER TABLE 语句创建表之后指定约束。

【语法】

sql 复制代码
CREATE TABLE table_name (
    column1 datatype constraint,
    column2 datatype constraint,
    column3 datatype constraint,
    ....
);

SQL 约束

SQL 约束用于为表中的数据指定规则。

约束用于限制可以进入表中的数据类型。这确保了表中数据的准确性和可靠性。如果约束和数据操作之间存在任何冲突,则操作将中止。

约束可以是列级或表级。列级约束应用于列,表级约束应用于整个表。

SQL 中通常使用以下约束:

NOT NULL - 指示某列不能存储 NULL 值。

UNIQUE - 保证某列的每行必须有唯一的值。

PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。

FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。

CHECK - 保证列中的值符合指定的条件。

DEFAULT - 规定没有给列赋值时的默认值。

INDEX - 索引用于非常快速地从数据库中创建和检索数据。

SQL NOT NULL 约束

SQL NOT NULL 约束

默认情况下,列可以包含 NULL 空值。

NOT NULL 约束强制列不接受 NULL 值。

NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。

创建表时不为空

以下SQL确保在创建"Persons"表时,"ID"、"LastName"和"FirstName"列不接受空值:

【实例】

sql 复制代码
CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255) NOT NULL,
    Age int
);

修改表时不为空

要在已创建"Persons"表的"Age"列上创建 NOT NULL 约束,请使用以下 SQL:

sql 复制代码
ALTER TABLE Persons
MODIFY Age int NOT NULL;

SQL UNIQUE 约束

SQL UNIQUE 约束

UNIQUE 约束唯一标识数据库表中的每条记录。

UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。

PRIMARY KEY 拥有自动定义的 UNIQUE 约束。

请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。

创建表时的 UNIQUE 约束

以下 SQL 在创建"Persons"表时,在"ID"列上创建唯一约束:

【SQL Server / Oracle / MS Access】

sql 复制代码
CREATE TABLE Persons (
    ID int NOT NULL UNIQUE,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int
);

【MySQL】

sql 复制代码
CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    UNIQUE (ID)
);

要命名唯一约束,并在多个列上定义唯一约束,请使用以下SQL语法:

【MySQL / SQL Server / Oracle / MS Access】

sql 复制代码
CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    CONSTRAINT UC_Person UNIQUE (ID,LastName)
);

修改表时的 UNIQUE 约束

要在已创建表的 "ID" 列上创建唯一约束,请使用以下 SQL:

【MySQL / SQL Server / Oracle / MS Access】

sql 复制代码
ALTER TABLE Persons
ADD UNIQUE (ID);

要命名唯一约束,并在多个列上定义唯一约束,请使用以下SQL语法:

【MySQL / SQL Server / Oracle / MS Access】

sql 复制代码
ALTER TABLE Persons
ADD CONSTRAINT UC_Person UNIQUE (ID,LastName);

撤销 UNIQUE 约束

如需撤销 UNIQUE 约束,请使用下面的 SQL:

【MySQL】

sql 复制代码
ALTER TABLE Persons
DROP INDEX UC_Person;

【SQL Server / Oracle / MS Access】

sql 复制代码
ALTER TABLE Persons
DROP CONSTRAINT UC_Person;

SQL PRIMARY KEY 约束

SQL PRIMARY KEY 约束

PRIMARY KEY 约束唯一标识数据库表中的每条记录。

主键必须包含唯一的值。主键列不能包含 NULL 值。

每个表都应该有一个主键,并且每个表只能有一个主键。

创建表时的 PRIMARY KEY 约束

下面的 SQL 在 "Persons" 表创建时在 "ID" 列创建 PRIMARY KEY 约束:

【MySQL】

sql 复制代码
CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    PRIMARY KEY (ID)
);

【SQL Server / Oracle / MS Access】

sql 复制代码
CREATE TABLE Persons (
    ID int NOT NULL PRIMARY KEY,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int
);

如果需要命名 PRIMARY KEY 约束,以及为多个列定义 PRIMARY KEY 约束,请使用下面的 SQL 语法:

【MySQL / SQL Server / Oracle / MS Access】

sql 复制代码
CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    CONSTRAINT PK_Person PRIMARY KEY (ID,LastName)
);

注: 在上面的示例中,只有一个主键(PK_Person)。但是,主键的值由两列组成(ID+LastName)。

修改表时的 PRIMARY KEY 约束

如果在表已存在的情况下为 "ID" 列创建 PRIMARY KEY 约束,请使用下面的 SQL:

【MySQL / SQL Server / Oracle / MS Access】

sql 复制代码
ALTER TABLE Persons
ADD PRIMARY KEY (ID);

如果需要命名 PRIMARY KEY 约束,以及为多个列定义 PRIMARY KEY 约束,请使用下面的 SQL 语法:

【MySQL / SQL Server / Oracle / MS Access】

sql 复制代码
ALTER TABLE Persons
ADD CONSTRAINT PK_Person PRIMARY KEY (ID,LastName);

注: 如果您使用 ALTER TABLE 语句添加主键,必须把主键列声明为不包含 NULL 值(在表首次创建时)。

撤销 PRIMARY KEY 约束

如需撤销 PRIMARY KEY 约束,请使用下面的 SQL:

【MySQL】

sql 复制代码
ALTER TABLE Persons
DROP PRIMARY KEY;

【SQL Server / Oracle / MS Access】

sql 复制代码
ALTER TABLE Persons
DROP CONSTRAINT PK_Person;
相关推荐
Hacker_LaoYi1 分钟前
SQL注入的那些面试题总结
数据库·sql
Hacker_LaoYi2 小时前
【渗透技术总结】SQL手工注入总结
数据库·sql
独行soc2 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍06-基于子查询的SQL注入(Subquery-Based SQL Injection)
数据库·sql·安全·web安全·漏洞挖掘·hw
冷眼看人间恩怨4 小时前
【Qt笔记】QDockWidget控件详解
c++·笔记·qt·qdockwidget
独行soc4 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍08-基于时间延迟的SQL注入(Time-Based SQL Injection)
数据库·sql·安全·渗透测试·漏洞挖掘
清平乐的技术专栏4 小时前
Hive SQL 查询所有函数
hive·hadoop·sql
cmdch20179 小时前
Mybatis加密解密查询操作(sql前),where要传入加密后的字段时遇到的问题
数据库·sql·mybatis
Hejjon9 小时前
SpringBoot 整合 SQLite 数据库
笔记
程序猿小柒9 小时前
【Spark】Spark SQL执行计划-精简版
大数据·sql·spark
听见~11 小时前
SQL优化
数据库·sql