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

1、SQL 表的创建

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

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

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

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,用于存储员工的基本信息。
-- 创建 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、用户名、电子邮件、密码和创建时间等字段。

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)

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

订单表(Orders)

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)

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

档案表(Profiles)

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

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

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

部门表(Departments)

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

员工表(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 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.mfbz.cn/a/887918.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

rabbitMQ 简单使用

安装 rabbitMQ 下载地址:rabbitmq-3.12.0 安装 windows rabbitMQ 需要的命令 进入 rabbitMQ 的 sbin 目录后 cmd (需要管理员权限) rabbitmq-plugins.bat enable rabbitmq_management随后重启 rabbitMQ #关闭服务 net stop rabbitmq #开…

openpnp - juki吸嘴尺寸

文章目录 openpnp - juki吸嘴尺寸概述笔记吸嘴可以对应的最小元件尺寸END openpnp - juki吸嘴尺寸 概述 在网上买的juki吸嘴的商品页面,并没有具体的吸嘴尺寸。 现在贴片时,要根据吸嘴外径大小来决定具体元件要用哪种吸嘴,先自己量一下。 …

2024 uniapp入门教程 01:含有vue3基础 我的第一个uniapp页面

uni-app官网uni-app,uniCloud,serverless,快速体验,看视频,10分钟了解uni-app,为什么要选择uni-app?,功能框架图,一套代码,运行到多个平台https://uniapp.dcloud.net.cn/ 准备工作:HBuilder X 软件 HBuilder X 官网下载&#xf…

迁移学习案例-python代码

大白话 迁移学习就是用不太相同但又有一些联系的A和B数据,训练同一个网络。比如,先用A数据训练一下网络,然后再用B数据训练一下网络,那么就说最后的模型是从A迁移到B的。 迁移学习的具体形式是多种多样的,比如先用A训练…

LeetCode讲解篇之300. 最长递增子序列

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 这题我们可以通过动态规划求解&#xff0c;使用一个数组f&#xff0c;数组f的i号元素表示[0, i]范围内最长递增子序列的长度 状态转移方程&#xff1a;f[i] max(f[j] 1)&#xff0c;其中 0 < j < i 题…

docker快速安装ELK

一、创建elk目录 创建/elk/elasticsearch/data/目录 mkdir -p /usr/local/share/elk/elasticsearch/data/ 创建/elk/logstash/pipeline/目录 mkdir -p /usr/local/share/elk/logstash/pipeline/ 创建/elk/kibana/conf/目录 mkdir -p /usr/local/share/elk/kibana/conf/ 二、创建…

大模型应用新领域:探寻终端侧 AI 竞争核心|智于终端

2024年过去2/3&#xff0c;大模型领域的一个共识开始愈加清晰&#xff1a; AI技术的真正价值在于其普惠性。没有应用&#xff0c;基础模型将无法发挥其价值。 于是乎&#xff0c;回顾这大半年&#xff0c;从互联网大厂到手机厂商&#xff0c;各路人马都在探索AI时代Killer AP…

【超级详细解释】力扣每日一题 134.加油站 48. 旋转图像

134.加油站 力扣 这是一个很好的问题。这个思路其实基于一种贪心策略。我们从整个路径的油量变化来理解它&#xff0c;结合一个直观的“最低点法则”&#xff0c;来确保找到正确的起点。 问题的核心&#xff1a;油量差值的累积 对于每个加油站&#xff0c;我们有两个数组&…

1、如何查看电脑已经连接上的wifi的密码?

在电脑桌面右下角的如下位置&#xff1a;双击打开查看当前连接上的wifi的名字&#xff1a;ZTE-kfdGYX-5G 按一下键盘上的win R 键, 输入【cmd】 然后&#xff0c;按一下【回车】。 输入netsh wlan show profile ”wifi名称” keyclear : 输入完成后&#xff0c;按一下回车&…

51单片机的水质检测系统【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块温度传感器ph传感器浑浊度传感器蓝牙继电器LED、按键和蜂鸣器等模块构成。适用于水质监测系统&#xff0c;含检测和调整水温、浑浊度、ph等相似项目。 可实现功能: 1、LCD1602实时显示水温、水体ph和浑浊度 2、温…

Studying-多线程学习Part3 - condition_variable与其使用场景、C++11实现跨平台线程池

来源&#xff1a;多线程学习 目录 condition_variable与其使用场景 生产者与消费者模型 C11实现跨平台线程池 condition_variable与其使用场景 生产者与消费者模型 生产者-消费者模式是一种经典的多线程设计模式&#xff0c;用于解决多个线程之间的数据共享和协作问题。…

基于PHP的校园二手书交易管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的校园二手书交易管理系统 一 介绍 此二手书交易管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈&#xff1a;phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注…

k8s中pod的管理

一、资源管理 1.概述 说到k8s中的pod&#xff0c;即荚的意思&#xff0c;就不得不先提到k8s中的资源管理&#xff0c;k8s中可以用以下命令查看我们的资源&#xff1a; kubectl api-resources 比如我们现在需要使用k8s开启一个东西&#xff0c;那么k8s通过apiserver去对比etc…

《从零开始大模型开发与微调》真的把大模型说透了!零基础入门一定要看!

2022年底&#xff0c;ChatGPT震撼上线&#xff0c;大语言模型技术迅速“席卷”了整个社会&#xff0c;人工智能技术因此迎来了一次重要进展。与大语言模型相关的研发岗薪资更是水涨船高&#xff0c;基本都是5w月薪起。很多程序员也想跟上ChatGPT脚步&#xff0c;今天给大家带来…

51单片机系列-串口(UART)通信技术

&#x1f308;个人主页&#xff1a; 羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 并行通信和串行通信 并行方式 并行方式&#xff1a;数据的各位用多条数据线同时发送或者同时接收 并行通信特点&#xff1a;传送速度快&#xff0c;但因需要多根传输线&#xf…

免杀对抗—GOC#反VT沙盒资源分离混淆加密

前言 今天的主要内容是反VT沙盒&#xff0c;我们都知道生成的后门会被杀软上穿到沙盒中去运行&#xff0c;去逆向。如此一来我们的后门就很容易被查杀掉&#xff0c;但如果我们对后门进行一些操作&#xff0c;让它在被逆向的时候&#xff0c;反编译出一堆乱码&#xff0c;或者…

【大语言模型-论文精读】用于医疗领域摘要任务的大型语言模型评估综述

【大语言模型-论文精读】用于医疗领域摘要任务的大型语言模型评估综述 论文信息&#xff1a; 用于医疗领域摘要任务的大型语言模型评估&#xff1a;一篇叙述性综述&#xff0c; 文章是由 Emma Croxford , Yanjun Gao 博士 , Nicholas Pellegrino , Karen K. Wong 等人近期合作…

STM32PWM应用

目录 一、输出比较(OC) 二、PWM&#xff1a; 1、简介 2、基本结构 3、参数计算 三、PWM驱动LED呼吸灯 1、代码 四、PWM驱动Sg90舵机 1、工作原理 2、完整代码 五、PWM驱动直流电机 1、TB6612芯片模块 2、完整代码&#xff1a; 一、输出比较(OC) OC&#xff08;Outp…

智能医疗:Spring Boot医院管理系统开发

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常适…

【Python】PDFMiner.six:高效处理PDF文档的Python工具

PDF是一种广泛使用的文件格式&#xff0c;特别适用于呈现固定布局的文档。然而&#xff0c;提取PDF文件中的文本和信息并不总是那么简单。幸好有许多Python库可以帮助我们&#xff0c;其中&#xff0c;PDFMiner.six 是一个功能强大、专门用于PDF文档解析的库。 ⭕️宇宙起点 &a…