SQL 数据复制与数据库创建技巧(五)

在数据管理和处理过程中,SQL 是一种非常强大的工具。本文将详细介绍如何使用 SQL 进行数据复制、创建数据库和表,并介绍一些常见的 SQL 约束,帮助你更好地管理和维护数据。

数据复制:INSERT INTO SELECT 语句

在数据管理中,经常需要从一个表中复制数据并插入到另一个表中。SQL 提供了 INSERT INTO SELECT 语句来实现这一功能。通过这条语句,你可以从一个表中选择数据,并将其插入到另一个已存在的表中,而不会影响目标表中已有的数据。

语法

你可以选择将所有列的数据复制到目标表中:

INSERT INTO target_table
SELECT * FROM source_table;

或者,你也可以选择只复制指定的列:

INSERT INTO target_table (column1, column2, ...)
SELECT column1, column2, ... FROM source_table;

示例

假设我们有两个表:Websites 和 apps。Websites 表存储了一些网站的信息,而 apps 表存储了一些应用程序的信息。我们希望将 apps 表中的某些数据复制到 Websites 表中。

复制所有数据

INSERT INTO Websites (name, country)
SELECT app_name, country FROM apps;

复制特定数据

如果你只想复制 apps 表中 id 为 1 的数据到 Websites 表中,可以使用以下语句:

INSERT INTO Websites (name, country)
SELECT app_name, country FROM apps WHERE id = 1;

创建数据库:CREATE DATABASE 语句

在进行数据管理之前,首先需要创建一个数据库。SQL 提供了 CREATE DATABASE 语句来创建新的数据库。

语法

CREATE DATABASE database_name;

示例

下面的 SQL 语句将创建一个名为 my_db 的数据库:

CREATE DATABASE my_db;

创建表:CREATE TABLE 语句

在创建数据库后,接下来需要创建表来存储数据。SQL 提供了 CREATE TABLE 语句来创建新的表。

语法

CREATE TABLE table_name (
    column1 datatype,
    column2 datatype,
    ...
);

其中,column1、column2 等是列的名称,datatype 是列的数据类型,例如 int、varchar、date 等。

示例

假设我们想要创建一个名为 Persons 的表,包含五列:PersonID、LastName、FirstName、Address 和 City。可以使用以下 SQL 语句:

CREATE TABLE Persons (
    PersonID int,
    LastName varchar(255),
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255)
);

数据类型

在创建表时,需要指定每列的数据类型。常见的数据类型包括:

  • int:整数
  • varchar(n):可变长度的字符串,最大长度为 n
  • date:日期
  • decimal(p, s):十进制数,其中 p 是精度,s 是小数位数

SQL 约束

SQL 约束用于确保表中的数据遵循特定的规则。如果数据违反了这些规则,相应的操作将被阻止。约束可以在创建表时定义,也可以在表创建后添加。

常见的 SQL 约束

  • NOT NULL:确保列不能包含 NULL 值。
  • UNIQUE:确保列中的所有值都是唯一的。
  • PRIMARY KEY:唯一标识表中的每一行记录,是 NOT NULL 和 UNIQUE 的结合。
  • FOREIGN KEY:确保一个表中的值匹配另一个表中的值,用于建立表之间的关系。
  • CHECK:确保列中的值满足特定的条件。
  • DEFAULT:为列设置默认值。
  • INDEX:用于快速访问数据库表中的数据。

示例

NOT NULL 约束

确保 ID、LastName 和 FirstName 列不能包含 NULL 值:

CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255) NOT NULL,
    Age int
);

UNIQUE 约束

确保 Email 列中的所有值都是唯一的:

CREATE TABLE Employees (
    EmployeeID int NOT NULL UNIQUE,
    LastName varchar(50) NOT NULL,
    FirstName varchar(50),
    Email varchar(100) UNIQUE
);

PRIMARY KEY 约束

唯一标识表中的每一行记录:

CREATE TABLE Orders (
    OrderID int NOT NULL PRIMARY KEY,
    OrderNumber int NOT NULL,
    OrderDate date NOT NULL
);

FOREIGN KEY 约束

确保 CustomerID 列中的值匹配 Customers 表中的 CustomerID 值:

CREATE TABLE Orders (
    OrderID int NOT NULL PRIMARY KEY,
    OrderNumber int NOT NULL,
    CustomerID int,
    FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);

CHECK 约束

确保 Price 列中的值大于等于 0:


CREATE TABLE Products (
    ProductID int NOT NULL PRIMARY KEY,
    ProductName varchar(100) NOT NULL,
    Price decimal(10, 2) CHECK (Price >= 0)
);

DEFAULT 约束

为 JoinDate 列设置默认值为当前日期:

CREATE TABLE Customers (
    CustomerID int NOT NULL PRIMARY KEY,
    LastName varchar(50) NOT NULL,
    FirstName varchar(50),
    JoinDate date DEFAULT GETDATE()
);

INDEX 约束

用于快速访问数据库表中的数据:

CREATE INDEX idx_lastname ON Employees (LastName);

综合示例

创建一个包含多种约束的 Students 表:

CREATE TABLE Students (
    StudentID int NOT NULL PRIMARY KEY,
    LastName varchar(50) NOT NULL,
    FirstName varchar(50) NOT NULL,
    Age int CHECK (Age >= 18),
    Email varchar(100) UNIQUE,
    EnrollmentDate date DEFAULT GETDATE()
);

通过这些约束,数据库管理系统能够确保数据的一致性、完整性和准确性。

总结

本文介绍了如何使用 SQL 进行数据复制、创建数据库和表,并详细讲解了常见的 SQL 约束。通过这些知识,你可以更有效地管理和维护数据库中的数据。希望本文对你有所帮助!