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

ops/2024/10/9 13:11:19/

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.ppmy.cn/ops/123196.html

相关文章

Spring Boot 进阶-SpringBoot如何整合多数据源场景

对多数据源大家应该不陌生,一般的在单个应用都会存在一个数据库,一个文件存储。这里所说的数据库就是我们描述的数据源。那么多数据源的意思其实通俗来讲就是在一个单体应用中存在两个以上的数据库。这个时候就需要我们对多个数据源进行分别对待进行处理了。 理解多数据源的…

openpnp - 图像传送方向要在高级校正之前设置好

文章目录 openpnp - 图像传送方向要在高级校正之前设置好笔记图像传送方向的确定END openpnp - 图像传送方向要在高级校正之前设置好 笔记 图像传送方向和JOG面板的移动控制和实际设备的顶部摄像头/底部摄像头要一致,这样才能和贴板子时的实际操作方向对应起来。 …

python 实现algorithm topo卡恩拓扑算法

algorithm topo卡恩拓扑算法介绍 卡恩拓扑算法(也称为Kahn算法或Kahn’s Topological Sort Algorithm)是一种用于对有向无环图(DAG)进行拓扑排序的经典算法。拓扑排序是将有向无环图的节点按照依赖关系进行排序的过程&#xff0c…

el-input 限制输入框只能输入数字和小数以及表单常用的校验规则

目录 1、纯输入框使用 2、form表单输入框使用 3、前端Vue中常用rules校验规则 1、纯输入框使用 方法一&#xff1a; oninput “valuevalue.replace(/[^\d]/g,‘’)” //只能输入数字 oninput “valuevalue.replace(/[^0-9.]/g,‘’)” //只能输入数字和小数 <el-inp…

报错 - llama-index pydantic error | arbitrary_types_allowed | PydanticUserError

国庆节前使用 LiteLLMEmbedding 设置 llama-index Settings.embed_model 还好好的&#xff0c;回来后&#xff0c;就就报错&#xff0c;试着降级 llama-index 也无用&#xff1b;设置 Settings.llm 也是好好地。 解决方法&#xff1a;conda 重新创建环境后&#xff0c;在安装 …

Hive数仓操作(十六)

DML&#xff08;数据操作语言&#xff09;指的是用于操作数据的 SQL 语言部分&#xff0c;主要包括对数据的插入、更新、删除等操作。Hive 的 DML语句主要包括 INSERT、UPDATE 和 DELETE 。以下是一些重要的 Hive DML 语句及其解析。 Hive的DML语句 一、 插入操作INSERT 一般…

过滤器Filter【详解】

过滤器Filter 1、 现有问题 在以往的Servlet中&#xff0c;有冗余的代码&#xff0c;多个Servlet都有重复的代码 比如编码格式设置 登录信息认证 2、 概念 过滤器&#xff08;Filter&#xff09;是处于客户端与服务器目标资源之间的一道过滤技术。 过滤器 3、 过滤器作用 执…

Databinding(kotlin)

简单使用&#xff08;只作为view获取&#xff09; build.gradle.kts配置 android {dataBinding {enable true}}activity注入 //setContentView(R.layout.activity_main) val binding: ActivityMainBinding DataBindingUtil.setContentView(this, R.layout.activity_main)x…