mysql学习教程,从入门到精通,SQL 表的创建(33)

1、SQL 表的创建

在SQL中,创建表的基本语法是使用CREATE TABLE语句。以下是一个基本的CREATE TABLE语法模板,以及对其各个部分的解释:

sql">CREATE TABLE 表名 (
    列名1 数据类型 [约束条件] [默认值],
    列名2 数据类型 [约束条件] [默认值],
    ...
    [表级约束条件]
);
  • CREATE TABLE:这是创建表的关键字。
  • 表名:这是你为新表指定的名称。在SQL中,表名通常是唯一的,并且遵循数据库的命名规则(例如,只能使用字母、数字和下划线,且不能以数字开头)。
  • 列名:这是表中每一列的名称。列名也是唯一的(在同一表中),并且遵循与表名相同的命名规则。
  • 数据类型:这指定了列中数据的类型。常见的数据类型包括整数(INT)、浮点数(FLOATDOUBLE)、字符串(CHARVARCHAR)、日期和时间(DATETIMEDATETIME)等。
  • [约束条件]:这是可选的,用于指定列的约束条件,如主键(PRIMARY KEY)、唯一键(UNIQUE)、非空(NOT NULL)、默认值(DEFAULT)、自动递增(AUTO_INCREMENT,在MySQL中)等。
  • [默认值]:这也是可选的,用于指定列的默认值。当插入新行但未为该列提供值时,将使用默认值。
  • [表级约束条件]:这是可选的,用于指定表的约束条件,如外键(FOREIGN KEY)约束,这些约束不能直接在列定义中指定,而需要在表级定义。

以下是一个具体的例子,展示了如何创建一个名为Students的表,其中包含学生的ID、姓名、年龄和入学日期:

sql">CREATE TABLE Students (
    StudentID INT AUTO_INCREMENT PRIMARY KEY,  -- 学生ID,主键,自动递增
    FirstName VARCHAR(50) NOT NULL,            -- 名字,非空
    LastName VARCHAR(50) NOT NULL,             -- 姓氏,非空
    Age INT,                                   -- 年龄
    EnrollmentDate DATE                        -- 入学日期
);

在这个例子中:

  • StudentID列是一个整数类型,被指定为主键(PRIMARY KEY),并且设置为自动递增(AUTO_INCREMENT)。这意味着每当向表中插入新行时,StudentID将自动增加,无需手动指定。
  • FirstNameLastName列是字符串类型(VARCHAR),最大长度为50个字符,并且被指定为非空(NOT NULL)。这意味着在插入新行时,必须为这两个列提供值。
  • Age列是一个整数类型,没有约束条件。
  • EnrollmentDate列是一个日期类型(DATE),用于存储学生的入学日期。
    请注意,不同的数据库系统(如MySQL、PostgreSQL、SQL Server等)可能在语法和功能上略有不同。例如,AUTO_INCREMENT是MySQL特有的,而在其他数据库系统中可能使用不同的语法来实现自动递增功能。因此,在创建表时,请务必参考你所使用的数据库系统的文档。
    展示了如何创建一个简单的SQL表。这个示例表名为 Employees,用于存储员工的基本信息。
sql">-- 创建 Employees 表
CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY AUTO_INCREMENT,  -- 员工ID,主键,自动递增
    FirstName VARCHAR(50) NOT NULL,             -- 名字,非空
    LastName VARCHAR(50) NOT NULL,              -- 姓氏,非空
    BirthDate DATE,                             -- 出生日期
    HireDate DATE,                              -- 入职日期
    Position VARCHAR(100),                      -- 职位
    Salary DECIMAL(10, 2),                      -- 薪水,最多10位数字,2位小数
    DepartmentID INT,                           -- 部门ID,外键
    FOREIGN KEY (DepartmentID) REFERENCES Departments(DepartmentID)  -- 外键约束,引用 Departments 表中的 DepartmentID
);
-- 假设还有一个 Departments 表,用于存储部门信息
CREATE TABLE Departments (
    DepartmentID INT PRIMARY KEY AUTO_INCREMENT, -- 部门ID,主键,自动递增
    DepartmentName VARCHAR(100) NOT NULL         -- 部门名称,非空
);

1.1、解释

  1. Employees 表

    • EmployeeID: 整数类型,作为主键,并且设置为自动递增。这意味着每当你插入一条新记录时,EmployeeID 会自动赋予一个新的唯一值。
    • FirstName: 可变字符类型,最大长度为50个字符,不能为空。
    • LastName: 可变字符类型,最大长度为50个字符,不能为空。
    • BirthDate: 日期类型,用于存储员工的出生日期。
    • HireDate: 日期类型,用于存储员工的入职日期。
    • Position: 可变字符类型,最大长度为100个字符,用于存储员工的职位。
    • Salary: 十进制类型,总共最多10位数字,其中2位是小数位,用于存储员工的薪水。
    • DepartmentID: 整数类型,作为外键,引用 Departments 表中的 DepartmentID
  2. Departments 表

    • DepartmentID: 整数类型,作为主键,并且设置为自动递增。
    • DepartmentName: 可变字符类型,最大长度为100个字符,不能为空,用于存储部门名称。

1.2、外键约束

Employees 表中,DepartmentID 字段被设置为外键,它引用 Departments 表中的 DepartmentID。这确保了 Employees 表中的 DepartmentID 必须是 Departments 表中已经存在的 DepartmentID

注意

  • 在实际应用中,你可能需要添加更多的字段、索引、约束或其他表关系来满足业务需求。
  • 在某些数据库管理系统(DBMS)中,语法可能会有细微的差别,比如 AUTO_INCREMENT 在 MySQL 中使用,而在 SQL Server 中则使用 IDENTITY
    当然可以,以下是一些具体的SQL表创建案例,涵盖了不同的场景和数据类型。

案例一:用户表(Users)

这是一个简单的用户表,包含用户ID、用户名、电子邮件、密码和创建时间等字段。

sql">CREATE TABLE Users (
    UserID INT PRIMARY KEY,         -- 用户ID,主键
    Username VARCHAR(50) NOT NULL,  -- 用户名,非空
    Email VARCHAR(100) UNIQUE,      -- 电子邮件,唯一
    Password VARCHAR(255) NOT NULL, -- 密码,非空
    CreatedAt DATETIME DEFAULT CURRENT_TIMESTAMP -- 创建时间,默认值为当前时间戳
);

案例二:订单表(Orders)与产品表(Products)

假设我们有一个产品表(Products),我们需要创建一个订单表(Orders)来存储订单信息,并包含与产品表相关联的外键。

产品表(Products)

sql">CREATE TABLE Products (
    ProductID INT PRIMARY KEY,      -- 产品ID,主键
    ProductName VARCHAR(100),       -- 产品名称
    Price DECIMAL(10, 2)            -- 价格,最多10位数字,2位小数
);

订单表(Orders)

sql">CREATE TABLE Orders (
    OrderID INT PRIMARY KEY,        -- 订单ID,主键
    ProductID INT,                  -- 产品ID,外键
    OrderDate DATE,                 -- 订单日期
    Quantity INT,                   -- 数量
    FOREIGN KEY (ProductID) REFERENCES Products(ProductID) -- 外键约束,引用 Products 表中的 ProductID
);
```### 案例三:文章表(Articles)

这是一个文章表,包含文章ID、标题、内容和发布状态等字段。文章ID是自动递增的主键。

```sql
CREATE TABLE Articles (
    ArticleID INT AUTO_INCREMENT PRIMARY KEY, -- 文章ID,主键,自动递增
    Title VARCHAR(255) NOT NULL,              -- 标题,非空
    Content TEXT,                             -- 内容
    Published BOOLEAN DEFAULT FALSE           -- 发布状态,默认为未发布
);

案例四:调查表(Surveys)与档案表(Profiles)

这两个表展示了如何使用枚举(ENUM)类型和集合(SET)类型来限制列的值。

调查表(Surveys)

sql">CREATE TABLE Surveys (
    SurveyID INT AUTO_INCREMENT PRIMARY KEY,   -- 调查ID,主键,自动递增
    Question VARCHAR(255),                     -- 问题
    Answer ENUM('Yes', 'No', 'Maybe')          -- 答案,只能是 'Yes'、'No' 或 'Maybe' 中的一个
);

档案表(Profiles)

sql">CREATE TABLE Profiles (
    ProfileID INT AUTO_INCREMENT PRIMARY KEY,  -- 档案ID,主键,自动递增
    Hobbies SET('Reading', 'Swimming', 'Hiking', 'Gaming') -- 爱好,可以是 'Reading'、'Swimming'、'Hiking' 和 'Gaming' 中的零个或多个值(以逗号分隔)
);

案例五:部门表(Departments)与员工表(Employees)

假设我们需要创建一个公司数据库,其中包含部门表和员工表。员工表将包含部门ID作为外键。

部门表(Departments)

sql">CREATE TABLE Departments (
    DepartmentID INT PRIMARY KEY AUTO_INCREMENT, -- 部门ID,主键,自动递增
    DepartmentName VARCHAR(100) NOT NULL          -- 部门名称,非空
);

员工表(Employees,与前面案例略有不同,为了展示更多字段和约束)

sql">CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY AUTO_INCREMENT,   -- 员工ID,主键,自动递增
    FirstName VARCHAR(50) NOT NULL,              -- 名字,非空
    LastName VARCHAR(50) NOT NULL,               -- 姓氏,非空
    BirthDate DATE,                              -- 出生日期
    HireDate DATE NOT NULL,                     -- 入职日期,非空
    Position VARCHAR(100),                       -- 职位
    Salary DECIMAL(10, 2),                       -- 薪水,最多10位数字,2位小数
    DepartmentID INT,                            -- 部门ID,外键
    Email VARCHAR(100) UNIQUE,                   -- 电子邮件,唯一
    Phone VARCHAR(20),                           -- 电话号码
    FOREIGN KEY (DepartmentID) REFERENCES Departments(DepartmentID) -- 外键约束,引用 Departments 表中的 DepartmentID
);

这些案例展示了如何使用SQL语句创建不同类型的表,并定义了各种字段、数据类型和约束。你可以根据实际需求进行修改和扩展。


http://www.niftyadmin.cn/n/5689307.html

相关文章

The legacy JS API is deprecated and will be removed in Dart Sass 2.0

The legacy JS API is deprecated and will be removed in Dart Sass 2.0 更新了sass版本后,启动项目控制台一直在报错,影响开发效率,强迫症表示忍受不了。 字面意思是:Sass在2.0版本将会移除legacy JS API,所以现在使…

DBT hook 实战教程

本文将介绍dbt中在模型和seed级别使用post-hook的几个具体示例。dbt中的Post-hooks是一个强大而简单的特性,它在构建模型之后(如果是pre-hook,甚至在此之前)执行SQL语句。这些语句实际上(几乎)可以是任何东西,从将表复制到另一个数据库/模式&…

【Kubernetes】常见面试题汇总(五十一)

目录 114. K8S 集群服务访问失败(情况一)? 115. K8S 集群服务访问失败(情况二)? 特别说明: 题目 1-68 属于【Kubernetes】的常规概念题,即 “ 汇总(一&#xff…

AI写作系列1——我重生了

重生之路 第一章:重生的瞬间 我重生了,这一世,我发誓不会再犯同样的错误。记忆如潮水般涌来,前世的痛苦与遗憾交织在一起,让我几乎窒息。曾经的我,是个普通的大学生,拼命学习,却因…

卫生间门口墙皮天天掉,是墙面“返潮”造成的?

业主说房子装修好5年了,卫生间防水出问题了,去现场看一下,看看能怎么处理。      到了工地以后,业主说卫生间门口两侧的墙皮都已经脱落了,天天往下掉,实在没办法了,就在墙上钉了几块纸壳子。…

利用条件逻辑创建简单的模拟程序

利用条件逻辑创建简单的模拟程序 在编程中,条件逻辑(if-elif-else 语句)是控制程序流的重要工具。它允许程序根据不同条件做出不同的决策。这一特性使得我们能够创建更复杂和智能的程序。在本文中,我们将通过一个实际案例来展示如…

【Swift官方文档】7.Swift集合类型

集合类型 使用数组、集合和字典来组织数据。Swift 提供了三种主要的集合类型:数组、集合和字典,用于存储值的集合。数组是有序的值集合。集合是无序的唯一值集合。字典是无序的键值对集合。 Swift 中的数组、集合和字典始终清晰地指明它们可以存储的值…

开源项目 - 交通工具检测 yolo v3 物体检测 单车检测 车辆检测 飞机检测 火车检测 船只检测

开源项目 - 交通工具检测 yolo v3 物体检测 单车检测 车辆检测 飞机检测 火车检测 船只检测 开源项目地址:https://gitcode.net/EricLee/yolo_v3 示例: