初识mysql数据库之基础操作

news2024/12/22 18:32:56

目录

一、库的操作

1. 创建数据库

2. 数据库的编码集

2.1 数据库的编码问题

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

2.3 创建数据库时指定字符集和校验集

2.4 校验规则对数据库的影响

3. 进入数据库

4. 确认自己当前所处的数据库

5. 修改数据库的编码集

6. 查看创建数据库时的语句

7. 库的删除

8. 库的备份和恢复

8.1 备份

8.2 恢复

9. 查看数据库连接情况

二、表的操作

1. 创建表

1.1 语法

1.2 创建实例

2. 查看表结构

3. 修改表

3.1 修改表名

3.2 新增一列

3.3 修改列的属性

3.4 删除列

3.5 修改列名

4. 删除表


一、库的操作

1. 创建数据库

最基础的创建数据库的语句是“create database (if not exists) db_name;”。在这个语句中,用()括起来的部分是代表可选项,这个可选项的意思是“如果不存在”,表示如果要创建的数据库不存在,就创建,反之则不创建。

例如我们先用create database命令创建一个数据库,然后再用create database if not exists创建同一个数据库:

此时就发出了警告,因为该数据库已经存在,无法再次创建,用这个命令一般是为了一些安全问题。 

2. 数据库的编码集

2.1 数据库的编码问题

一般来讲,在创建一个数据库时该数据库有两个编码集,分别是数据库的字符集数据库的校验集,数据的存储和读取都是需要使用特定的编码的,在数据库中也是一样。我们用什么编码集来存储数据,那么在读取数据时就要采用同样的编码集

在使用数据库时,我们需要向数据库中存储数据,要存储数据就需要使用特定的编码集进行编码,这就是数据库的编码集的作用。而当我们未来在使用时,势必要涉及到对数据的查找,要查找数据就必须要有能对数据进行比较的能力。因此我们需要采用和存储时相同的编码集对数据进行读取和比对,这样才能正确的找到数据。

简单来讲,数据库的字符集是用于数据库未来存储数据的;而数据库的校验集,则是用来支持数据库使用同样的编码集进行字段比较的

由此我们可以得出一个结论——数据库无论对数据做任何操作,都必须保证存储和读取时的编码一致。如果使用的编码集不同,例如存储的时候用utf8,读取的时候用gbk,就可能导致出现乱码。

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

查看系统默认字符集,输入“show variables like 'character_set_database';”命令:

可以看到,当前mysql中使用的默认字符集就是utf8。

如果要查看数据库的校验集,输入"show variables like 'collation_database';"命令:

可以看到,当前mysql中使用的校验集就是utf8_general_ci的。

当然,我们也可以执行“show variables like 'collation_%';”命令查看一些其他的校验场景的校验集:

这里面就展示了连接时、数据库和服务的校验场景,都是使用的utf8_general_ci。大家的mysql中使用的编码集可能与图中有所差异,因为我这里的编码集是在配置文件中配置过的,指定使用了utf8的。如果你的mysql没有配置或配置不一样,这里的结果也就不一样。

当然,大家也可以执行“show charset”命令查看mysql中支持的所有字符集集,或使用“show collation;”命令查看mysql中支持的所有校验集,这里就不再演示了。

2.3 创建数据库时指定字符集和校验集

如果我们在创建数据库时没有指定字符集或校验集,那么这个数据库就默认使用配置文件中指定的字符集和校验集:

如果你想查看你的数据库使用编码集,可以到该数据库的配置文件中看。上文中讲过,数据库的本质其实就是一个目录,所以这个配置文件就在对应数据库的目录的下一级,名字一般是"db.opt"。通过上面的两张图就可以看到,不带字符集和校验集时,创建的数据库就默认使用配置文件中的。

要指定字符集和校验集,可以使用charset=collate字段。例如使用“create database d2 charset=gbk;”创建一个字符集为gbk的数据库:

有人可能会奇怪,这里仅仅是指定了字符集,为什么这个数据库的校验集也改变了呢?其实是因为在mysql中默认对字符集和校验集做了匹配的,如果你修改了字符集,mysql就会自动将校验集替换为与字符集相匹配的校验集。

可以输入“show collation;”命令查看字符集与校验集的匹配关系,这里的截图并不完整,只是其中的一部分。

当然,你也可以使用charset和collate命令指定字符集和校验集:

 同样的, 我们也可以为数据库单独指定一个校验集,此时mysql也同样会自动匹配字符集:

2.4 校验规则对数据库的影响

为了方便看到不同校验集对数据库的影响,在这里我们创建两个数据库,校验集分别为utf8_general_ciutf8_bin前一个校验集不区分大小写后一个校验集区分大小写。并且这两个校验集都匹配utf8字符集。

创建好数据库后我们可以再向这两个数据库中创建一个表,表内插入数据。上文中讲过,存储进数据库的数据会按照数据库字符集进行存储,按照校验集进行读取,而表是存在于特定数据库内的,所以它的存储和读取时的编码集就和数据库的编码集是一样的。

首先使用“create database d1 collate utf8_general_ci;”"create database d2 collate utf8_bin;”创建两个采用不同校验集的数据库:

创建好后,我们再使用"use database;"数据库名;”进入这两个数据库,然后用"create table if not exists person (name varchar(20));"命令分别创建一个表:

表创建好后,首先向b1数据库中的表插入多个字母数据:

这个表中插入了多个字母数据,但是并没有截全。 

然后执行select  * from person;命令,查看表中的数据:

上图就是d1的表中的数据。然后再执行select * from person where name='a';命令,搜索a数据:

在搜索的结果中,就将a和A全部显示了。

重复上面步骤,在数据库d2中也创建表和添加同样的数据然后搜索a:

可以看到,d2中的表就只显示了a。原因也很简单,数据库d1的校验集采用的是utf8_general_ci,不会区分大小写;而d2采用的则是utf8_bin,会区分大小写

这个区别不仅仅在查找数据上,排序数据时也会有所区别。分别在这两个数据库中执行select * from person order by name;命令,对表中的数据按照name进行排序:

很明显可以看到,不区分大小写的d1数据库的排序时的升序就是大小写放在一起的,而区分大小写的d2数据库的排序就是大小写分开排序的。

3. 进入数据库

要操作一个数据库的内容,就需要进入数据库。执行"use 库名;”即可进入数据库:

4. 确认自己当前所处的数据库

有时我们在对数据库做操作时,可能突然忘了自己当前在哪个数据库,此时就可以执行“select database();”命令查看当前所处的数据库:

5. 修改数据库的编码集

如果想修改数据库的编码集,可以使用校验“alter database 库名 charset=字符集 collate=集”进行修改:

6. 查看创建数据库时的语句

如果想查看你当初创建数据库时用的语句,可以执行“show create databse 库名;”查看:

此时就可以看见我们当初是用什么语句创建数据库的了。注意,这里面的创建语句后面带有一段话,这段话并不是注释,而是表示如果当前mysql版本大于4.01,就执行这个语句。这个语句大家仔细观察的话就可以发现,它就是在设置字符集。设置的是你自己指定的字符集。这个d2采用的字符集是gbk,所以这里这句话就也是gbk。

7. 库的删除

要删除数据库很简单,直接使用“drop database 库名;”即可。

注意,当我们删除一个数据库后,在数据库内部就无法找到这个数据库了,同时对应数据库内的所有文件和数据都会被删除。所以,在一般情况,千万不要随意删除数据库

8. 库的备份和恢复

8.1 备份

我们之前说过,数据库在linux中其实就是一个目录,所以如果你想备份数据库,一个简单粗暴的方法就是直接将这个目录打包备份。但是这种方法是有问题,的因为数据库在备份时不仅需要数据库内的数据,还可能需要一些其他的东西。如果直接打包目录,在未来你把这个目录重新放回到mysql中时,就很可能出各种问题。因此,这种方法可行,但非常不推荐,很容易出问题。

有时大家也可能会想对数据库重命名,但是mysql中并没有提供可以直接对数据库重命名的指令。当然,有人可能会说既然数据库本质是目录,那直接在linux上用mv命令重命名不就行了。确实可以,但是非常不推荐这么做,因为这样做可能会导致数据库在使用时出现各种各样的问题。

因此,一般遇到需要重命名时,比较推荐使用mysql提供的备份工具来重命名,即在恢复数据库的时候重新命名

要对数据库做备份就需要使用mysqldump工具,这个工具在安装好mysql时就已经自动安装了。在备份时,首先在linux下选择一个存放备份数据库的目录,然后执行“mysqldump -P端口号 -u root -p -B 库名 > 文件名”命令:

上图中的命令的意思是用mysqldump工具,将3306接口下的root账户中的d1数据库的内容打包并重定向到d1.sql文件中。此时就完成了数据库的备份。

执行vim命令,查看这个备份文件中的内容:

这里的内容虽然有些我们看不懂,但是可以发现, 这个文件中除了数据库内的数据,还包含了我们当初在该数据库中执行的有效操作。这就是说,数据库在备份后,备份文件中除了数据库的有效数据外,还包含我们曾经对这个数据库执行的有效操作等内容。这也就是为什么非常不推荐大家直接复制目录。

如果你只想备份数据库内的某张表,而不是数据库整体,同样是执行上面的指令,只是在数据库后面加上表名而已。

8.2 恢复

为了演示恢复数据库,在这里就先将原来的数据库删除。

要恢复数据,就在mysql中执行“source 备份数据路径;”命令即可。

可以看到,此时就成功将数据库恢复了。

如果你想在恢复数据库时修改数据库的名字,那么就需要你在备份数据库是不要带上“-B”选项。不带该选项的话,要恢复数据库就要求先创建一个空的数据库,然后使用数据库,再使用source来还原。

简单来讲,不带-B其实就是让数据库在备份时不备份创建数据库时的语句

当然,虽然这种方式可以修改数据库的名字,但是非常不推荐随意修改数据库的名字,因为一旦你修改了数据库的名字,上层应用的依赖关系就会被破坏,无法通过它保存的数据库名字找到对应的数据库,进而出现各种错误。

9. 查看数据库连接情况

数据库同时可以供很多人一起使用。如果你想查看当前的数据库有哪些人在使用,使用"show processlist;"命令即可查看:

二、表的操作

1. 创建表

1.1 语法

创建表的语法如下:

在这里面,create table是主语句

table_name是表的名字。表中的内容需要放在()里面。

field表示列名datatype则表示列的类型

character set表示字符集collate表示校验集或者说校验规则engine表示存储引擎。 

在这里面的字符集,校验规则和存储引擎都可以不写。如果不写就使用配置文件中指定的内容。

在datatype的后面还可以接上comment '注释',用于标识该列的内容是什么,这个注释会被存放进表的创建信息中。

1.2 创建实例

要创建表,首先要先创建一个数据库,这里就不再演示了,上文中已经介绍了如何创建数据库。

为了方便演示,这里就创建一个带有comment和自行指定了字符集能内容的表。

在上面创建表时,在create table后面加的if not exists是可选项,可写可不写。包括后面的字符集等内容也是。在这里字符集采用的是另一种书写方式,和上面的图是一样的效果。

2. 查看表结构

如果你不知道自己在哪个数据库里面,可以使用select database();命令来查看你在哪个数据库中

上图就表示我当前在d1数据库中。

如果你想查看你所在的数据库中存在哪些表,则使用show tables;命令即可。

而如果你想看这个表的详细信息,例如有哪些列,这些列的属性是什么,就可以使用“desc 表名称;”查看:

但是这样看的话你可能不知道这些表中的列代表什么意思。此时你就可以执行“show create table 表名称 \G”命令,以格式化的方式查看你在创建这个表时的信息

这个命令就可以将你当初创建表时使用的语句展示出来。如果这里的详细信息和你自己写的有点区别也不用奇怪,因为数据库会将这些信息进行优化后再记录起来。所以拿出来时的信息就是优化过后的。

至于上面的表结构中后面的如NULL、Key等内容在这里就先不解释,到后面的内容中再解释。

3. 修改表

在实际使用中,我们可能会遇到需要修改表的结构,比如字段名字、字段大小、字段类型等等内容,也可能遇到需要添加字段或删除字段等情况。遇到这些情况时,就需要对表进行修改。在这里就分为几个情况来介绍如何修改表。

在修改表时,使用的指令的主语句都带有“alter table”

3.1 修改表名

要修改表名,使用“alter table 表名 rename to 新表名;”即可:

3.2 新增一列

要新增一列,使用“alter table 表名 add 列名 数据类型 after 列名;”即可。

在上图的指令中就表示,在user这个表的birthday后面添加一个名字为age,数据类型为char(6),注释为年龄的列。

3.3 修改列的属性

在当前我们有一个user表,里面的列的属性如下:

再执行show create table user \G命令查看详细信息:

注意,此时它里面的age列是有注释的。

执行“alter table user modify age char(2);”命令,将user表里面的age的数据类型修改为char(2):

然后再查看它的详细信息:

 可以看到,age的数据类型确实被修改了。此时在去查看这个表的创建时的信息:

可以看到,创建时的信息内的age列也被修改了。这就说明修改列的属性时还会将创建信息也一并修改

3.4 删除列

要删除一列,执行"alter table 表名 drop 列名;"命令即可。

在删除列时,不仅会删除列,还会将这一列中保存的数据全部删除,所以执行删除时要格外小心,不要误删。

3.5 修改列名

要修改列名,则需要执行"alter table 表名 change 列名 新列名 属性;"命令。

注意,在mysql中修改列名时,必须要将这个列的其他属性也一并带上,所以与其叫修改列名,不如叫重置列名。因此,如果你在修改列名是不想改变它的属性,比如数据类型,注释等内容,你可以用"show create table 表名 \G"命令查看这个表的创建时的信息,然后找到对应的列的属性,将那些属性复制过来直接放到修改列名的命令后面即可。

4. 删除表

要删除一个表很简单,执行“drop table (if exists) 表名;”命令即可。在这个指令中用()括起来的部分可写可不写。 

if exists的作用是判断是否存在这个表,存在就删除,不存在就警告。

虽然上面我们将了关于列的删除、修改列名、修改列的属性等等内容,但大家在实际中最好尽量不要去执行这些操作,因为一旦你执行了这些操作,那么依赖于这个数据库的上层程序就可能会出一些莫名其妙的错误。是很令人头疼的。

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

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

相关文章

FPGA解码MIPI视频 OV5647 2line CSI2 720P分辨率采集 提供工程源码和技术支持

目录 1、前言2、Xilinx官方主推的MIPI解码方案3、本 MIPI CSI2 模块性能及其优越性4、我这里已有的 MIPI 编解码方案5、详细设计方案6、vivado工程介绍7、上板调试验证8、福利:工程代码的获取 1、前言 FPGA图像采集领域目前协议最复杂、技术难度最高的应该就是MIPI…

现代民机“飞行管理系统(FMS)”的功能和组成

01 什么是 “飞行管理系统”? 飞行管理系统(FMS, Flight Management System),中文简称 “飞管”,是飞机航电系统的重要一员。 FMS 自 20 世纪 70 年代诞生以来,目前已有了跨越式发展。它作为航电关键系统&…

100种思维模型之质量控制理论思维模型-83

质量控制理论思维模型,又叫做戴明环思维模型,即PDCA循环思维模型。 在上世纪50年代,日本的商品和今天中国的商品一样,都是低质低价的代表,后来日本引入了戴明博士的质量控制理论,即PDCA循环理论&#xff0…

浅谈无线测温系统在高压开关柜中的应用

关注acrelzxz,了解更多详情 摘要:高压开关柜是配电系统中重要的组成部分,其主要作用是控制电荷、分配电能和开断电流等,对维持系统的稳定性有一定的保障作用。将无线测温技术应用于高压开关柜,可以实现对其进行实时的…

汽车芯片,竞逐新周期

在过去几年,SoC几乎成了智能汽车行业皇冠上的明珠。汽车芯片从通用型、分散化的单一功能芯片(MCU)快速转向集成化的多功能SoC(System on Chip)芯片。 比如,在智能座舱领域,CPU算力用于提高任务处…

国产chatgpt:基于chatGLM微调nlp分类任务

文章目录 一、源码网址1. 硬件设施:2. INT4 量化示例 二、重要的开源社区功能:网址:使用方法:利用方法:对 NLP 工作者的作用:对大模型工程师的用处: 三、重要的开源库四、提示词工程五、进行分类…

优思学院|精益生产管理七大要素

精益生产是一种有效的管理方法,通过优化生产流程和资源利用,帮助企业提高效率、降低成本,并最大程度地满足客户需求。在精益生产中,有七个关键的管理要素,它们分别是人员、资金、方法、机器设备、物料、市场及士气。 1…

避坑指南!一文帮您解决Jmeter录制chrome操作过程中遇到的问题!

Jmeter录制脚本原理 脚本录制时,Jmeter作为代理网关,通过监听某个端口,来捕获监听端口的报文信息,对抓取到的请求信息和响应信息进行转换为对应的行为函数。我们这里以设置chrome代理为例,然后使用jmeter进行脚本录制…

【方法】ZIP分卷压缩文件如何解压?

有时候文件太大,我们在压缩ZIP文件时会使用分卷压缩。 那后期想要解压ZIP分卷文件,要如何解压呢?不清楚的小伙伴,可以跟着小编来看看哦。 在解压ZIP分卷压缩文件之前,要先确保所有的分卷压缩包都存放在一个文件夹里&…

HTML5的新特性有哪些?

HTML5是近年来Web开发标准最巨大的飞跃。与以前的版本不同,HTML5并非仅仅用来表示Web内容,它的新使命是将Web带入一个成熟的应用平台,在HTML5平台上,视频、音频、图像、动画,以及同计算机的交互都被标准化。 HTML5在以…

大厂可能会问的那些思维题和技术点

精选大厂可能会问的那些思维题和技术点 一、题目一1.1、思路:1.2、代码实现 二、题目二三、const 的含义及实现机制, ,比如 : const int i, 是怎么做到 i 只可读的? ?四、到商店里买 200 的商品返还 100 优惠券( ( 可以在本商店代替现金) ) 。请问实际上折扣是多少…

6-js基础-4

JavaScript 基础 - 4 理解封装的意义,能够通过函数的声明实现逻辑的封装,知道对象数据类型的特征,结合数学对象实现简单计算功能。 函数综合案例 函数 理解函数的封装特性,掌握函数的语法规则 函数的基本使用 函数: 是可以被重复…

JavaScript的for循环学不明白怎么办?

💂 个人网站:【海拥】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 目录 前言for循环的基本语法…

Apikit 自学日记:自动生成 API 文档

功能入口:API管理应用 / 选中某个项目 / 其他菜单 / 数据源同步(API文档自动生成) 该功能可通过配置数据源信息,实现基于数据源的API信息自动生成API文档。 当前支持5种数据源:Swagger URL、apiDoc、Github、gitlab、…

【FPGA零基础学习之旅#9】状态机基础知识

🎉欢迎来到FPGA专栏~状态机基础知识 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒🍹 ✨博客主页:小夏与酒的博客 🎈该系列文章专栏:FPGA学习之旅 文章作者技术和水平有限,如果文中出现错误,希望大家能指正…

MAC电脑使用技巧

Mac打开根目录 /user下的文件 mac 上怎么显示隐藏的/user文件夹,有两种方法可选~~~ 1,Finder界面是,最上方,通过“前往”进入“电脑”或文件夹 先进入到需要显示隐藏文件的文件夹下 接着按Command苹果键F,在窗格上会显示搜索栏 然…

爬虫框架和库有多重要?

爬虫框架和库在网络数据提取和分析中非常重它们为开发人员提供了工具和功能,使他们能够更轻松地从互联网上抓取数据。爬虫框架和库通常提供了高效的网络请求、数据解析和存储机制,简化了爬取过程。 使用爬虫框架库有以下几个重要优势: 快速开…

探索Android Jetpack Compose的Surface组件

随着声明性 UI 框架 Jetpack Compose 的出现,Android 开发变得更加简洁和直观。在这篇博客中,我们将深入探讨其中的一项基本构建块 —— Surface 组件,了解它如何影响 UI 的显示和设计。 一、Jetpack Compose和Surface组件 二、Surface组件…

强化学习:值函数近似

例子引入 值得注意的是,之前学习的 状态值和动作值 实际上都是以表格的形式表示的,他的好处是便于直观理解与分析,但缺点是难以处理大量的数据的或连续的状态或行动空间,表现在存储和泛化能力两个方面。如下: 为了解决…

Css设置border从中间向两边的颜色渐进效果

Css设置border从中间向两边的颜色渐进效果 .list-item {border-bottom: 1rpx solid;border-image: linear-gradient(to right, rgba(0,0,0,.1) 0%, rgba(81, 110, 197, 0.76) 50%, rgba(0,0,0,.1) 100%) 1;}效果如图: