MySQL中的DDL常规操作总结

2023-11-08

MySQL中的DDL常规操作总结

相信对于一个后端开发人员来说,SQL的DML(Data Manipulation Language)操作是很熟悉的,毕竟在忙于写业务代码的同时,对数据操作最多的就是增加(Create)、检索(Retrieve)、更新(Update)和删除(Delete)。但是由于经常使用DML而造成对DDL(Data Definition Language)使用过少,以至于有时候需要对库、表、列等对象操作时,常常记不清该用哪个SQL语句。因此Mysql总常规的DDL操作总结一下。



前言

由于健忘和不常使用DDL,导致很多时候涉及到对表或者库的结构操作时,经常想起不起应该用哪个SQL进行操作,为此为了不再每次都找度娘,在此篇日志总结一下常用的DDL操作。


一、DDL操作库

  1. 新建数据库 CREATE DATABASE data_base_name;

例如创建一个名为menagerie的数据库:CREATE DATABASE menagerie DEFAULT CHARACTER SET utf8;

  1. 选择使用某个库 USE data_base_name;

例如使用menagerie数据库:USE menagerie;

  1. 删除指定库 DROP DATABASE data_base_name;

例如删除menagerie数据库: DROP DATABASE menagerie;

  1. 查看现存所有库 SHOW DATABASES;
  2. 查看显示指定库 SHOW DATABASES LIKE data_base_name;

例如查看以m开头的库:SHOW DATABASES LIKE ‘m%’;

  1. 修改指定库默认字符集 ALTER DATABASE data_base_name DEFAULT CHARACTER SET utf8;

例如修改库menagerie的字符集为utf8:ALTER DATABASE menagerie DEFAULT CHARACTER SET utf8;

二、DDL操作表(表、字段、索引操作)

  1. 新建表 CREATE TABLE table_name;

例如创建一个名为table_name的表,设置默认存储引擎INNODB,默认字符集为utf8:
DROP TABLE IF EXISTS table_name;
CREATE TABLE table_name(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT ‘主键’,
name VARCHAR(20) NOT NULL COMMENT ‘姓名(不能为空)’,
phone CHAR(11) DEFAULT NULL COMMENT ‘手机号(默认为NULL)’,
hobby VARCHAR(255) DEFAULT NULL COMMENT ‘爱好(默认为NULL)’,
UNIQUE INDEX unique_phone_index(phone) COMMENT ‘创建唯一索引’,
INDEX name_index(name) COMMENT ‘为name字段创建普通索引’
)ENGINE=INNODB DEFAULT CHARSET=utf8;

  1. 查看表结构 DESCRIBE table_name;

例如查看表table_name的结构:DESCRIBE table_name;

  1. 删除指定表 DROP TABLE table_name;

例如删除表为table_name的表:DROP TABLE table_name;

  1. 查看某个库下现存的表 SHOW TABLES;
  2. 重命名表名 ALTER TABLE old_table RENAME new_table; 或者 RENAME TABLE old_table TO new_table;

例如将table_name重命名为merge_table:
ALTER TABLE table_name RENAME merge_table; 或者 RENAME TABLE table_name TO merge_table;

  1. 查看指定表存在的所有索引 SHOW KEYS FROM table_name;

例如查看表名为table_name所存在的索引: SHOW KEYS FROM table_name;

  1. 修改表默认存储引擎 ALTER TABLE table_name ENGINE = INNODB;
  2. 添加(或修改)表格注释 ALTER TABLE table_name COMMENT = ‘注释’

例如为名为table_name的表增加注释,注释该表是一个测试表:
ALTER TABLE table_name COMMENT = ‘测试表’;

  1. 更改表默认字符集 ALTER TABLE table_name CHARCTER SET = 字符集;

例如将表名为table_name的表默认字符集改为uft8mb4: ALTER TABLE table_name CHARCTER SET = utf8mb4;

  1. 更改某列名字但是不更改其定义 ALTER TABLE table_name RENAME COLUMN old_column_name TO new_column_name

例如将名为table_name的表将name字段改为alias: ALTER TABLE table_name RENAME COLUMN name TO alias;

  1. 更改某列定义但是不更改其名字 ALTER TABLE table_name MODIFY column_name column_type;

例如更改table_name的name字段为VARCHAR(100)并且不能为空:
ALTER TABLE table_name MODIFY name VARCHAR(100) NOT NULL;

  1. 更改某列的名字和定义 ALTER TALBE table_name CHANGE old_column_name new_column_name column_type;

例如修改table_name表的字段name为alias并且类型改为char(100)不能为空:
ALTER TABLE table_name CHANGE name alias char(100) not null;

  1. 向指定表增加字段 ALTER TABLE table_name ADD COLUMN new_column_name column_type;

例如向table_name表增加一个名为sex的字段,类型为char: ALTER TABLE table_name ADD COLUMN
sex char(1) NOT NULL;

  1. 向指定表删除某列 ALTER TABLE table_name DROP COLUMN column_name;

例如删除table_name的sex列: ALTER TABLE table_name DROP sex;

  1. 向指定表中的某个字段增加索引 ALTER TABLE table_name ADD INDEX index_name(column_name);

例如给table_name表的name字段增加一个索引,索引名为name_index:
ALTER TALBE table_name ADD INDEX name_index(name);

  1. 创建索引并添加到指定表中 CREATE INDEX index_name ON table_name(column);

例如为table_name的phone字段创建唯一索引:
CREATE UNIQUE INDEX create_phone_indexs ON table_name (phone);

  1. 删除指定索引 DROP INDEX index_name ON table_name;

例如删除table_name表phone字段的唯一索引:
DROP INDEX create_phone_indexs ON table_name


总结

关于开发中常用DDL操作就总结到这里,后续遇到将会更新文章内容,如果发现有误或者有更好的建议,欢迎留言谈论。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL中的DDL常规操作总结 的相关文章

  • 使用绑定变量动态传递表名和列名

    有没有办法使用绑定变量将列名和表名动态传递给查询 这可以通过使用简单的串联运算符来完成 但我想要一种不同的方法来实现这一目标 EDIT OPEN abc cur FOR Select column name from table name
  • 如何从 tarantool 中选择有限数量的记录,就像 SQL 中的 SELECT LIMIT 一样?

    我想在 Tarantool 空间上执行选择 使用过滤和限制结果 就像我可以使用简单的 SQL 查询一样 SELECT FROM users WHERE age gt 33 LIMIT 1 我怎样才能做到这一点 可以使用 Lua 和 SQL
  • 提交ajax表单并停留在同一页面不起作用

    我想将用户的评论存储在我的数据库中 当用户提交时 我不想将他们重定向到新页面 我有以下代码 但它不起作用 我的 HTML 代码
  • 保存用户的身高和体重

    我应该如何将用户的身高和体重存储在MySQL数据库中 以便我可以使用这些信息来查找特定身高或体重内的用户 另外 我需要能够以英制或公制显示此信息 我的想法是存储以厘米为单位的身高和以公斤为单位的体重信息 我更喜欢公制而不是英制 我什至可以让
  • SQL Server到Mysql迁移(使用Mysql Workbench)数据传输错误

    我正在使用 Mysql Work bench 6 3 将数据库从 MS Sql server 2008 迁移到 Mysql 在 批量数据传输 期间出错并出现以下警告 这种情况仅发生在像 varchar char 这样的列类型上 当我尝试使用
  • 在两个以上的表上使用内联接删除查询

    我想使用两个以上表上的内联接从表中删除记录 假设我有表 A B C D 其中 A 的 pk 在所有其他提到的表中共享 然后如何编写删除查询以使用表 B 和 A 上的内联接从表 D 中删除记录 因为条件是从这两个表中获取的 我需要从 DB2
  • 在 JSP 中迭代列表对象

    我正在做一个项目来尝试自学 spring 和 struts 我目前卡在 JSP 页面上 我有一个 pojo 类 其中包含带有 getter setter 的变量 eid 和 ename 我还有一个 sql 中的表 其具有相同的值和六个填充行
  • 从 Visual Studio 调试 SQL Server 2005 中的存储过程?

    我在这里和其他地方看到很多令人沮丧的问题 但没有明确的答案 我试图让存储过程进行调试 但没有成功 客户端 VS2005或VS2008 两者都不起作用 当我从存储过程上下文菜单中选择 步入存储过程 时 我在调试窗口中看到 已被用户取消 这就是
  • 使用 JOIN 和 UNION 合并不同表中的记录

    我需要创建一个查询来组合两个表中的数据 我认为可能是 JOIN 和 UNION 的组合 在此示例中 我需要列出状态处于活动状态的所有姓名 仅一次 并将他们的葡萄酒 苏打水 晚餐 甜点和水果偏好组合起来 按姓名排序 我不确定单独的 JOIN
  • 使用存储过程访问数据可以提供哪些安全优势?

    我看到一些指南建议您通过存储过程对所有数据访问进行分层来保护数据库 我知道对于 SQL Server 您可以保护表甚至列免受 CRUD 操作的影响 例如 Logged in as sa USE AdventureWorks GRANT SE
  • 从 .frm 文件恢复 mysql 数据库

    我每周都会倾倒所有桌子以获得备份 但后来我明白它只是存储表的 frm文件 它不显示表的 MYD 和 MYI 文件 所以我只有我的数据库的 frm 文件 而且我的数据库是innodb 那么我可以用数据库中的数据获取我的数据库吗 是的 这是可能
  • 使用聚合函数时减少 Athena 扫描的数据量

    以下查询扫描 100 MB 的数据 select from table where column1 val and partition id 20190309 然而 下面的查询扫描了 15 GB 的数据 有超过 90 个分区 select
  • 一次将多个值插入MySQL [重复]

    这个问题在这里已经有答案了 谁能解释一下为什么这个 PHP MySQL 不起作用 基本上我需要从表单中一次插入大量行 因此会有多个名称字段 多个短 中 长字段等 我收到此错误 Notice Undefined variable Short1
  • MySQL 中如何使用继承?

    所以我正在读一本关于数据库设计原理的书 并读到了有关继承的章节 但我对如何在 MySQL 中将子类与其超类 连接 感到困惑 The table structure would for example look like this 那么我如何
  • SQL限制数据库中的最小值和最大值

    CREATE TABLE TBL CD CDnr int identity 1 1 CDTitel nvarchar 80 NOT NULL CDduur int CDprijs smallmoney 所以我正在创建这个表 有什么方法可以将
  • 对时间序列数据重新采样

    我有一个以毫秒为单位的时间序列列表 我想对时间序列进行重新采样并对组应用平均值 我如何在 Postgres 中实现它 重新采样 是指聚合一秒或一分钟内的所有时间戳 一秒或一分钟内的所有行形成一组 表结构 date x y z Use dat
  • 无法在 Centos 上安装 php-mysqli 扩展

    我正在尝试将 mysqli 扩展安装到 php yum install php mysqli 我收到下一个错误 Transaction Check Error file usr share mysql charsets Index xml
  • Linq-to-entities,在一个查询中获取结果+行数

    我已经看到了有关此事的多个问题 但它们已经有 2 年 或更长 的历史了 所以我想知道这方面是否有任何变化 基本思想是填充网格视图并创建自定义分页 所以 我还需要结果和行数 在 SQL 中 这将类似于 SELECT COUNT id Id N
  • 使用 GROUP 和 SUM 的 LINQ 查询

    请帮助我了解如何使用带有 GROUP 和 SUM 的 LINQ 进行查询 Query the database IEnumerable
  • SQL Server XQuery 返回错误

    我正在 SQL Server 2012 中对 XML 数据类型列执行查询 数据示例如下

随机推荐

  • 服务器中勒索病毒了

    非常重要的一点 备份好数据 异地备份
  • 多版本node的安装与切换详细操作

    多版本node的安装与切换详细操作 安装多版本node的原因 方法一 利用nvm进行管理 NVM 简介 安装前须知 卸载已安装的nodeJS nvm 的安装与使用 node 的不同版本安装及切换 方法二 通过配置环境变量 切换node时只需
  • LeetCode刷题指南(一)

    以下是我个人做题过程中的一些体会 1 LeetCode的题库越来越大 截止到目前 已经有321个问题了 对于大多数人来说 没有时间也没有必要把所有题目都做一遍 时间充裕可以随意 刷个100题左右应该就差不多了 可以考虑序号为前100多的题目
  • js编程题总结

    lazyman 实现一个LazyMan 可以按照以下方式调用 LazyMan Hank 输出 Hi This is Hank LazyMan Hank sleep 10 eat dinner 输出 Hi This is Hank 等待10秒
  • QT常见错误及解决方法

    1 error header was not declared in this scope 在使用此变量之前没有对其进行定义 2 error RtlWerpReportException failed with status code 10
  • 树莓派体验12 - 树莓派I2C接口获取温湿度

    i2c tools工具安装 apt get install i2c tools i2c tools包含如下命令 i2cdetect i2cdump i2cget i2cset 通过raspi config打开树莓派I2C 执行i2cdete
  • 30天自制操作系统学习-第14天

    1 提高分辨率 修改asmhead nas画面模式的设定 只考虑支持QEMU模拟器的显卡 设定画面模式 MOV BX 0x4101 VBE的640x480x8bi彩色 MOV AX 0x4f02 INT 0x10 MOV BYTE VMOD
  • Windows CMD 添加自定义快捷指令

    首先在想要存放快捷指令文件的位置创建一个txt文档 我放在了c盘的user文件夹下 使用vscode打开刚刚创建的txt文件 把后缀改为 bat记住要确认改成了 bat而不是 bat txt 随便写点快捷指令 可以先拿start 浏览器来测
  • 基于SSM的商城管理系统

    1 项目介绍 基于SSM的商城管理系统6拥有管理员账号 具有商品管理 会员管理 添加视频 购物车 搜索商品等功能 2 项目技术 后端框架 SSM Spring SpringMVC Mybatis 前端技术 jsp css JavaScrip
  • ResNet解决了什么问题?

    ResNet解决的根本问题是什么 相同深度的一般前向网络的解集合和resnet的解集合是相等的 所以resnet解决的并不是模型表达能力的问题 而是模型优化问题 ResNet是如何解决优化问题的 1 更平滑的解空间的流形 从文献Visual
  • 锋利的 jQuery(一)--配置jQuery、 解决jQuery和其他库的冲突

    1 配置jQuery环境 1 获取jQuery最新版本 进入jQuery的官方网站http jquery com 如图所示的右边的GRAB THE LATEST VERSION区域 下载最新的jQuery库文件 2 jQuery库类型说明
  • 【图像处理】阈值分割

    图像阈值分割 一 简介 阈值分割常用在灰度图像中 将灰度值以一定的阈值进行分割 分为0或者255 使图像的像素值只有0或者255 非黑即白 由于不同物体的像素值不同 根据设置的阈值 将图像中的物体以像素级分割出来 有利于图像的进一步处理 使
  • for /f 用法详解

    一 for f 的基本用法 提取文本信息 则是for f的拿手好戏 读取文件内容 提取某几行字符 截取某个字符片段 对提取到的内容再切分 打乱 杂糅 只要你所能想到的花样 for f 都会想方设法帮你办到 因为 for f 就是被设计成专门
  • 【零碎知识点】- 预览图片

    原理 在图片上传之前 获取到图片本地并在Web页面进行展示以达到预览到效果 PS 生成的图片地址是临时的 下次上传相同图片 该地址会改变 伪代码 获取上传图片的本地地址 function imgHandler fileInfo File c
  • 少儿开始学编程法则

    近几年 鼓励全国实施AI教育 另一方面许多名校取消了奥数加分项 转而开设信息奥赛 格物斯坦表示 少儿编程学得好 对于未来升学工作都大有裨益 为了孩子的将来 家长们都在问少儿开始学编程的合适年龄 首先我们要了解学编程到底是学什么 和大学的计算
  • Go 包依赖管理工具 —— govendor

    govendor 是一个基于 vendor 机制实现的 Go 包依赖管理命令行工具 与原生 vendor 无侵入性融合 也支持从其他依赖管理工具迁移 可以很方便的实现同一个包在不同项目中不同版本 以及无相互侵入的开发和管理 vendor 特
  • 定义一个圆类Circle,成员变量:半径 radius;成员方法:构造方法、get和set半径的方法、计算面积和周长的方法。

    1 定义一个圆类Circle 成员变量 半径 radius 成员方法 构造方法 get和set半径的方法 计算面积和周长的方法 定义圆柱和圆锥类 定义相应的变量成员和成员方法 使用以上类编 程 输出圆的面积和圆柱 圆锥的体积 class C
  • 02梯度下降

    参考 http biranda top Pytorch学习笔记004 梯度下降算法 随机梯度下降 补充 五折交叉验证 如下右图 在不同的训练集和测试集划分方法下 test MSE的变动是很大的 而且对应的最优degree也不一样 所以如果我
  • 链游开发 链游游戏开发

    链游就是指区块链技术上运作的手机游戏 使游戏玩家第一次变成手机游戏真正的主人 游戏玩家在游戏里面所具备的的武器装备是可以随意交易的NFT 不会受到游戏开发商的操纵 别的游戏开发商可以对于游戏玩家的NFT搭建新的游戏 假如之前的游戏软件开发得
  • MySQL中的DDL常规操作总结

    MySQL中的DDL常规操作总结 相信对于一个后端开发人员来说 SQL的DML Data Manipulation Language 操作是很熟悉的 毕竟在忙于写业务代码的同时 对数据操作最多的就是增加 Create 检索 Retrieve