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

MySQL表的操作

@TOC

目录

MySQL表的操作

创建表

创建表案例

查看表结构

修改表

一、新增列

二、修改列类型

三、修改列名

四、修改表名

五、删除列

删除表


MySQL表的操作

表操作至少会涉及如下两类SQL语句:

  • DDL(Data Definition Language)数据定义语言:比如建表、删表、该表、新增列、删除列等。
  • DML(Data Manipulation Language)数据操作语言:比如插入记录、删除记录、修改记录等。

本篇博客讲的是表的DDL操作,也就是操作表结构的SQL语句。

创建表

创建表的SQL如下:

CREATE TABLE [IF NOT EXISTS] table_name(field1 datatype1 [COMMENT '注释信息'],field2 datatype2 [COMMENT '注释信息'],field3 datatype3  [COMMENT '注释信息']
)[CHARSET=charset_name] [COLLATE=collation_name] [ENGINE=engine_name];

说明一下:

  • SQL中大写的表示关键字,[ ]中代表的是可选项。
  • field表示列名,datatype表示列的类型。
  • CHARSET用于指定表所采用的编码格式,如果没有指定则以所在数据库的编码格式为准。
  • COLLATE用于指定表所采用的校验规则,如果没有指定则以所在数据库的校验规则为准。
  • ENGINE用于指定表所采用的存储引擎。
  • COMMENT用于对指定列添加注释信息。

使用show enginesSQL可以查看当前MySQL支持的存储引擎。如下:

可以看到我当前的MySQL默认使用的是InnoDB存储引擎,如果我建表时没有指定使用哪种存储引擎,那么就会默认使用InnoDB存储引擎。

创建表案例

在创建表之前需要先选中一个数据库,然后在数据库中创建表,这里我们先创建一个数据库。如下:

数据库创建完毕后选中数据库,在该数据库中创建一个user表,并在建表时指定采用MyISAM存储引擎。如下:

表创建完毕后在数据库的数据存储路径下的table_operation目录中,就会对应增加三个文件。如下:

说明一下:

  • 采用不同的存储引擎,创建表时所产生的文件不一样。
  • 采用InnoDB存储引擎建表,会产生对应的xxx.frm(表结构)和xxx.ibd(表数据+表索引)文件。
  • 采用MyISAM存储引擎建表,会产生对应的xxx.frm(表结构)、xxx.MYD(表数据)和xxx.MYI(表索引)文件。
     

查看表结构

使用desc 表名SQL可以查看表的结构。如下:

说明一下:

  • Field表示该字段的名字。
  • Type表示该字段的类型。
  • Null表示该字段是否允许为空。
  • Key表示索引类型,比如主键索引为PRI。
  • Default表示该字段的默认值。
  • Extra表示该字段的额外信息说明。

如果想要查看创建表时的相关细节,可以使用show create table 表名SQL。如下:

修改表

修改表的SQL如下:

ALTER TABLE table_name ADD 新增列名 新增列的属性;ALTER TABLE table_name MODIFY 列名 修改后的列属性;ALTER TABLE table_name DROP 列名;ALTER TABLE table_name RENAME [TO] 新表名;ALTER TABLE table_name CHANGE 列名 新列名 新列属性;

修改表的过程中可能会影响到表中的数据,为了演示这个过程,我们在修改表之前先在user表中插入两条数据。如下:

一、新增列

在user表中新增一列用于保存用户的照片路径。如下:

说明一下: 新增列SQL中的after表示将该列新增到哪一列之后,如果想要将新增的列放到第一列,可以将after及其之后的SQL换成not null first

新增列后可以通过desc命令确认新增成功,这时再插入一条用户记录后查看表中信息。如下:

可以看到在新增列之前插入表中的两条记录对应的path值为NULL,因此新增列后可能还需要对原来插入的记录进行修改。

二、修改列类型

将user表中password列的类型由char(30)改成char(50)。如下:

说明一下: 如果需要修改列类型后仍然保留comment字段,需要在修改时重新指定comment字段。

三、修改列名

将user表中password列的列名改成passwd。如下:

四、修改表名

将user表的表名改成employee。如下:

五、删除列

将employee表中的path列删除。如下:

注意: 删除列后,该列对应的所有数据都没有了。

删除表

删除表的SQL如下:

DROP [TEMPORARY] TABLE [IF EXISTS] table_name;

说明一下:

  • 在创建表语句中加上TEMPORARY关键字,那么服务器将创建出一个临时表,该表会在你与服务器的会话终止时自动消失。
  • TEMPORARY表的名字可以与某个已有的永久表相同,当有TEMPORARY表存在时,对应的永久表会隐藏起来(即无法访问)。
  • 为了避免重新连接后(TEMPORARY已经不存在),在未做检测的情况下调用DROP误删了对应永久表,因此在使用DROP删除临时表时需要带上TEMPORARY关键字。


将employee表删除。如下:

相关文章:

  • Go语言多线程爬虫万能模板它来了!
  • 多功能回馈式交流电子负载的应用
  • 2023.11.22 IDEA Spring Boot 项目热部署
  • 电脑技巧:推荐八个非常实用的在线网站值得收藏
  • 外贸自建站服务器怎么选?网站搭建的工具?
  • uni-app 跨端开发注意事项
  • 开发板启动进入系统以后再挂载 NFS 文件系统, 这里的NFS文件系统是根据正点原子教程制作的ubuntu_rootfs
  • 【漏洞复现】金蝶云星空管理中心 ScpSupRegHandler接口存在任意文件上传漏洞 附POC
  • 前端新手Vue3+Vite+Ts+Pinia+Sass项目指北系列文章 —— 第六章 样式格式化 (Sass配置)
  • AI一点通:卷积神经网络的输出节点大小如何计算?全连接层必要输入大小如何设置
  • 数据库知识点总结(一)
  • Go——二、变量和数据类型
  • C#面试题3
  • 马养殖场建设VR模拟实训教学平台具有灵活性和复用性
  • ES6 — ES14 新特性
  • 【知识碎片】第三方登录弹窗效果
  • Docker容器管理
  • Java读取Properties文件的六种方法
  • js中forEach回调同异步问题
  • Markdown 语法简单说明
  • React 快速上手 - 07 前端路由 react-router
  • Redash本地开发环境搭建
  • tab.js分享及浏览器兼容性问题汇总
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 码农张的Bug人生 - 初来乍到
  • 使用Swoole加速Laravel(正式环境中)
  • 微信小程序:实现悬浮返回和分享按钮
  • 我的zsh配置, 2019最新方案
  • 学习笔记:对象,原型和继承(1)
  • 用Python写一份独特的元宵节祝福
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​Linux·i2c驱动架构​
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • ###STL(标准模板库)
  • #{} 和 ${}区别
  • $.ajax()方法详解
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (算法)N皇后问题
  • (转)c++ std::pair 与 std::make
  • (转)setTimeout 和 setInterval 的区别
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .NET Core 项目指定SDK版本
  • .NET Framework杂记
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .NET开源项目介绍及资源推荐:数据持久层
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • @Async注解的坑,小心
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
  • @selector(..)警告提示