【MySQL】对表结构进行增删查改的操作

表的操作

  • 前言
  • 正式开始
    • 建表
    • 查看表
      • show tables;
      • desc xxx;
      • show create table xxx;
    • 修改表
      • 修改表名 rename to
      • 对表结构进行修改
        • 新增一个列 add
      • 对指定列的属性做修改 modify
        • 修改列名 change
      • 删除某列 drop
    • 删除表 drop

在这里插入图片描述

前言

前一篇讲了库相关的操作,如果你不太懂,可以先看看上一篇:【MySQL】库的相关操作 + 库的备份和还原

本篇主要讲解对表的增删查改工作。

正式开始

建表

先给出这张表:
在这里插入图片描述

先来创建一张表让你看看,首先创建一个数据库:
在这里插入图片描述
前面博客讲过,创建一个数据库就是在配置文件中的datadir目录下创建一个同名目录:
在这里插入图片描述
还会有一个文件来保存其字符集和校验规则的:
在这里插入图片描述

这里就不再说为啥了,不知道为啥的同学可以看这篇:数据库基本概念

在db_test中创建一张表,我这里直接给出复杂的:
在这里插入图片描述

来解释解释。

建表的时候列的列名和列类型都放在()中,列名在前,列类型在后,列类型后面跟的comment就像平时写代码的注释一样。各个列之间用,间隔,注意最后一列后面不要加,。

charset就是字符集,collate就是校验规则,engine就是存储引擎。

字符集、校验规则、存储引擎在默认情况下都是有的,字符集和校验规则如果不指明就会用数据库的默认字符集和校验规则,存储引擎在配置文件中就已经搞好了。

创建数据库的时候如果不指明数据库的字符集和校验规则就会直接用配置文件中的字符集和其对应的默认校验规则。

关于配置文件我刚刚给的那篇博客中也有,这里再给出来:
在这里插入图片描述

这里我的配置文件中字符集为utf8,默认存储引擎为InnoDB。

不过我上面创建表的时候指明了字符集、校验规则、默认存储引擎,所以就会直接按照我给出来的:
在这里插入图片描述

字符集为utf8,校验规则为utf8_general_ci,存储引擎为MyIsam。

存储引擎不同会有什么区别呢?

当前这个表创建好这个表之后会多出三个文件:
在这里插入图片描述

再来创建一个新的,存储引擎用InnoDB:
在这里插入图片描述

注:上面的完全是可以写在一行的,不过这样写起来更美观。

都是默认的,字符集utf8,校验规则utf8_general_ci,存储引擎InnoDB。

再看多了几个文件:
在这里插入图片描述

可以看到新增了两个文件。

第一个user用的是MyIsam,创建出了三个文件。
第二个用的是InnoDB,创建出了两个文件。

不同存储引擎对应磁盘文件个数是不一样的,MyIsam是3个,InnoDB是2个,后缀MY开头的就是MyIsam的文件,D表示Data,MYD后缀就MyIsam的数据文件,MYI是MyIsam的索引文件。后缀i开头的是InnoDB的文件,InnoDB是将数据和索引放在一块存的,所以文件个数不一样。后续我讲索引的博客会详谈这一点。

这里最重要的是知道create table可以创建表就行。

后面还可以加上if not exists:
在这里插入图片描述

因为前面有user2,所以不会成功的,里面的字段还是不变:
在这里插入图片描述
这里desc是查看表的一个操作,等会就说。

查看表

首先用select database()来查看你现在选中的是哪一个数据库。

在这里插入图片描述

这里就是我刚刚创建出来的数据库。

show tables;

show tables可以查看你在这个数据库中创建的所有表:
在这里插入图片描述

desc xxx;

decs xxx; 可以查看xxx表的详细信息:
在这里插入图片描述

这里面只要知道前面两列的Field、Type(其中的varchar这样的类型在下一篇讲类型的时候说)就行,后面的四个字段Null、Key、Default、Extra我也是会在后面索引的博客中再细说。

在这里插入图片描述

不过这里还有一些东西看不到,比如说注释、字符集、校验规则啥的看不到,想要看到的话用:

show create table xxx;

直接用show create table xxx; 看起来有点难受:
在这里插入图片描述

可以将;改成\G:
在这里插入图片描述

这样可以在现实的时候去掉一些不必要的字段。

上面的 show create table xxx; 可以看到创建表时候的详细信息,所以每个表的列字段属性,查看表的详细信息,现在都能看到了,但有个小问题,当时创建表的时候可不是这里 show create table xxx;显示出来的这样写的,因为mysqld会对你的指令做词法语法分析,可能你刚开始写的不太标准,它就会给你转化成更标准的写法。既然能查到,肯定也是将这些操作记录下了。

修改表

在项目实际开发中,经常修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型,表的存储引擎等等。我们还有需求,添加字段,删除字段等等。这时我们就需要修改表。

都是这样的格式:

alter table 表名 操作 ...

修改表名 rename to

把刚刚的user改成User:
在这里插入图片描述

其实不用加to也可以:
在这里插入图片描述

对应目录下文件名也会被修改:
在这里插入图片描述

对表结构进行修改

来往其中插入点数据:
在这里插入图片描述

新增一个列 add

新增一个列,假如说用来保存用户的一张图片的路径。(假如说图片在系统的某个路径下,现在不想在数据库中保存图片,而是保存图片的路径,所以新增一个列来保存路径)。

在这里插入图片描述

add就是新增一个列,其中after表示插入到哪一列的后面。

其实默认就是在最后一列插入:
在这里插入图片描述

指定:
在这里插入图片描述

注意不能插入重名的:
在这里插入图片描述

再来查看一下User的数据:
在这里插入图片描述

其中新增列的数据为空。在这个列新增之前没有这个属性,所以默认就是空,对原来的字段是不影响的。

show create:
在这里插入图片描述

可以看到新增了一列。

对指定列的属性做修改 modify

还是User:
在这里插入图片描述

比如说我要对name这一列做修改,将varchar的长度由20改为60。

在这里插入图片描述

这里将长度改长,并不会影响表中的数据:
在这里插入图片描述

再show一下:
在这里插入图片描述

可以看到注释丢了,这里改不是该一部分,而是将原来的属性字段全部覆盖掉。

修改列名 change

在这里插入图片描述
注意这里改列名和改表名要去分开,不要搞混了。
前面的rename to进行修改表名字的时候是原名在rename to前,新名在rename to后。
这里是都在change后面,原名后面跟新名。

注意不能修改成重名的:
在这里插入图片描述

删除某列 drop

还是User:
在这里插入图片描述

删掉密码那一列:
在这里插入图片描述

select:
在这里插入图片描述

可以看到整列的数据都没了。

注意,删除某一列,这一列的数据都会丢失,所以删除的时候一定要谨慎,没用的再删,或者备份一下。

到这里就完了,修改表结构就这三个操作,增删改,没有查,查是用desc、select、show create table查看整个表。

删除表 drop

直接给例子了:
在这里插入图片描述

记住,修改表和删除表轻易不要做,数据库本身在业务中是最靠近底层的,底层的东西一边,上层的东西就要跟着变,非常麻烦,表中的类属性、名称等的改变会直接决定上层要不要变,数据库名字一改,那么用到这个数据库的软件就都要改,如果出现开发到一半要改表结构,那上层的逻辑就会受影响。前期在开发前一定要把这些东西讨论清楚。

前面提到了DDL(定义)、DML(操纵)、DCL(控制),那么本篇中表的操作属于哪一个呢?
注意,表的操作都是属于定义表结构的范畴,所以是DDL。

建库、建表都是对库、表的结构做操作,并没有对表中的内容做操作,所以都是DDL。

关于表的操作,该讲的都讲了,后续会对本篇中的一些坑做补充。

到此结束。。。

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

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

相关文章

前端JS解构数组对象

// 3. 对象数组解构const arr [{username: 小明,age: 18,agw:19},{username: 小ha,age: 18,agw:19}]arr.map(item>item.age)//js结构数组对象console.log( arr.map(item>{return {aaa:item.age,bbb:item.username}}))

一家3代37台!海尔智家凭啥赢得一家人信赖?

“我,我母亲、我弟弟、我儿子,这么多年都一直在用海尔家电……”这是上海用户王晓华口中,自己一家3代人与37台海尔家电的故事。 一个家庭几代人始终如一的选择背后,实则是一个企业一如既往将用户需求放在第一位的体现。我们将视野…

098001190、098002190、098101190、098102190比例线圈放大器

0343100001、0344100101、0523100150、0353450101、035303001、0354050101、0473200050、0052010100、0063030100、0172200410、0363150101、0364100601、1027001020、1044112011、1043112010、1128022100、098001190、098002190、098101190、098102190、098201190、098202190、…

【面试经典150 | 位运算】位1的个数

文章目录 写在前面Tag题目来源题目解读解题思路方法一:循环检查二进制位方法二:位运算优化方法三:__builtin_popcount() 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…

为什么UI自动化难做?—— 关于Selenium UI自动化的思考

在快速迭代的产品、团队中,UI自动化通常是一件看似美好,实际“鸡肋”(甚至绝大部分连鸡肋都算不上)的工具。原因不外乎以下几点: 1 效果有限 通常只是听说过,就想去搞UI自动化的团队,心里都认…

JimuReport积木报表 v1.6.5 版本发布—免费报表工具

项目介绍 一款免费的数据可视化报表,含报表和大屏设计,像搭建积木一样在线设计报表!功能涵盖,数据报表、打印设计、图表报表、大屏设计等! Web 版报表设计器,类似于excel操作风格,通过拖拽完成报…

Word 插入的 Visio 图片显示为{EMBED Visio.Drawing.11} 解决方案

World中,如果我们插入了Visio图还用了Endnote, 就可能出现:{EMBED Visio.Drawing.11}问题 解决方案: 1.在相应的文字上右击,在出现的快捷菜单中单击“切换域代码”,一个一个的修复。 2.在菜单工具–>…

194. 二叉树的最近公共祖先

题目 题解 递归 def lowestCommonAncestor(root: TreeNode, p: TreeNode, q: TreeNode) -> TreeNode:if not root or root p or root q:return rootleft lowestCommonAncestor(root.left, p, q)right lowestCommonAncestor(root.right, p, q)if not left:return right…

Fourier分析导论——第5章——实数据R上的Fourier变换(E.M. Stein R. Shakarchi)

第5章 实数域ℝ上的Fourier变换 The theory of Fourier series and integrals has always had major difficulties and necessitated a large math- ematical apparatus in dealing with questions of con- vergence. It engendered the development of methods of summa…

FPGA_边沿检测电路设计

FPGA_边沿检测电路设计 边沿检测原理图波形图分析实现方法方法一:与逻辑实现方法二:或逻辑实现方法三:与逻辑实现 边沿检测原理图 由状态转移表可以看出,其转换条件中需要检测到下降沿以及上升沿,而边沿检测其原理就是…

Mybatis报错找不到参数解决之编译保留参数名称

Hi, I’m Shendi Mybatis报错找不到参数解决之编译保留参数名称 需求场景 在使用 Mybatis 的过程中,对于函数参数,通常会加上 Param 注解来给参数命名,以让 Mybatis 找到参数。 有的时候忘记添加,执行时就会报找不到参数的错误&…

Spring Security OAuth2.0 实现分布式系统的认证和授权

Spring Security OAuth2.0 实现分布式系统的认证和授权 1. 基本概念1.1 什么是认证?1.2 什么是会话?1.2.1 基于 session 的认证方式1.2.2 基于 token 的认证方式 1.3 什么是授权?1.3.1 授权的数据模型 1.4 RBAC 介绍 2. Spring Security2.1 S…