MySQL————表维护相关低频操作总结

引言

一些对表结构的修改操作是日常数据库操作中非常低频的,这就好像盖完了一栋楼之后,很少会去动地基,不过这种情况在实际开发当中并非完全没有可能,因此,此篇博客主要总结表结构修改相关的语句。

一、备份表

如果要执行一些修改表结构的操作,建议可以先对表整体进行备份:

CREATE TABLE old_table_bak SELECT * FROM old_table;

注意 ,备份生成的表不会有主键和自增等信息,需要重新添加。

二、修改表名

两种语句:

ALTER TABLE old_table_name RENAME new_table_name;
RENAME TABLE old_table_name TO new_table_name;

三、修改字符集

推荐的字符集是 utf8编码,但在某些情况下可能还会要求使用GBK或者 GB2312等。

ALTER TABLE table_name CHARSET gbk;
# 或
ALTER TABLE table_name CHARSET gb2312;

四、清空表数据

高危操作,谨慎执行!

DELETE FROM table_name;

delete from 操作会一条一条进行删除,还有一种更快速的删除: TRUNCATE

TRUNCATE table_name;

4.1  DELETE 与 TRUNCATE 在事务中的区别

关闭自动提交,开启事务,执行 DELETE 语句。

SET autocommit = 0;
DELETE FROM emp_bak;

 再执行 ROLLBACK 语句:

ROLLBACK;

 可以成功回滚。

再次开启事务,执行 TRUNCATE 语句:

TRUNCATE emp_bak;

执行回滚,ROLLBACK,但是数据仍然没有恢复。可见,TRUNCATE 一旦执行,则不可逆,因此在实际工作中,一定要慎用该SQL。 

五、删表

高危操作,谨慎执行!

DROP TABLE IF EXISTS table_name;

六、修改表字段

6.1 修改字段类型

将表中的某个字段的类型修改,并且设置为非空:

ALTER TABLE table_name MODIFY column_name VARCHAR(50) NOT NULL;

6.2 修改字段名字

将表中的某个字段名称修改,并且设置为非空:

ALTER TABLE table_name CHANGE old_column_name new_column_name CHAR(30) NOT NULL;

实际上,MODIFY 和 CHANGE 的区别并不十分明显。

MODIFY 主要用来修改字段属性和约束,无法重命名字段。

CHANGE 主要用来修改字段的名称,可以同时修改属性和约束,但前提是必须要进行重命名操作,如果不希望修改名称又想用CHANGE 关键字,那么可以重命名为旧名称,即:

ALTER TABLE table_name CHANGE old_column_name old_column_name CHAR(30) NOT NULL;

另外注意,NOT NULL 非空约束在不写的情况下是会变为允许为NULL  的。因此,如果你想修改某个字段的类型或者名称,但不想修改 非空约束,那么就必须在修改语句中加 NOT NULL ,否则该字段将被置为允许为 NULL

6.3 添加字段

在表最后追加一个字段,默认为NULL:

ALTER TABLE table_name ADD new_column SMALLINT DEFAULT NULL;

在表中指定位置新增一个字段:

ALTER TABLE table_name ADD new_column VARCHAR(50) DEFAULT NULL COMMENT '品类编号' AFTER id;

在表头加入一个新字段:

ALTER TABLE table_name ADD new_column VARCHAR(50) DEFAULT NULL FIRST;

6.4 删除字段

ALTER TABLE table_name DROP column_name;

七、主键的维护

7.1 删除主键约束和自增

删除主键之前要确保该主键是非自增的,否则无法删除主键,我们使用AUTO_INCREMENT 来约束自增,和 NOT NULL一样,如果不写,那么就会变为非自增

ALTER TABLE table_name MODIFY id INT NOT NULL;

然后删除主键约束:

ALTER TABLE table_name DROP PRIMARY KEY;

7.2 添加主键和自增

除了在建表的时候指定主键和自增,我们还可以通过下面的方式指定主键和自增:

ALTER TABLE table_name ADD PRIMARY KEY (id);
ALTER TALBE table_name MODIFY id INT NOT NULL AUTO_INCREMENT;

我们也可以将主键和自增一起指定:

ALTER TABLE table_name MODIFY id INT NOT NULL AUTO_INCREMENT, ADD PRIMARY KEY (id);

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

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

相关文章

JVM006_类加载的过程

类加载 类加载时机 类加载的过程 新术语 类加载器 简单的理解为将类转换为二进制流的类或接口。 数组的元素类型 数组去掉所有维度的类型。 数组的组件类型 数组去掉一个维度的类型。 基本块 按照控制流拆分的代码块。 1. 加载 加载是类加载过程的一个阶段。加载阶段主…

服务端开发——云服务器的端口转发设置(SSH隧道)

引言 本篇博客介绍端口转发的知识,并详细阐述操作和设置步骤。这是因为在实际工作中,会有很多企业从安全的角度考虑,为线上或重要的服务器设置一个跳板机(堡垒机),避免远程开发人员直接操作,是…

JVM007_运行时栈帧结构

运行时栈帧结构 执行引擎是JVM的核心组件之一。 所有Java虚拟机的执行引擎输入输出都是一致的:输入的是字节码二进制流,处理过程是字节码解析执行的等效过程,输出的是执行结果。 JVM以方法作为作基本的执行单元。“栈帧”是用于支持虚拟机进…

Shiro————核心设计思想

引言 以此篇博客为引,开启一个新的专栏分类——Shiro。 之前在工作中有比较快速的学习过Shiro安全框架,但经过一年的荒废,已经不是很熟悉了,通过这个系列,深入研究和学习Shiro的一些知识,填补安全管理方面…

Web应用安全————账号冻结与 Session 实时失效

引言 开篇时说些题外话,最近刚刚被公司CY,不过很快找到了下家,也同时拿到了三家公司的Offer。一周面试下来,总体感觉面试题少了,不过多了上机程序题。新公司是做外包,不过相比于上一家公司,也算…

Web应用安全————Shiro 解决会话固定漏洞

引言 承接上一篇《Web应用安全————账号冻结与 Session 实时失效》关于 session 的学习,本篇博客聚焦如何通过 shiro 解决会话固定导致的漏洞问题。 首先,没怎么接触过应用安全方面的小伙伴可能会发起疑问 - 什么是会话固定? 简单来说&…

Web应用安全————多点登录互斥

引言 在实际生活中,很多网站都做了多点登录互斥的操作,简单来说就是同一个账号,只能在一台电脑上登录,如果有人在其他地方登录,那么原来登录的地方就会自动下线,再进行操作就会弹出登录界面。 实现思路 …

Shiro————会话管理

引言 本篇博客翻译自Shiro 官方网站的 Session Manager 手册。 网页地址:http://shiro.apache.org/session-management.html Shiro 会话管理支持的特性 基于POJO/J2SE(IoC容器友好的)- Shiro 中的所有东西都是基于接口的,而且…

Linux进阶之路————磁盘查询

引言 承接《Linux进阶之路————Linux磁盘分区与挂载》,本文介绍实际生产中对于磁盘的监控和查询。 一、查询磁盘整体使用情况 基本语法: df -h 该命令会显示包括我们手动挂载的磁盘,如果使用 umount 卸载磁盘,那么将不会显示…

Linux进阶之路————CentOS网络配置

引言 Linux在装机后,如果没有特殊配置,会使用动态获取 IP 地址的策略。本文描述了,虚拟机使用网络的拓扑图,以及如何通过配置,将 IP 地址固定下来,不会因为重启而失效。同时可以访问外网地址。 一、NAT模…

Linux进阶之路————进程与服务管理

引言 在Linux 中,每个执行的程序(代码)都成为一个进程,Linux 为每一个进程分配了一个唯一的 id 号 - PID。 每个进程都会对应一个父进程,而这个父进程可以复制多个子进程,例如 www 服务器。 每个进程都可…

Linux进阶之路———— RPM 与 YUM 包管理

引言 rpm 是一种用于互联网下载的打包及安装工具,它包含在某些 Linux 发行版中,生成具有 .rpm 扩展名的文件。rpm 是 redhat package manager(RedHat 软件包管理器)的缩写,类似 Windows 下的 setup.exe 文件。这一文件…

Linux进阶之路———Shell 编程入门

引言 通过 Shell 编程的学习,铺平架构师道路上的一块大砖。 Shell 在Linux 系统中的定位如下所示: 一、第一个 Shell 脚本 我们通过一个简单的 Shell 脚本来感受一下。 在 Shell 中不需要加 “;” 结尾,通过 vim 可以进行 shell 的编程工…

Linux 实操———CentOS 6 安装配置 Oracle JDK 1.8

引言 本篇博客也属于Linux进阶系列,主要讲解如何在CentOS 6 下安装并配置 JDK 8。由于通过 yum 搜索的结果都是 openjdk,而目前企业中还是以 Oracle jdk 为主,因此,操作步骤这样的。 在Oracle 官网把 jdk 1.8 下载下来&#xff…

Linux 实操———CentOS 6 安装配置 Tomcat

引言 Linux下安装Tomcat。 一、下载、传输与解压 同《Linux 实操———CentOS 6 安装配置 Oracle JDK 1.8》一样,前期都是先在远程机上下载压缩包,然后通过远程终端,将压缩包放在 Linux 的 opt 目录下,然后解压。 下载地址是T…

Spring Boot 实用开发技巧————Eclipse 远程调试

引言 在之前的开发当中,都会进行本地项目启动,然后向本地服务发起请求来进行 Debug 调试代码,这也是开发人员最常见的调试操作。但是当项目逐渐成型,慢慢的将各个模块部署到服务器后,调试的手段可能就仅仅剩下查看执行…

Linux 实操———— Shell 远程执行命令

引言 目前,开发人员的部署方式是,将项目打包(Maven 打包) 然后将 生成的 jar 包等文件,通过Xshell 等终端工具手动传输到远程服务器上,然后再通过在终端执行远程服务器上的 shell 脚本来启动服务。 本篇博客聚焦这样一种解决方案…

Spring Boot 设置 ASCII banner 艺术字

引言 无意中看到Spring boot 项目的 resources 目录下有一个 banner.txt ,打开一看,居然是ASCII 字符画。于是兴起,简单研究了一下。 Spring boot 可以加载 resources 目录下的 banner.txt 文件,将字符画在启动之初输出到日志或…

MySQL 基础 ———— 分组查询

引言 承接上一篇《MySQL 基础 ————高频函数总结》,本篇单独针对分组查询进行简单的总结和归纳,并为后续更为复杂的DQL 语句做好铺垫。 查询语句: SELECT AVG(salary) FROM teacher; 实际上是以全表的 salary 字段来求平均值。但是在实…

MySQL 基础 ———— 连接查询

引言 本篇文章承接《数据库与SQL语句》专栏,进入DQL的重要环节,可以说,这一部分的内容应该占据SQL语言的大部分使用场景。 本篇的连接查询知识,和后面的一些重要的查询知识总结,共同构成了在工作中80%的MySQL应用场景…