详解SQL数据定义功能

news2025/3/16 13:53:45

数据定义

  • 1. 数据库模式(Schema)的定义与删除
    • 定义模式
    • 删除模式
  • 2. 基本表的定义、修改与删除
    • 定义表
      • 约束
        • 1. `NOT NULL` 约束
        • 2. `DEFAULT` 约束
        • 3. `UNIQUE` 约束
        • 4. `PRIMARY KEY` 约束
          • 多列主键示例:
        • 5. `FOREIGN KEY` 约束
        • 6. `CHECK` 约束
        • 7. `AUTO_INCREMENT` (MySQL 特有)
        • 综合示例:定义一张复杂表
    • 修改表结构
    • 删除表
  • 3. 视图(View)的定义与删除
    • 创建视图
    • 删除视图
  • 4. 索引的建立、修改与删除
    • 创建索引
    • 修改索引
    • 删除索引
  • 总结

1. 数据库模式(Schema)的定义与删除

定义模式

CREATE SCHEMA schema_name;
  • 示例
    CREATE SCHEMA my_schema;
    
    • 说明:创建名为 my_schema 的模式。

删除模式

DROP SCHEMA schema_name [CASCADE | RESTRICT];
  • 示例
    DROP SCHEMA my_schema CASCADE;
    
    • 说明
      • CASCADE:删除模式时,同时删除模式中的所有对象。
      • RESTRICT:如果模式中存在对象,则无法删除。

2. 基本表的定义、修改与删除

定义表

CREATE TABLE table_name (
    column1 datatype [constraints],
    column2 datatype [constraints],
    ...
    columnN datatype [constraints]
);
  • 示例
    CREATE TABLE employees (
        employee_id INT PRIMARY KEY,
        name VARCHAR(100) NOT NULL,
        department_id INT,
        hire_date DATE,
        salary DECIMAL(10, 2)
    );
    
    • 说明:创建名为 employees 的表,包含以下字段:
      • employee_id:主键,不允许为空。
      • name:员工姓名,不允许为空。
      • department_id:部门编号,允许为空。
      • hire_date:雇佣日期。
      • salary:薪资,精确到小数点后两位。

约束

1. NOT NULL 约束
  • 作用:保证列的值不能为 NULL,即必须提供一个值。
  • 语法
    column_name data_type NOT NULL
    
  • 示例
    CREATE TABLE employees (
        employee_id INT NOT NULL,
        name VARCHAR(100) NOT NULL,
        hire_date DATE NOT NULL
    );
    
    • 说明
      • employee_idnamehire_date 列都必须有值,不能为 NULL
2. DEFAULT 约束
  • 作用:为列设置一个默认值,当插入数据时未提供值时使用默认值。
  • 语法
    column_name data_type DEFAULT default_value
    
  • 示例
    CREATE TABLE employees (
        employee_id INT NOT NULL,
        name VARCHAR(100) NOT NULL,
        hire_date DATE DEFAULT CURRENT_DATE,
        salary DECIMAL(10, 2) DEFAULT 3000.00
    );
    
    • 说明
      • hire_date 默认值是当前日期。
      • salary 默认值是 3000.00,如果插入数据时未提供 salary 值,将使用默认值。
3. UNIQUE 约束
  • 作用:保证列中的值唯一,不能重复。
  • 语法
    column_name data_type UNIQUE
    
  • 示例
    CREATE TABLE employees (
        employee_id INT NOT NULL UNIQUE,
        email VARCHAR(255) UNIQUE
    );
    
    • 说明
      • employee_idemail 列中的值不能重复。
      • UNIQUE 可以保证唯一性,但不同于主键,它允许列中存在 NULL 值。
4. PRIMARY KEY 约束
  • 作用:用于标识表中的唯一记录,必须唯一且不能为 NULL
  • 语法
    column_name data_type PRIMARY KEY
    
  • 或者在多列上定义主键:
    PRIMARY KEY (column1, column2, ...)
    
  • 示例
    CREATE TABLE employees (
        employee_id INT PRIMARY KEY,
        name VARCHAR(100),
        department_id INT,
        hire_date DATE
    );
    
    • 说明
      • employee_id 是表的主键,值必须唯一且不能为 NULL
多列主键示例:
CREATE TABLE order_items (
    order_id INT,
    item_id INT,
    quantity INT,
    PRIMARY KEY (order_id, item_id)
);
  • 说明order_iditem_id 组合在一起作为主键,确保每个订单中每个商品的记录唯一。
5. FOREIGN KEY 约束
  • 作用:用于建立两张表之间的关系,确保外键列的值必须在另一张表中存在。
  • 语法
    column_name data_type REFERENCES parent_table (parent_column)
    
  • 或者:
    FOREIGN KEY (column_name) REFERENCES parent_table (parent_column)
    
  • 示例
    CREATE TABLE departments (
        department_id INT PRIMARY KEY,
        department_name VARCHAR(100)
    );
    
    CREATE TABLE employees (
        employee_id INT PRIMARY KEY,
        name VARCHAR(100),
        department_id INT,
        FOREIGN KEY (department_id) REFERENCES departments(department_id)
    );
    
    • 说明
      • department_idemployees 表中的外键,引用 departments 表中的 department_id
6. CHECK 约束
  • 作用:限制列的值必须满足某个条件。
  • 语法
    column_name data_type CHECK (condition)
    
  • 或者:
    CHECK (condition)
    
  • 示例
    CREATE TABLE employees (
        employee_id INT PRIMARY KEY,
        name VARCHAR(100) NOT NULL,
        salary DECIMAL(10, 2) CHECK (salary >= 0),
        age INT CHECK (age BETWEEN 18 AND 65)
    );
    
    • 说明
      • salary 列的值必须大于或等于 0。
      • age 列的值必须在 18 和 65 之间。
7. AUTO_INCREMENT (MySQL 特有)
  • 作用:为列自动生成唯一的递增值,通常用于主键。
  • 语法
    column_name data_type AUTO_INCREMENT
    
  • 示例
    CREATE TABLE employees (
        employee_id INT AUTO_INCREMENT PRIMARY KEY,
        name VARCHAR(100) NOT NULL
    );
    
    • 说明
      • employee_id 列的值将自动生成,初始值为 1,每次插入新行时递增。
综合示例:定义一张复杂表
CREATE TABLE employees (
    employee_id INT AUTO_INCREMENT PRIMARY KEY, -- 主键,自动递增
    name VARCHAR(100) NOT NULL,                -- 员工姓名,不能为空
    email VARCHAR(255) UNIQUE,                 -- 邮箱必须唯一
    department_id INT,                         -- 部门编号
    hire_date DATE DEFAULT CURRENT_DATE,       -- 默认值为当前日期
    salary DECIMAL(10, 2) CHECK (salary >= 0), -- 薪资必须大于或等于 0
    FOREIGN KEY (department_id) REFERENCES departments(department_id) -- 外键约束
);
  • 详细解读
    • employee_id 是主键,自动递增,唯一且不能为空。
    • name 是员工姓名,不能为空。
    • email 必须唯一,避免重复。
    • department_id 是外键,必须引用 departments 表中的 department_id
    • hire_date 默认值是当前日期。
    • salary 的值必须大于或等于 0。

修改表结构

  1. 添加列

    ALTER TABLE table_name ADD column_name datatype [constraints];
    
    • 示例
      ALTER TABLE employees ADD email VARCHAR(255);
      
      • 说明:为 employees 表添加 email 列。
  2. 修改列类型

    ALTER TABLE table_name ALTER COLUMN column_name TYPE new_datatype;
    
    • 示例
      ALTER TABLE employees ALTER COLUMN salary TYPE DECIMAL(12, 2);
      
      • 说明:将 employees 表中的 salary 列的精度修改为 12 位(小数点后两位)。
  3. 删除列

    ALTER TABLE table_name DROP COLUMN column_name [CASCADE | RESTRICT];
    
    • 示例
      ALTER TABLE employees DROP COLUMN email;
      
      • 说明:删除 employees 表中的 email 列。

删除表

DROP TABLE table_name [CASCADE | RESTRICT];
  • 示例
    DROP TABLE employees CASCADE;
    
    • 说明:删除 employees 表及其依赖对象。

3. 视图(View)的定义与删除

创建视图

视图是基于一个或多个表的查询结果集,定义一个视图后可以像查询表一样查询视图。

CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;
  • 示例
    CREATE VIEW employee_salary AS
    SELECT employee_id, name, salary
    FROM employees
    WHERE salary > 50000;
    
    • 说明
      • 创建一个名为 employee_salary 的视图,该视图包含 employees 表中薪资大于 50000 的员工的 employee_idnamesalary

删除视图

DROP VIEW view_name;
  • 示例
    DROP VIEW employee_salary;
    
    • 说明:删除 employee_salary 视图。

4. 索引的建立、修改与删除

创建索引

  1. 普通索引

    CREATE INDEX index_name ON table_name (column1, column2, ...);
    
    • 示例
      CREATE INDEX idx_department_id ON employees(department_id);
      
      • 说明:为 employees 表的 department_id 列创建普通索引。
  2. 唯一索引

    CREATE UNIQUE INDEX index_name ON table_name (column1, column2, ...);
    
    • 示例
      CREATE UNIQUE INDEX idx_employee_email ON employees(email);
      
      • 说明:为 employees 表的 email 列创建唯一索引。

修改索引

索引本身无法直接修改,需要删除后重新创建。

删除索引

DROP INDEX index_name;
  • 示例
    DROP INDEX idx_department_id;
    
    • 说明:删除名为 idx_department_id 的索引。

总结

  • CREATE 用于创建模式、表和索引。
  • ALTER 用于修改表结构。
  • DROP 用于删除模式、表和索引。
  • 使用 CASCADE 会删除对象及其依赖关系,RESTRICT 则要求先删除所有依赖关系。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2316060.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习常见激活函数

激活函数的作用 引入非线性因素 若神经网络仅由线性层构成,那么无论网络的层数有多少,其整体的输出依然是输入的线性组合。这样的网络只能拟合线性函数,在处理复杂的非线性问题(如语音识别、图像分类)时能力十分有限。…

netcore publish报错 error CS1056: Unexpected character

问题:jenkins netcore publish报错 检查文件编码,发现是:GB2312。转换为:UTF-8-BOM。 问题解决 。

网页制作14-Javascipt时间特效の显示动态日期

<!doctype html> <html> <head> <meta charset"utf-8"> <title>动态日期</title> </head><script>var today new Date();//获取时间var ytoday.getFullYear();//截取年var mtoday.getMonth();//截取月份,返回0~11v…

《高效迁移学习:Keras与EfficientNet花卉分类项目全解析》

从零到精通的迁移学习实战指南&#xff1a;以Keras和EfficientNet为例 一、为什么我们需要迁移学习&#xff1f; 1.1 人类的学习智慧 想象一下&#xff1a;如果一个已经会弹钢琴的人学习吉他&#xff0c;会比完全不懂音乐的人快得多。因为TA已经掌握了乐理知识、节奏感和手指…

【单片机】嵌入式系统的硬件与软件特性

嵌入式系统的软件结构 嵌入式系统的软件结构一般分为 不带操作系统&#xff08;Bare Metal&#xff09; 和 带操作系统&#xff08;RTOS / Linux&#xff09; 两种。不同的软件架构适用于不同的应用场景&#xff0c;如 简单控制系统、实时控制系统、物联网、工业自动化等。 嵌…

5G核心网实训室搭建方案:轻量化部署与虚拟化实践

5G核心网实训室 随着5G技术的广泛应用&#xff0c;行业对于5G核心网人才的需求日益增长。高校、科研机构和企业纷纷建立5G实训室&#xff0c;以促进人才培养、技术创新和行业应用研究。IPLOOK凭借其在5G核心网领域的深厚积累&#xff0c;提供了一套高效、灵活的5G实训室搭建方…

蓝耘MaaS平台:阿里QWQ应用拓展与调参实践

摘要&#xff1a;本文深入探讨了蓝耘MaaS平台与阿里QWQ模型的结合&#xff0c;从平台架构、模型特点到应用拓展和调参实践进行了全面分析。蓝耘平台凭借其强大的算力支持、弹性资源调度和全栈服务&#xff0c;为QWQ模型的高效部署提供了理想环境。通过细化语义描述、调整推理参…

在线 SQL 转 SQLAlchemy:一键生成 Python 数据模型

一款高效的在线 SQL 转 SQLAlchemy 工具&#xff0c;支持自动解析 SQL 语句并生成 Python SQLAlchemy 模型代码&#xff0c;适用于数据库管理、后端开发和 ORM 结构映射。无需手写 SQLAlchemy 模型&#xff0c;一键转换 SQL 结构&#xff0c;提升开发效率&#xff0c;简化数据库…

LLM本地化部署与管理实用工具实践记录

文章目录 前言OllamaQWen模型部署Python调用API AnythingLLM本地基础配置AI知识库检索 CherryStudio访问DeepSeek系统内置AI助手嵌入知识库文档 LLMStudio基础环境安装模型管理应用命令行的管理 总结 前言 发现好久没更新 CSDN 个人博客了&#xff0c;更多的是转移到了个人私有…

第十次CCF-CSP认证(含C++源码)

第十次CCF-CSP认证 分蛋糕满分题解 学生排队满分题解 Markdown语法题目解读满分代码 结语 分蛋糕 题目链接 满分题解 基本思路&#xff1a;我们需要保证除了最后一个小朋友之外的所有人&#xff0c;分得的蛋糕都大于等于给定的K值&#xff0c;为什么是大于等于&#xff0c;是…

windows 启用linux子系统不必再装双系统

搜索栏搜索:启用或关闭Windows功能,把下面3项勾选上: 若没有Hyper-V,则根据以下步骤添加: 在桌面新建一个txt文件,将下面的程序复制进去,之后修改文件后缀名为.bat 右键管理员运行即可。 pushd "%~dp0" dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.m…

lanqiaoOJ 1180:斐波那契数列 ← 矩阵快速幂

【题目来源】 https://www.lanqiao.cn/problems/1180/learning/ 【题目描述】 定义斐波那契数列数列为 F11&#xff0c;F21&#xff0c;FnFn-1Fn-2&#xff0c;n&#xff1e;2。 给定一个正整数 n&#xff0c;求 Fn 在模 10^97 的值。 【输入格式】 第1行为一个整数 T&#x…

go程序运行Spaitalite踩坑记录

Spatialite参考资料&#xff1a;8.1. 开源地理空间数据库 — Python与开源GIS Ubuntu安装SpaitaLite&#xff1a; apt-get install libspatialite7 libsqlite3-mod-spatialite apt-get install spatialite-bin 命令行打开数据库&#xff1a;spatialite xxx.db 执行一个空间函…

Everything搜索工具下载使用教程(附安装包),everything搜索工具文件快速查找

文章目录 前言一、Everything搜索工具下载二、Everything搜索工具下载使用教程 前言 Everything搜索工具能凭借文件名实时精准定位文件&#xff0c;接下来的教程&#xff0c;将详细为你呈现 Everything搜索工具的下载及使用方法&#xff0c;助你开启高效文件搜索的便捷之旅 。…

LeetCode 解题思路 17(Hot 100)

解题思路&#xff1a; 找到链表中点&#xff1a; 使用快慢指针法&#xff0c;快指针每次移动两步&#xff0c;慢指针每次移动一步。当快指针到达末尾时&#xff0c;慢指针指向中点。递归分割与排序&#xff1a; 将链表从中点处分割为左右两个子链表&#xff0c;分别对这两个子…

Qt程序基于共享内存读写CodeSys的变量

文章目录 1.背景2.结构体从CodeSys导出后导入到C2.1.将结构体从CodeSys中导出2.2.将结构体从m4文件提取翻译成c格式 3.添加RTTR注册信息4.读取PLC变量值5.更改PLC变量值 1.背景 在文章【基于RTTR在C中实现结构体数据的多层级动态读写】中&#xff0c;我们实现了通过字符串读写…

7-12 关于堆的判断

输入样例&#xff1a; 5 4 46 23 26 24 10 24 is the root 26 and 23 are siblings 46 is the parent of 23 23 is a child of 10输出样例&#xff1a; F T F T 这题是建最小堆&#xff0c;数据结构牛老师讲过这个知识点&#xff0c;但是我给忘了&#xff0c;补题搜了一下才解…

STM32 HAL库实战:高效整合DMA与ADC开发指南

STM32 HAL库实战&#xff1a;高效整合DMA与ADC开发指南 一、DMA与ADC基础介绍 1. DMA&#xff1a;解放CPU的“数据搬运工” DMA&#xff08;Direct Memory Access&#xff09; 是STM32中用于在外设与内存之间直接传输数据的硬件模块。其核心优势在于无需CPU干预&#xff0c;…

正点原子[第三期]Arm(iMX6U)Linux移植学习笔记-4 uboot目录分析

前言&#xff1a; 本文是根据哔哩哔哩网站上“Arm(iMX6U)Linux系统移植和根文件系统构键篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。 引用&#xff1a; …

Unity开发——点击事件/射线检测

一、IPointerClickHandler接口 通过为 UI 元素添加自定义脚本&#xff0c;实现IPointerClickHandle接口&#xff0c;在点击事件发生时进行处理。 这种方式适用于对特定 UI 元素的点击检测。 using UnityEngine; using UnityEngine.EventSystems;public class UIClickHandler…