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

MySQL 库操作 | 表操作

文章目录

  • 一.MySQL库的操作
    • 1.创建数据库
    • 2.字符集和校验规则
    • 3.操纵数据库
  • 二.MySQL表的操作
    • 1.创建表
    • 2.操作表
    • 3.删除表

一.MySQL库的操作

1.创建数据库

创建数据库

创建数据库的SQL如下:

CREATE DATABASE [IF NOT EXISTS] db_name [[DEFAULT] CHARSET=charset_name] [[DEFAULT] COLLATE=collation_name];

说明一下:

  • SQL中大写的表示关键字,[ ]中代表的是可选项。
  • CHARSET用于指定数据库所采用的编码格式。
  • COLLATE用于指定数据库所采用的校验规则。

注意: 如果创建数据库时未指明数据库的编码格式或校验规则,则默认使用MySQL配置文件中对应的编码格式或校验规则,博主当前默认的编码格式是utf8,默认的校验规则是utf8_general_ci

2.字符集和校验规则

查看系统默认的字符集

通过查看MySQL系统变量variables中的character_set_database,可以得知系统默认的字符集。如下:

在这里插入图片描述

注意: 如果是在指定数据库下使用该SQL,则查看的是该数据库对应的字符集。

查看系统默认的字符集校验规则

通过查看MySQL系统变量variables中的collation_database,可以得知系统默认的字符集校验规则。如下:

在这里插入图片描述

注意: 如果是在指定数据库下使用该SQL,则查看的是该数据库对应的字符集校验规则。

查看数据库支持的字符集

使用show charsetSQL可以查看数据库支持的字符集。如下:

在这里插入图片描述

字符集编码格式和字符集校验规则的区别

  • 字符集编码格式指的是在存储数据时各个字符的底层编码,用于指定数据的存储格式。
  • 字符集校验规则是在字符集内用于比较字符的一套规则,用于对数据进行比对。

比如我们存储数据的时候是按照utf8的格式进行存储的,那么将来在对数据做比对时也必须按照utf8的格式进行比对,因为“存数据”和“取数据”的方式必须保持一致。

注意: 在对数据库当中的数据进行增删查改时,不可避免的需要进行数据的比对,因为在对数据做增删查改之前,都需要先通过比对的方式找到目标数据。

校验规则对数据库的影响

现在我们知道了,为了保证读取的数据和存储的数据是一致的,因此字符集编码格式和校验规则必须是对应的。但实际同一中字符集编码格式一般会有多种可选择的校验规则,比如utf8编码格式的校验规则有utf8_general_ci、utf8_bin、utf8_unicode_ci等校验规则。

使用不同的校验规则操作数据库中的数据可能会得到不同的结果,比如utf8_general_ci校验规则在比对数据时是不区分大小写的,而utf8_bin校验规则在对比数据时则是区分大小写的。

3.操纵数据库

查看数据库

show database

可以查看系统中所有的数据库

在这里插入图片描述

显示创建语句

show create database 数据库名

可以查看对应数据库的创建语句。如下:

在这里插入图片描述

说明一下:

  • MySQL建议SQL中的关键字使用大写,但不是必须的。
  • 数据库的名字加上反引号,是为了防止使用的数据库名与关键字冲突。
  • /*!40100 DEFAULT CHARACTER SET utf8 */不是注释,它表示当前MySQL版本如果大于4.10,则执行后面的SQL语句。

修改数据库

修改数据库的SQL如下:

ALTER DATABASE db_name [[DEFAULT] CHARSET=character_name] [[DEFAULT] COLLATE=collation_name];

说明一下:

  • 对数据库的修改主要指的是修改数据库的字符集或校验规则。

比如将数据库的字符集改为gbk,并将数据库的校验规则改为gbk_bin。

在这里插入图片描述

删除数据库

删除数据库的SQL如下:

DROP DATABASE [IF EXISTS] db_name;

删除数据库后该数据库对应的文件夹就被删除了。比如:

在这里插入图片描述

并且删除数据库后,该数据库下的所有表也都会被级联删除,因此不要随意删除数据库。

数据库备份

使用如下命令即可对指定数据库进行备份:

mysqldump -P 端口号 -u 用户名 -p 密码 -B 数据库名1 数据库名2 ...  > 数据库备份存储的文件路径

为了演示数据库备份,下面我们创建一个数据库,并在该数据库中创建两个表。如下:

在这里插入图片描述

在student表中插入两条记录。如下:

在这里插入图片描述

在teacher表中也插入两条记录。如下:

在这里插入图片描述

这时在命令行中执行如下命令即可将该数据库进行备份,并指定将备份后产生的文件存放在当前目录下。如下:

在这里插入图片描述

打开back.sql文件即可看到,文件中的内容实际就是我们在该数据库中执行的各种SQL命令,包括创建数据库、创建表、插入数据等SQL语句。如下:

在这里插入图片描述

数据库恢复

使用如下命令即可对指定数据库进行恢复:

source 数据库备份存储的文件路径

为了演示数据库恢复,我们先将刚才创建的数据库删除。如下:

在这里插入图片描述

这时让MySQL服务器执行如下命令即可对数据库进行恢复。如下:

在这里插入图片描述

实际恢复数据库的时候就是按顺序执行数据库备份文件中的SQL语句,执行完毕后数据库也就恢复出来了。如下:

在这里插入图片描述

同时该数据库下的两张表,以及表当中的数据也都恢复出来了。如下:

在这里插入图片描述

表备份

使用如下命令即可对指定表进行备份:

mysqldump -P 端口号 -u 用户名 -p 密码 数据库名 表名1 表名2 ... > 表备份存储的文件路径

比如在上述数据库中除了student和teacher表之外,还有其他的表。如下:

在这里插入图片描述

如果只想备份数据库中的student表和teacher表,这时就可以在命令行中执行如下命令,并指定将备份后产生的文件存放在当前目录下。如下:

在这里插入图片描述

这时历史上与student和teacher表相关的SQL语句,就会被保存到备份文件当中。如下:

在这里插入图片描述

表恢复

表恢复之前需要先选中一个数据库,表明需要将表恢复到哪一个数据库中,为了防止恢复出来的表与该数据库中已有的表的表名重复,一般在恢复表时会选择创建一个空的数据库,然后在该数据库中进行表的恢复。

在数据库中使用如下命令即可对指定表进行恢复:

source 表备份存储的文件路径

为了演示表恢复,我们先将刚才的数据库删除。如下:

在这里插入图片描述

这时创建一个空的数据库并在该数据库中执行如下命令即可对表进行恢复。如下:

在这里插入图片描述

当备份文件中的SQL语句执行完毕后,该数据库下就恢复出了student和teacher表,并且表当中的数据也都恢复出来了。如下:

在这里插入图片描述

查看连接情况

show processlist

查看当前连接MySQL的用户

在这里插入图片描述

说明一下:

  • Id列:一个标识,可以在MySQL中通过kill id杀死指定id的线程。
  • User列:显示当前用户,如果不是root,这个命令就只显示你权限范围内的SQL语句。
  • Host列:显示这个语句是从哪个IP的哪个端口上发出的,可用来追踪出问题语句的用户。
  • db列:当前执行的命令是在哪一个数据库上,如果没有指定数据库,则该值为NULL。
  • Command列:显示当前连接执行的命令,一般就是休眠(Sleep)、查询(Query)和连接(Connect)。
  • Time列:表示该线程处于当前状态的时间,单位是秒。
  • State列:显示使用当前连接的SQL语句的状态。
  • Info列:一般记录的是线程执行的语句,默认只显示前100个字符,如果要看全部信息,需要使用show full processlist

show processlist可以告诉我们当前有哪些用户连接到我们的MySQL,如果查出某个用户不是你正常登录的,那么很有可能你的数据库被人入侵了,以后如果发现自己的数据库比较慢时,可以用这个SQL来查看数据库连接情况。

二.MySQL表的操作

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

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

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

1.创建表

创建表

创建表的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 engines可以查看当前MySQL支持的存储引擎。如下:

在这里插入图片描述

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

创建表案例

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

说明一下:

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

查看表结构

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

在这里插入图片描述

说明一下:

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

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

在这里插入图片描述

2.操作表

修改表

修改表的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表中插入两条数据。如下:

在这里插入图片描述

  1. 新增列

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

在这里插入图片描述

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

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

在这里插入图片描述

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

  1. 修改列类型

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

在这里插入图片描述

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

  1. 修改列名

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

在这里插入图片描述

  1. 修改表名

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

在这里插入图片描述

  1. 删除列

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

在这里插入图片描述

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

3.删除表

删除表的SQL如下:

DROP [TEMPORARY] TABLE [IF EXISTS] table_name;

说明一下:

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

将employee表删除。如下:

在这里插入图片描述


本文到此结束,码文不易,还请多多支持哦!!!

相关文章:

  • 项目管理套路:看这一篇绝对够用❤️
  • 利用opencv/暗通道方法检测图像是否有雾-利用opencv/暗通道方法对深度学习目标检测算法结果进行二次识别提高准确率
  • python游戏开发pygame初步
  • vue3中引入svg矢量图
  • 【漏洞复现】Array VPN任意文件读取漏洞
  • 数字逻辑电路基础-时序逻辑电路之移位寄存器
  • 利用chart.js来完成动态网页显示拆线图的效果
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • 文件属性和路径
  • isis基础大全学习案例
  • 【SpringCloud】微服务的扩展性及其与 SOA 的区别
  • 防火墙命令行基础配置实验(H3C模拟器)
  • 为什么网上大量程序员卡35岁年龄招聘,而从来不报道测试、技术支持、售前售后工程师呢?
  • echarts 几千条分钟级别在小时级别图标上展示
  • JavaScript中Object.prototype.toString.call()、instanceOf和Array.isArray()的区别
  • 【comparator, comparable】小总结
  • 77. Combinations
  • css属性的继承、初识值、计算值、当前值、应用值
  • learning koa2.x
  • mac修复ab及siege安装
  • MobX
  • MYSQL 的 IF 函数
  • Promise初体验
  • Redash本地开发环境搭建
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 给Prometheus造假数据的方法
  • 嵌入式文件系统
  • 如何解决微信端直接跳WAP端
  • 如何设计一个微型分布式架构?
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 小程序开发中的那些坑
  • 小而合理的前端理论:rscss和rsjs
  • #微信小程序:微信小程序常见的配置传旨
  • (12)目标检测_SSD基于pytorch搭建代码
  • (C)一些题4
  • (c语言)strcpy函数用法
  • (第二周)效能测试
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (三)c52学习之旅-点亮LED灯
  • (译) 函数式 JS #1:简介
  • (转)大型网站架构演变和知识体系
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • **PHP分步表单提交思路(分页表单提交)
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .NET : 在VS2008中计算代码度量值
  • .Net 6.0 处理跨域的方式
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .Net MVC + EF搭建学生管理系统
  • .NET Project Open Day(2011.11.13)
  • .net 获取url的方法
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .Net中wcf服务生成及调用
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • /etc/motd and /etc/issue
  • @angular/cli项目构建--Dynamic.Form