当前位置: 首页 > news >正文

MySQL: ALTER

正文

在数据库管理系统(DBMS)中,DDL(Data Definition Language)、DCL(Data Control Language)、和 DML(Data Manipulation Language)是三种主要的SQL(Structured Query Language)语句类型,它们各自负责数据库的不同方面。

  1. DDL(Data Definition Language):数据定义语言,用于定义或修改数据库的结构。它主要包括以下命令:
    • CREATE:用于创建新的数据库、表、索引、视图等对象。
    • ALTER:用于修改现有数据库对象的结构,如添加、删除或修改表中的列。
    • DROP:用于删除整个数据库、表、索引、视图等对象。
    • TRUNCATE:用于删除表中的所有数据,但不删除表本身。
    • COMMENT:用于给数据库、表、列等添加注释。
    • RENAME:用于重命名数据库中的对象,如表或索引。
  2. DCL(Data Control Language):数据控制语言,用于定义数据库、表、或字段的访问权限和安全级别。它主要包括以下命令:
    • GRANT:用于授予用户或角色对数据库对象的访问权限。
    • REVOKE:用于撤销之前通过GRANT命令授予的权限。
  3. DML(Data Manipulation Language):数据操纵语言,用于检索、插入、更新和删除数据库中的数据。它主要包括以下命令:
    • SELECT:用于从数据库表中检索数据。
    • INSERT:用于向数据库表中插入新的数据行。
    • UPDATE:用于修改表中的数据。
    • DELETE:用于从表中删除数据行。

这三种语言共同构成了SQL的核心,使得用户能够高效地管理数据库中的数据。在实际应用中,DDL、DCL和DML语句的使用是密不可分的,它们相互配合,共同完成了数据库的创建、维护和管理等任务。

ALTER TABLE

在 MySQL 中,ALTER TABLE 语句用于修改表结构,但它本身并不直接支持在添加列的同时给这些新列填充多个具体的值(即,不是像 INSERT 语句那样插入数据行)。ALTER TABLE ... ADD COLUMN 只是用于添加新的列到表中,而不涉及填充数据。

如果你想要为新添加的列填充数据,你需要在添加列之后使用 UPDATE 语句来更新表中的行,或者对于新插入的行,在 INSERT 语句中指定这些列的值。

然而,如果你的意图是在添加列时给表中已存在的每一行都设置一个默认值,那么你只需要在 ADD COLUMN 语句中指定该默认值即可。这样,MySQL 会自动为新列中的每一行应用这个默认值。

例如,如果你想要给 employees 表添加一个新列 hire_date,并且想要为表中已存在的每一行都设置 hire_date 的默认值为 '1970-01-01',你可以这样做:

ALTER TABLE employees  
ADD COLUMN hire_date DATE DEFAULT '1970-01-01';

但是,如果你想要在添加多个列的同时,基于某些逻辑或条件为这些新列填充不同的值(即,不是统一的默认值),那么你需要分别进行:

  1. 使用 ALTER TABLE ... ADD COLUMN 语句添加列。
  2. 使用 UPDATE 语句基于需要填充的逻辑或条件更新这些新列的值。

例如,如果你还想要添加一个 salary 列,并根据某种逻辑(比如基于员工的职位或其他属性)为现有员工设置不同的薪资,你需要:

-- 添加新列  
ALTER TABLE employees  
ADD COLUMN salary DECIMAL(10, 2);  -- 更新新列的值  
-- 假设这里有一个简单的逻辑:所有员工薪资设为 50000  
UPDATE employees  
SET salary = 50000;  -- 或者,基于更复杂的逻辑更新薪资  
-- 例如,基于职位设置薪资  
UPDATE employees  
SET salary = CASE  WHEN position = 'Engineer' THEN 60000  WHEN position = 'Manager' THEN 80000  ELSE 50000  
END;

注意,UPDATE 语句中的条件(如 position = 'Engineer')应该基于你表中实际存在的列和值来编写。

ADD COLUMN 多列

在 MySQL 中,ALTER TABLE ... ADD COLUMN 语句通常用于一次添加一个列。但是,如果你想要一次性添加多个列,你需要在 ALTER TABLE 语句中多次使用 ADD COLUMN,每个新列之间用逗号分隔,但每个 ADD COLUMN 都需要单独的一行(尽管在某些 SQL 方言或工具中可能允许在一行内使用多个 ADD COLUMN,但在 MySQL 的标准语法中,这是不推荐的)。

下面是一个在 ALTER TABLE 语句中一次性添加多个列的示例:

ALTER TABLE employees  
ADD COLUMN column1_name datatype1 [constraint1],  
ADD COLUMN column2_name datatype2 [constraint2],  
ADD COLUMN column3_name datatype3 [constraint3];

注意,每个 ADD COLUMN 子句都是独立的,并且以逗号分隔(尽管在 ADD COLUMN 之间实际上不需要逗号,因为它们是单独的语句,但出于清晰和一致性的目的,在列出多个时添加逗号是一个好习惯)。然而,在 MySQL 中,由于语法限制,每个 ADD COLUMN 通常需要放在单独的行上。

下面是一个具体的例子

ALTER TABLE employees  
ADD COLUMN email VARCHAR(255) NOT NULL UNIQUE,  
ADD COLUMN phone_number VARCHAR(20),  
ADD COLUMN hire_date DATE DEFAULT '1970-01-01';

在这个例子中,employees 表被添加了三个新列:

  • email 列,数据类型为 VARCHAR(255),不允许空值(NOT NULL),并且所有值都必须是唯一的(UNIQUE)。
  • phone_number 列,数据类型为 VARCHAR(20),没有额外的约束(尽管它可能应该有一个 NOT NULL 约束,具体取决于你的需求)。
  • hire_date 列,数据类型为 DATE,默认值为 '1970-01-01'(这可能不是最佳实践,因为 1970-01-01 通常是 UNIX 时间戳的起点,你可能想要一个更有意义的默认值,或者确保在插入新记录时提供具体的日期)。

--end--

相关文章:

MySQL: ALTER

正文 在数据库管理系统(DBMS)中,DDL(Data Definition Language)、DCL(Data Control Language)、和 DML(Data Manipulation Language)是三种主要的SQL(Struct…...

微前端技术预研 - bit初体验

1.关于什么是微前端以及微前端的发展, 当前主流框架以及实现技术等,可参考这篇总结(非常全面), 微前端总结:目录详见下图 本文内容主要针对bit框架的实时思路以及具体使用。 1.什么是Bit? Bit 是可组合软件的构建…...

对象关系映射---ORM

一、什么是ORM? ORM(Object Relational Mapping),即对象关系映射,是一种程序设计技术,用于在面向对象编程语言中实现对象和关系型数据库之间的映射。 二、ORM是干什么的? ORM 的主要目的是简…...

Django REST Framework(十七)Authentication

1.认证Authentication 在 Django REST framework (DRF) 中,可以在配置文件中配置全局默认的认证方案。常见的认证方式包括 cookie、session、和 token。DRF 提供了灵活的认证机制,可以在全局配置文件中设置默认认证方式,也可以在具体的视图类…...

FPGA开发——数码管的使用

一、概述 在我们的日常开发中,数字显示的领域中用得最多的就是数码管,这篇文章也是围绕数码管的静态显示和动态显示进行一个讲解。 1、理论 (1)数码管原理图 在对数码管进行相关控制时,其实就是对于8段发光二极管和…...

什么是网络安全等级保护测评服务?

等保测评 依据国家网络安全等级保护制度规定,按照有关管理规范和技术标准,对非涉及国家秘密的网络安全等级保护状况进行检测评估。定级协助 根据等级保护对象在国家安全、经济建设、社会生活中的重要程度,以及一旦遭到破坏、丧失功能或者数据…...

基于深度学习的多模态情感分析

基于深度学习的多模态情感分析是一个结合不同类型数据(如文本、图像、音频等)来检测和分析情感的领域。它利用深度学习技术来处理和融合多模态信息,从而提高情感分析的准确性和鲁棒性。以下是对这一领域的详细介绍: 1. **多模态情…...

Glove-词向量

文章目录 共现矩阵共线概率共线概率比词向量训练总结词向量存在的问题 上一篇文章词的向量化介绍了词的向量化,词向量的训练方式可以基于语言模型、基于窗口的CBOW和SKipGram的这几种方法。今天介绍的Glove也是一种训练词向量的一种方法,他是基于共现概率…...

Plugin ‘mysql_native_password‘ is not loaded`

Plugin mysql_native_password is not loaded mysql_native_password介绍1. 使用默认的认证插件2. 修改 my.cnf 或 my.ini 配置文件3. 加载插件(如果确实没有加载)4. 重新安装或检查 MySQL 版本 遇到错误 ERROR 1524 (HY000): Plugin mysql_native_passw…...

Hive数据类型

原生数据类型 准备数据 查看表信息 加载数据 查看数据 复杂数据类型-数组 准备数据 查看数据 ​优化 复杂数据类型-map 准备数据 查看数据 复杂数据类型-默认分隔符 准备数据 查看数据 原生数据类型 准备数据 -- 1 建库 drop database if exists db_1 cascade;…...

OSI七层网络模型:构建网络通信的基石

在计算机网络领域,OSI(Open Systems Interconnection)七层模型是理解网络通信过程的关键框架。该模型将网络通信过程细分为七个层次,每一层都有其特定的功能和职责,共同协作完成数据从发送端到接收端的传输。接下来&am…...

MSYS2下载安装和使用

Minimalist GNU(POSIX)system on Windows,Windows下的GNU环境。 目录 1. 安装 2. pacman命令 3. 配置vim 4. 一些使用示例 4.1 编译代码 4.2 SSH登录远程服务器 1. 安装 官网下载:https://www.msys2.org/ 双击.exe文件&am…...

机器学习中的决策树算法——从理论到实践完整指南

决策树在机器学习中的应用与原理 1. 介绍1.1 定义和基本概念1.2 决策树在机器学习中的角色和重要性 2. 决策树的结构2.1 节点、分支、叶子节点的定义和功能2.1.1 节点2.1.2 分支2.1.3 叶子节点 2.2 树的深度和宽度的影响2.2.1 树的深度2.2.2 树的宽度 3. 决策树的构建方法3.1 基…...

FFplay介绍及命令使用指南

😎 作者介绍:欢迎来到我的主页👈,我是程序员行者孙,一个热爱分享技术的制能工人。计算机本硕,人工制能研究生。公众号:AI Sun(领取大厂面经等资料),欢迎加我的…...

php实现动态登录

简介: 效果:通过前端页面的注册,通过MD5将密码加密,发送到数据库,通过验证数据库的内容实现登录,以及各种保证安全的措施 实验环境:phphtmlcssmysql数据表,使用html css设计注册&a…...

Servlet2-HTTP协议、HttpServletRequest类、HttpServletResponse类

目录 HTTP协议 什么是HTTP协议 HTTP协议的特点 请求的HTTP协议格式 GET请求 POST请求 常用的请求头说明 哪些是GET请求,哪些是POST请求 响应的HTTP协议格式 常见的响应码说明 MIME类型说明 HttpServletRequest类 作用 常用方法 如何获取请求参数 po…...

探索数据的内在世界:sklearn中分层特征聚类标签的可视化技术

探索数据的内在世界:sklearn中分层特征聚类标签的可视化技术 在机器学习中,聚类是一种探索数据结构的强大工具。对于具有分层特征的数据,如文本、时间序列或分类标签,聚类结果的可视化可以提供深入的洞见。本文将详细介绍如何在s…...

airtest定位方法

airtest定位方法 最近遇到一个比较新颖的airtest方法,分享给大家。一键三连; airtest是一款用于自动化测试的Python库,被广泛应用于移动应用和游戏的测试中。在进行自动化测试时,定位元素是非常重要的一步,因为只有准…...

排列组合 n*(n-1)*(n-m+1)

n*(n-1)*(n-m1)/m! --# 组合 n*(n-1)*(n-m1)/m! local function get_combinations(n,m) c 1 c0 1 for i 1,m do c c*(n-i1) c c/i end return math.floor(c) end print(get_combinations(10,6)) 打印出来为:210...

Python面试整理-数据处理和分析

在Python中,数据处理和分析是一项非常重要的应用,得益于丰富的第三方库和工具,Python已经成为数据科学家和分析师的首选语言之一。以下是进行数据处理和分析时常用的工具和方法: 1. 数据处理 a. Pandas ● 功能: Pandas 提供了强大的 DataFrame 结构,使得数据操作和预处理…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

线程同步:确保多线程程序的安全与高效!

全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...