详解SQL数据定义功能

数据定义

  • 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), -- 薪资必须大于或等于 0FOREIGN 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.mzph.cn/news/897972.shtml

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

相关文章

Redis超高并发分key实现

Redis扛并发的能力是非常强的,所以高并发场景下经常会使用Redis,但是Redis单分片的写入瓶颈在2w左右,读瓶颈在10w左右,如果在超高并发下即使是集群部署Redis,单分片的Redis也是有可能扛不住的,如下图所示&a…

AI Agent 时代开幕-Manus AI与OpenAI Agent SDK掀起新风暴

【本周AI新闻: AI Agent 时代开幕-Manus AI与OpenAI Agent SDK掀起新风暴】 https://www.bilibili.com/video/BV1bkQyYCEvQ/?share_sourcecopy_web&vd_source32ed33e1165d68429b2e2eb4749f3f26 最近AI圈子里最火的话题非Manus莫属!这款由中国武汉创业公司“蝴…

多时间尺度的配电网深度强化学习无功优化策略的Python示例代码框架

以下是一个简单的多时间尺度的配电网深度强化学习无功优化策略的Python示例代码框架,用于帮助你理解如何使用深度强化学习(以深度Q网络 DQN 为例)来处理配电网的无功优化问题。在实际应用中,你可能需要根据具体的配电网模型和需求…

剑指 Offer II 081. 允许重复选择元素的组合

comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20081.%20%E5%85%81%E8%AE%B8%E9%87%8D%E5%A4%8D%E9%80%89%E6%8B%A9%E5%85%83%E7%B4%A0%E7%9A%84%E7%BB%84%E5%90%88/README.md 剑指 Offer II 081. 允许重复选择…

Webpack 前端性能优化全攻略

文章目录 1. 性能优化全景图1.1 优化维度概览1.2 优化效果指标 2. 构建速度优化2.1 缓存策略2.2 并行处理2.3 减少构建范围 3. 输出质量优化3.1 代码分割3.2 Tree Shaking3.3 压缩优化 4. 运行时性能优化4.1 懒加载4.2 预加载4.3 资源优化 5. 高级优化策略5.1 持久化缓存5.2 模…

虚拟电商-数据库分库分表(二)

本文章介绍:使用Sharding-JDBC实现数据库分库分表,数据库分片策略,实现数据库按月分表 一、Sharding-JDBC使用 1.1.准备环境 步骤一:分库分表sql脚本导入 创建了两个数据库:chongba_schedule0 和chongba_schedule1…

向量数据库对比以及Chroma操作

一、向量数据库与传统类型数据库 向量数据库(Vector Storage Engine)与传统类型的数据库如关系型数据库(MySQL)、文档型数据库(MongoDB)、键值存储(Redis)、全文搜索引擎&#xff0…

python列表基础知识

列表 创建列表 1.列表的定义:可变的,有序的数据结构,可以随时添加或者删除其中的元素 2.基本语法:字面量【元素1,元素2,元素3】使用[]创建列表 定义变量:变量名称【元素1,元素2&…

Node.js 的模块作用域和 module 对象详细介绍

目录 代码示例 1. 创建模块文件 module-demo.js 2. 导入模块并使用 module-demo.js 运行结果 总结 在 Node.js 中,每个文件都是一个独立的模块,具有自己的作用域。与浏览器 JavaScript 代码不同,Node.js 采用模块作用域,这意味…

美畅物联丨WebRTC 技术详解:构建实时通信的数字桥梁

在互联网技术飞速发展的今天,实时通信已成为数字生活的核心需求。WebRTC作为一个开源项目,凭借卓越的技术实力与创新理念,为网页和移动应用带来了颠覆性的实时通信能力。它突破了传统通信方式的限制,实现了音频、视频和数据在用户…

excel中两个表格的合并

使用函数: VLOOKUP函数 如果涉及在excel中两个工作表之间进行配对合并,则: VLOOKUP(C1,工作表名字!A:B,2,0) 参考: excel表格中vlookup函数的使用方法步骤https://haokan.baidu.com/v?pdwisenatural&vid132733503560775…

单引号与双引号在不同编程语言中的使用与支持

在编程语言中,单引号和双引号是常见的符号,它们通常用来表示字符和字符串。然而,如何使用这两种符号在不同的编程语言中有所不同,甚至有一些语言并不区分单引号和双引号的用途。本文将详细介绍不同编程语言中单引号与双引号的支持…

怎么鉴别金媒v10.51和v10.5的区别!单单从CRM上区分!

2.怎么鉴别程序是10.5还是10.51 ?* 作为商业用户,升级完全没有这个担心,但是这次升级从全局来看清晰度不是很高,不像10.5的升级后台UI都变化了!你说有漏洞但是我没遇到过 所以我也不知道升级了啥只能看版本数字是无法区…

python脚本实现服务器内存和cpu使用监控,并记录日志,可以设置阈值和采样频率

Python 脚本,实现以下功能: 按日期自动生成日志文件(例如 cpu_mem_20231001.csv)当 CPU 或内存超过阈值时触发记录独立记录报警事件(保存到 alert.log)支持自定义阈值和监控间隔 脚本代码 import psutil …

【Oracle】19c数据库控制文件多路径配置

一、关闭数据库(2个节点实例都要关闭) srvctl stop database -d ora19c 二、多路径控制文件 打开其中一个节点到nomount状态 sqlplus / as sysdba startup nomount; [oracleora19c1:/home/oracle]$ rman target / RMAN> restore controlfile to…

大模型训练全流程深度解析

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。https://www.captainbed.cn/north 文章目录 1. 大模型训练概览1.1 训练流程总览1.2 关键技术指标 2. 数据准备2.1 数据收集与清洗2.2 数据…

【Linux】进程(1)进程概念和进程状态

🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:Linux 目录 前言 一、什么是进程 二、task_struct的内容 三、Linux下进程基本操作 四、父进程和子进程 1. 用fork函数创建子进程 五、进程状态 1. 三种重…

lws-minimal-ws-server前端分析

index.html index.html是前端入口 <html><head><meta charsetutf-8 http-equiv"Content-Language" content"en"/><!-- 引入js --><script src"/example.js"></script></head><body><img s…

L1-7 统一命名规范(java)

你所在的公司刚刚招收了几位程序员&#xff0c;然而这些程序员之前在不同的公司工作&#xff0c;所以他们习惯的变量命名规范可能存在差异&#xff0c;需要让他们都习惯公司要求的命名规范&#xff0c;然而这样可能会降低他们的工作效率。 你的上司找到了你&#xff0c;希望你…

Flexus应用服务器L实例、X实例以及ECS(弹性计算服务)之间的区别及其适用场景

为了更好地理解Flexus应用服务器L实例、X实例以及ECS&#xff08;弹性计算服务&#xff09;之间的区别及其适用场景&#xff0c;下面我将通过具体的例子来说明每种类型的使用情况。 1. Flexus L实例 特点: 针对高并发和负载均衡进行了优化。它可能包括更快的网络接口、更高效…