MySQL 入门使用

入门使用

1. MySQL演示使用

1. MySQL的使用演示

1. 查看所有的数据库

show databases;
  • “information_schema”是 MySQL 系统自带的数据库,主要保存 MySQL 数据库服务器的系统信息,
    比如数据库的名称、数据表的名称、字段名称、存取权限、数据文件 所在的文件夹和系统使用的
    文件夹,等等
  • “performance_schema”是 MySQL 系统自带的数据库,可以用来监控 MySQL 的各类性能指标。
  • “sys”数据库是 MySQL 系统自带的数据库,主要作用是以一种更容易被理解的方式展示 MySQL 数据库服务器的各类性能指标,帮助系统管理员和开发人员监控 MySQL 的技术性能。
  • “mysql”数据库保存了 MySQL 数据库服务器运行时需要的系统信息,比如数据文件夹、当前使用的字符集、约束检查信息,等等

为什么 Workbench 里面我们只能看到“demo”和“sys”这 2 个数据库呢?
这是因为,Workbench 是图形化的管理工具,主要面向开发人 员,“demo”和“sys”这 2 个数据库已经够用了。如果有特殊需求,比如,需要监控 MySQL 数据库各项性能指标、直接操作 MySQL 数据库系统文件等,可以由 DBA 通过 SQL 语句,查看其它的系统数据库。

2. 创建数据库

create database 数据库名;

-- 创建atguigudb数据库,该名称不能与已经存在的数据库重名。 
create database atguigudb;

3. 使用数据库

use 数据库名;

-- 使用atguigudb数据库 
use atguigudb;

说明:如果没有使用use语句,后面针对数据库的操作也没有加“数据名”的限定,那么会报“ERROR 1046
(3D000): No database selected”(没有选择数据库)

使用完use语句之后,如果接下来的SQL都是针对一个数据库操作的,那就不用重复use了,如果要针对另
一个数据库操作,那么要重新use。

4. 查看某个库的所有表

show tables;  #要求前面有use语句 

show tables from 数据库名;

5. 创建新的表

create table 表名称( 
字段名 数据类型, 
字段名 数据类型
);

-- 说明:如果是最后一个字段,后面就不用加逗号,因为逗号的作用是分割每个字段。
-- 创建学生表
create table student( 
id int,
name varchar(20)  #说名字最长不超过20个字符 
);

6. 查看表的数据

select * from 数据库表名称;

-- 查看学生表的数据 
select * from student;

7. 添加一条记录

insert into 表名称    values(值列表); 

-- 添加两条记录到student表中
insert into student values(1,'张三'); 
insert into student values(2,'李四');

报错:

mysql> insert into student values(1,'张三');
ERROR 1366 (HY000): Incorrect string value: '\xD5\xC5\xC8\xFD' for column 'name' at 
row 1

mysql> insert into student values(2,'李四');
ERROR 1366 (HY000): Incorrect string value: '\xC0\xEE\xCB\xC4' for column 'name' at 
row 1

mysql> show create table student;

字符集的问题。

8. 查看表的创建信息

show create table 表名称


-- 查看student表的详细创建信息
show create table student


-- 结果如下
*************************** 1. row *************************** 
      Table: student
Create Table: CREATE TABLE `student` ( 
 `id` int(11) DEFAULT NULL,
 `name` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 
1 row in set (0.00 sec)

-- 上面的结果显示student的表格的默认字符集是“latin1”不支持中文。

9. 查看数据库的创建信息

show create database 数据库名


-- 查看atguigudb数据库的详细创建信息
show create database atguigudb


-- 结果如下
*************************** 1. row *************************** 
      Database: atguigudb
Create Database: CREATE DATABASE `atguigudb` /*!40100 DEFAULT CHARACTER SET latin1 */ 
1 row in set (0.00 sec)

-- 上面的结果显示atguigudb数据库也不支持中文,字符集默认是latin1。 

10. 删除表

drop table 表名称;

-- 删除学生表
drop table student;

11. 删除数据库

drop database 数据库名;

-- 删除atguigudb数据库 
drop database atguigudb

2. MySQL的编码设置

1. MySQL5.7中

问题再现:命令行操作sql乱码问题

mysql> INSERT INTO t_stu VALUES(1,'张三','男');
ERROR 1366 (HY000): Incorrect string value: '\xD5\xC5\xC8\xFD' for column 'sname' at 
row 1

问题解决

  1. 查看编码命令

    show variables like 'character_%'; 
    show variables like 'collation_%';
    
  2. 修改mysql的数据目录下的my.ini配置文件

    [mysql] #大概在63行左右,在其下添加
    ...
    default-character-set=utf8  #默认字符集 
    [mysqld]  # 大概在76行左右,在其下添加
    ...
    character-set-server=utf8 
    collation-server=utf8_general_ci
    

    注意:建议修改配置文件使用notepad++等高级文本编辑器,使用记事本等软件打开修改后可能会导致文件编码修改为“含BOM头”的编码,从而服务重启失败。

  3. 重启服务

  4. 查看编码命令

    show variables like 'character_%'; 
    show variables like 'collation_%';
    
202402090102152.png
202402090102238.png
  1. 如果是以上配置就说明对了。接着我们就可以新创建数据库、新创建数据表,接着添加包含中文的
    数据了。

2. MySQL8.0中

在MySQL 8.0版本之前,默认字符集为latin1,utf8字符集指向的是utf8mb3。网站开发人员在数据库设计 的时候往往会将编码修改为utf8字符集。如果遗忘修改默认的编码,就会出现乱码的问题。从MySQL 8.0 开始,数据库的默认编码改为 utf8mb4 ,从而避免了上述的乱码问题。

5. MySQL图形化管理工具

MySQL图形化管理工具极大地方便了数据库的操作与管理,常用的图形化管理工具有:MySQL
Workbench、phpMyAdmin、Navicat Preminum、MySQLDumper、SQLyog、dbeaver、MySQL ODBC Connector。

1. 工具1. MySQL Workbench

MySQL官方提供的图形化管理工具MySQL Workbench完全支持MySQL 5.0以上的版本。MySQL Workbench 分为社区版和商业版,社区版完全免费,而商业版则是按年收费。

MySQL Workbench 为数据库管理员、程序开发者和系统规划师提供可视化设计、模型建立、以及数据库
管理功能。它包含了用于创建复杂的数据建模ER模型,正向和逆向数据库工程,也可以用于执行通常需
要花费大量时间的、难以变更和管理的文档任务。

下载地址

使用:

首先,我们点击 Windows 左下角的“开始”按钮,如果你是 Win10 系统,可以直接看到所有程序。接着, 找到“MySQL”,点开,找到“MySQL Workbench 8.0 CE”。点击打开 Workbench,如下图所示:

202402090103799_2.png

左下角有个本地连接,点击,录入 Root 的密码,登录本地 MySQL 数据库服务器,如下图所示:

202402090104289.png
202402090104290.png
202402090104803.png

这是一个图形化的界面,介绍下这个界面。

  • 上方是菜单。左上方是导航栏,这里我们可以看到 MySQL 数据库服务器里面的数据 库,包括数据
    表、视图、存储过程和函数;左下方是信息栏,可以显示上方选中的数据 库、数据表等对象的信
    息。
  • 中间上方是工作区,你可以在这里写 SQL 语句,点击上方菜单栏左边的第三个运行按 钮,就可以执
    行工作区的 SQL 语句了。
  • 中间下方是输出区,用来显示 SQL 语句的运行情况,包括什么时间开始运行的、运行的 内容、运行
    的输出,以及所花费的时长等信息。

好了,下面我们就用 Workbench 实际创建一个数据库,并且导入一个 Excel 数据文件, 来生成一个数据表。数据表是存储数据的载体,有了数据表以后,我们就能对数据进行操作了。

2. 工具2. Navicat

Navicat MySQL是一个强大的MySQL数据库服务器管理和开发工具。它可以与任何3.21或以上版本的
MySQL一起工作,支持触发器、存储过程、函数、事件、视图、管理用户等,对于新手来说易学易用。
其精心设计的图形用户界面(GUI)可以让用户用一种安全简便的方式来快速方便地创建、组织、访问和
共享信息。Navicat支持中文,有免费版本提供。下载地址

202402090106766.png
202402090106732.png

3. 工具3. SQLyog

SQLyog 是业界著名的 Webyog 公司出品的一款简洁高效、功能强大的图形化 MySQL 数据库管理工具。
这款工具是使用C++语言开发的。该工具可以方便地创建数据库、表、视图和索引等,还可以方便地进行
插入、更新和删除等操作,同时可以方便地进行数据库、数据表的备份和还原。该工具不仅可以通过
SQL文件进行大量文件的导入和导出,还可以导入和导出XML、HTML和CSV等多种格式的数据。 下载地
,读者也可以搜索中文版的下载地址。

202402090107714.png
202402090107217.png

4. 工具4:dbeaver

DBeaver是一个通用的数据库管理工具和 SQL 客户端,支持所有流行的数据库:MySQL、PostgreSQL、
SQLite、Oracle、DB2、SQL Server、 Sybase、MS Access、Teradata、 Firebird、Apache Hive、Phoenix、 Presto等。DBeaver比大多数的SQL管理工具要轻量,而且支持中文界面。DBeaver社区版作为一个免费开源的产品,和其他类似的软件相比,在功能和易用性上都毫不逊色。

唯一需要注意是 DBeaver 是用Java编程语言开发的,所以需要拥有 JDK(Java Development ToolKit)环境。如果电脑上没有JDK,在选择安装DBeaver组件时,勾选“Include Java”即可。下载地址

202402090108561.png
202402090109398.png
202402090109119.png
202402090109764.png

5. 可能出现连接问题

有些图形界面工具,特别是旧版本的图形界面工具,在连接MySQL8时出现“Authentication plugin
'caching_sha2_password' cannot be loaded”错误。

202402090110437.png

出现这个原因是MySQL8之前的版本中加密规则是mysql_native_password,而在MySQL8之后,加密规则是caching_sha2_password。解决问题方法有两种,

第一种是升级图形界面工具版本。

第二种是把MySQL8 用户登录密码加密规则还原成mysql_native_password。

第二种解决方案如下,用命令行登录MySQL数据库之后,执行如下命令修改用户密码加密规则并更新用
户密码,这里修改用户名为“root@localhost”的用户密码规则为“mysql_native_password”,密码值为
“123456”,如图所示。

-- 使用mysql数据库 
USE mysql;

-- 修改'root'@'localhost'用户的密码规则和密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'abc123'; 

-- 刷新权限
FLUSH PRIVILEGES;
202402090111670.png

6. MySQL目录结构与源码

1. 主要目录结构

MySQL的目录结构 说明
bin目录 所有MySQL的可执行文件。如:mysql.exe
MySQLInstanceConfig.exe 数据库的配置向导,在安装时出现的内容
data目录 系统数据库所在的目录
my.ini文件 MySQL的主要配置文件
c:\ProgramData\MySQL\MySQL Server 8.0\data\ 用户创建的数据库所在的目录

2. MySQL 源代码获取

首先,进入 MySQL下载界面。 这里不要选择用默认的“Microsoft Windows”,而是要通过下拉栏,
找到“Source Code”,在下面的操作系统版本里面, 选择 Windows(Architecture Independent),然后点击下载。

接下来,把下载下来的压缩文件解压,我们就得到了 MySQL 的源代码。

MySQL 是用 C++ 开发而成的,我简单介绍一下源代码的组成。

mysql-8.0.22 目录下的各个子目录,包含了 MySQL 各部分组件的源代码:

202402090114452.png
  • sql 子目录是 MySQL 核心代码;
  • libmysql 子目录是客户端程序 API;
  • mysql-test 子目录是测试工具;
  • mysys 子目录是操作系统相关函数和辅助函数;

源代码可以用记事本打开查看,如果你有 C++ 的开发环境,也可以在开发环境中打开查看。

[图片上传失败...(image-964d7e-1713457809390)]

如上图所示,源代码并不神秘,就是普通的 C++ 代码,跟你熟悉的一样,而且有很多注释,可以帮助你
理解。阅读源代码就像在跟 MySQL 的开发人员对话一样,十分有趣。

7. 常见问题的解决(课外内容)

1. 问题1:root用户密码忘记,重置的操作

  1. 通过任务管理器或者服务管理,关掉mysqld(服务进程)

  2. 通过命令行+特殊参数开启mysqld mysqld -- defaults-file="D:\ProgramFiles\mysql\MySQLServer5.7Data\my.ini" --skip-grant-tables

  3. 此时,mysqld服务进程已经打开。并且不需要权限检查

  4. mysql -uroot 无密码登陆服务器。另启动一个客户端进行

  5. 修改权限表

    use mysql;
    
    update user set authentication_string=password('新密码') where user='root' and Host='localhost';
    
    flush privileges;
    
  6. 通过任务管理器,关掉mysqld服务进程。

  7. 再次通过服务管理,打开mysql服务。

  8. 即可用修改后的新密码登陆。

2. 问题2:mysql命令报“不是内部或外部命令”

如果输入mysql命令报“不是内部或外部命令”,把mysql安装目录的bin目录配置到环境变量path中。如下:

202402090119744.png

3. 问题3:错误ERROR :没有选择数据库就操作表格和数据

ERROR 1046 (3D000): No database selected
解决方案一:就是使用“USE 数据库名;”语句,这样接下来的语句就默认针对这个数据库进行操作
解决方案二:就是所有的表对象前面都加上“数据库.”

4. 问题4:命令行客户端的字符集问题

mysql> INSERT INTO t_stu VALUES(1,'张三','男');
ERROR 1366 (HY000): Incorrect string value: '\xD5\xC5\xC8\xFD' for column 'sname' at 
row 1

原因:服务器端认为你的客户端的字符集是utf-8,而实际上你的客户端的字符集是GBK。

202402090121503.png

查看所有字符集: SHOW VARIABLES LIKE 'character_set_%';

202402090121850.png

解决方案,设置当前连接的客户端字符集 “SET NAMES GBK;”

202402090130182.png

5. 问题5:修改数据库和表的字符编码

修改编码:

  1. 先停止服务
  2. 修改my.ini文件
  3. 重新启动服务

说明:
如果是在修改my.ini之前建的库和表,那么库和表的编码还是原来的Latin1,要么删了重建,要么使用
alter语句修改编码。

mysql> create database 0728db charset Latin1; 
Query OK, 1 row affected (0.00 sec)


mysql> use 0728db; 
Database changed


mysql> create table student (id int , name varchar(20)) charset Latin1; 
Query OK, 0 rows affected (0.02 sec)
mysql> show create table student
*************************** 1. row *************************** 
      Table: student
Create Table: CREATE TABLE `student` ( 
 `id` int(11) NOT NULL,
 `name` varchar(20) DEFAULT NULL, 
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 
1 row in set (0.00 sec)

修改字符集

mysql> alter table student charset utf8; #修改表字符编码为UTF8 
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0  Warnings: 0

mysql> show create table student
*************************** 1. row *************************** 
      Table: student
Create Table: CREATE TABLE `student` ( 
 `id` int(11) NOT NULL,
 `name` varchar(20) CHARACTER SET latin1 DEFAULT NULL,  #字段仍然是latin1编码 
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)


mysql> alter table student modify name varchar(20) charset utf8; #修改字段字符编码为UTF8 
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0  Warnings: 0 


mysql> show create table student
*************************** 1. row *************************** 
      Table: student
Create Table: CREATE TABLE `student` ( 
 `id` int(11) NOT NULL,
 `name` varchar(20) DEFAULT NULL, 
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)



-- 修改数据库字符集编码
mysql> show create database 0728db;
+--------+-----------------------------------------------------------------+ 
|Database| Create Database                                                 | 
+------+-------------------------------------------------------------------+ 
|0728db| CREATE DATABASE `0728db` /*!40100 DEFAULT CHARACTER SET latin1 */ | 
+------+-------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> alter database 0728db charset utf8; #修改数据库的字符编码为utf8 
Query OK, 1 row affected (0.00 sec)

mysql> show create database 0728db;
+--------+-----------------------------------------------------------------+ 
|Database| Create Database                                                 | 
+--------+-----------------------------------------------------------------+ 
| 0728db | CREATE DATABASE `0728db` /*!40100 DEFAULT CHARACTER SET utf8 */ | 
+--------+-----------------------------------------------------------------+
1 row in set (0.00 sec)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容