目录
SQL CREATE DATABASE 语句
SQL CREATE DATABASE 语句
CREATE DATABASE 实例
SQL DROP DATABASE 语句
SQL DROP DATABASE 语句
DROP DATABASE 实例
SQL Server 的 SQL 数据库备份
SQL 完整备份
SQL 差异备份
完整备份实例
差异备份实例
SQL CREATE TABLE 语句
SQL CREATE TABLE 语句
CREATE TABLE 实例
使用另一个表创建表
SQL DROP TABLE 语句
SQL DROP TABLE 语句
DROP TABLE 实例
TRUNCATE TABLE 语句
SQL ALTER TABLE 语句
SQL ALTER TABLE 语句
ALTER TABLE - 添加列
ALTER TABLE - 删除列
ALTER TABLE - 修改列
SQL ALTER TABLE 实例
更新 数据类型 实例
删除实例
SQL 约束 (Constraints)
SQL 创建约束
SQL 约束
SQL NOT NULL 约束
SQL NOT NULL 约束
创建表时不为空
修改表时不为空
SQL UNIQUE 约束
SQL UNIQUE 约束
创建表时的 UNIQUE 约束
修改表时的 UNIQUE 约束
撤销 UNIQUE 约束
SQL PRIMARY KEY 约束
SQL PRIMARY KEY 约束
创建表时的 PRIMARY KEY 约束
修改表时的 PRIMARY KEY 约束
撤销 PRIMARY KEY 约束
CREATE DATABASE 语句用于创建新的SQL数据库。
【语法】
CREATE DATABASE databasename;
以下SQL语句创建一个名为 "testDB" 的数据库:
【实例】
CREATE DATABASE testDB;
注: 在创建任何数据库之前,请确保您具有管理员权限。创建数据库后,可以使用以下SQL命令在数据库列表中检查它: SHOW DATABASES;
DROP DATABASE 语句用于删除现有SQL数据库。
【语法】
DROP DATABASE databasename;
注: 删除数据库之前要小心。删除数据库将导致数据库中存储的完整信息丢失!
以下SQL语句删除现有数据库 "testDB":
【实例】
DROP DATABASE testDB;
BACKUP DATABASE 语句在SQL Server中用于创建现有SQL数据库的完整备份。
【语法】
BACKUP DATABASE databasename
TO DISK = 'filepath';
差异备份仅备份自上次完整数据库备份以来已更改的数据库部分。
【语法】
BACKUP DATABASE databasename
TO DISK = 'filepath'
WITH DIFFERENTIAL;
以下SQL语句将现有数据库 "testDB" 的完整备份创建到 D 盘:
【实例】
BACKUP DATABASE testDB
TO DISK = 'D:\backups\testDB.bak';
注: 始终要将数据库备份到与实际数据库不同的驱动器。如果发生磁盘崩溃,则不会丢失全部备份文件和数据库。
以下SQL语句创建数据库 "testDB" 的差异备份:
【实例】
BACKUP DATABASE testDB
TO DISK = 'D:\backups\testDB.bak'
WITH DIFFERENTIAL;
注: 差异备份缩短了备份时间(因为只备份更改)。
CREATE TABLE 语句用于在数据库中创建新表。
【语法】
CREATE TABLE table_name (
column1 datatype,
column2 datatype,
column3 datatype,
....
);
column1 参数指定表中列的名称。
datatype 参数指定列可以保存的数据类型(例如varchar、integer、date等)。
以下示例创建了一个名为"Persons"的表,该表包含五列:PersonID、LastName、FirstName、Address 和 City:
【实例】
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 创建现有表的副本。
新表获得相同的列定义。可以选择所有列或特定列。
如果使用现有表创建新表,则新表将使用旧表中的现有值填充。
【语法】
CREATE TABLE new_table_name AS
SELECT column1, column2,...
FROM existing_table_name
WHERE ....;
下面的SQL创建了一个名为"TestTables"的新表(它是"Customers"表的副本):
【实例】
CREATE TABLE TestTable AS
SELECT customername, contactname
FROM customers;
DROP TABLE 语句用于删除数据库中的现有表。
【语法】
DROP TABLE table_name;
注: 删除表前要小心。删除表将导致表中存储的完整信息丢失!
以下SQL语句删除现有表"Shippers":
【实例】
DROP TABLE Shippers;
TRUNCATE TABLE 语句用于清空表中的数据,但不删除表本身。
【语法】
TRUNCATE TABLE table_name;
ALTER TABLE 语句用于添加、删除或修改现有表中的列。
ALTER TABLE 语句还用于添加和删除现有表上的各种约束。
要在表中添加列,请使用以下语法:
ALTER TABLE table_name
ADD column_name datatype;
以下SQL将"Email"列添加到"Customers"表中:
【实例】
ALTER TABLE Customers
ADD Email varchar(255);
要删除表中的列,请使用以下语法(请注意,某些数据库系统不允许删除列):
ALTER TABLE table_name
DROP COLUMN column_name;
以下SQL从"Customers" 表中删除 "Email" 列:
【实例】
ALTER TABLE Customers
DROP COLUMN Email;
要更改表中列的数据类型,请使用以下语法:
【SQL Server / MS Access】
ALTER TABLE table_name
ALTER COLUMN column_name datatype;
【My SQL / Oracle (prior version 10G)】
ALTER TABLE table_name
MODIFY COLUMN column_name datatype;
【Oracle 10G and later】
ALTER TABLE table_name
MODIFY column_name datatype;
请看 "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语句:
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语句:
ALTER TABLE Persons
ALTER COLUMN DateOfBirth year;
注:请注意,"DateOfBirth" 列现在是 year 类型,将以两位数或四位数的格式保存一年。
接下来,我们要删除"Persons"表中名为"DateOfBirth"的列。
我们使用以下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 约束用于为表中的数据指定规则。
可以在使用 CREATE TABLE 语句创建表时或在使用 ALTER TABLE 语句创建表之后指定约束。
【语法】
CREATE TABLE table_name (
column1 datatype constraint,
column2 datatype constraint,
column3 datatype constraint,
....
);
SQL 约束用于为表中的数据指定规则。
约束用于限制可以进入表中的数据类型。这确保了表中数据的准确性和可靠性。如果约束和数据操作之间存在任何冲突,则操作将中止。
约束可以是列级或表级。列级约束应用于列,表级约束应用于整个表。
SQL 中通常使用以下约束:
NOT NULL - 指示某列不能存储 NULL 值。
UNIQUE - 保证某列的每行必须有唯一的值。
PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
CHECK - 保证列中的值符合指定的条件。
DEFAULT - 规定没有给列赋值时的默认值。
INDEX - 索引用于非常快速地从数据库中创建和检索数据。
默认情况下,列可以包含 NULL 空值。
NOT NULL 约束强制列不接受 NULL 值。
NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。
以下SQL确保在创建"Persons"表时,"ID"、"LastName"和"FirstName"列不接受空值:
【实例】
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255) NOT NULL,
Age int
);
要在已创建"Persons"表的"Age"列上创建 NOT NULL 约束,请使用以下 SQL:
ALTER TABLE Persons
MODIFY Age int NOT NULL;
UNIQUE 约束唯一标识数据库表中的每条记录。
UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。
PRIMARY KEY 拥有自动定义的 UNIQUE 约束。
请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。
以下 SQL 在创建"Persons"表时,在"ID"列上创建唯一约束:
【SQL Server / Oracle / MS Access】
CREATE TABLE Persons (
ID int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int
);
【MySQL】
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】
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
CONSTRAINT UC_Person UNIQUE (ID,LastName)
);
要在已创建表的 "ID" 列上创建唯一约束,请使用以下 SQL:
【MySQL / SQL Server / Oracle / MS Access】
ALTER TABLE Persons
ADD UNIQUE (ID);
要命名唯一约束,并在多个列上定义唯一约束,请使用以下SQL语法:
【MySQL / SQL Server / Oracle / MS Access】
ALTER TABLE Persons
ADD CONSTRAINT UC_Person UNIQUE (ID,LastName);
如需撤销 UNIQUE 约束,请使用下面的 SQL:
【MySQL】
ALTER TABLE Persons
DROP INDEX UC_Person;
【SQL Server / Oracle / MS Access】
ALTER TABLE Persons
DROP CONSTRAINT UC_Person;
PRIMARY KEY 约束唯一标识数据库表中的每条记录。
主键必须包含唯一的值。主键列不能包含 NULL 值。
每个表都应该有一个主键,并且每个表只能有一个主键。
下面的 SQL 在 "Persons" 表创建时在 "ID" 列创建 PRIMARY KEY 约束:
【MySQL】
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】
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】
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)。
如果在表已存在的情况下为 "ID" 列创建 PRIMARY KEY 约束,请使用下面的 SQL:
【MySQL / SQL Server / Oracle / MS Access】
ALTER TABLE Persons
ADD PRIMARY KEY (ID);
如果需要命名 PRIMARY KEY 约束,以及为多个列定义 PRIMARY KEY 约束,请使用下面的 SQL 语法:
【MySQL / SQL Server / Oracle / MS Access】
ALTER TABLE Persons
ADD CONSTRAINT PK_Person PRIMARY KEY (ID,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_Person;