1、回顾知识
1.1、docker启动MySQL
安装docker
#准备好二进制的包
[root@Node2 ~]# ls docker-20.10.9.tgz
docker-20.10.9.tgz
[root@Node2 ~]#
#解压docker的二进制包
[root@Node2 ~]# tar -xf docker-20.10.9.tgz
#把它移动到/usr/local/下
[root@Node2 ~]# mv docker /usr/local/docker
#修改一下docker的属主
[root@Node2 ~]# chown -R root:root /usr/local/docker/
#创建docker用户
[root@Node2 ~]# /usr/local/docker/dockerd^C
#给PATH路径添加docker
[root@Node2 ~]#PATH=/usr/local/docker/:$PATH
#启动docker
[root@Node2 ~]# dockerd &
[1] 6947
- 让docker拉取一下mysql5.7
- docker pull mysql:5.7
- 然后创建一下mysql的容器
- docker run命令
#拉取mysql5.7
[root@Node2 ~]# docker pull mysql:5.7
#查看一下镜像
[root@Node2 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 2be84dd575ee 7 weeks ago 569MB
#启动mysql
[root@Node2 ~]# docker run -p 3306:3306 --name mysql -v /data/mysql/:/var/lib/mysql/ -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
d9c5a7cdf701a5f57fb1858fbf3eb64392f0d31358202da2934eaf4c897823e6
#查看一下是否启动了
[root@Node2 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d9c5a7cdf701 mysql:5.7 "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql
- 登入mysql
- 修改密码
#登陆mysql
[root@Node2 ~]# docker exec -it mysql /bin/bash
#授权本地登陆
bash-4.2# mysql -uroot -p'root'
#授权用户登录
mysql> alter user 'root'@'localhost' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
#然后尝试登录
#先安装mysql的相关命令
[root@Node2 ~]# yum -y install mariadb
#然后尝试登录mysql
[root@Node2 ~]# mysql -uroot -p'123456' -h 127.0.0.1
#进去之后在查看是否是5.7版本
MySQL [(none)]> select version();
+-----------+
| version() |
+-----------+
| 5.7.42 |
+-----------+
1 row in set (0.00 sec)
1.2、数据库与数据表操作
创建数据库
#创建数据库
mysql> create database LJW;
#进入到数据库
mysql> use LJW;
#创建数据表格
mysql> create table ying_xiong(
-> id int(20),
-> name varchar(50),
-> sex ENUM('男','女') not null,
-> birthdate DATE,
-> stype varchar(50),
-> description text
-> );
#插入对应的数据
mysql> insert into ying_xiong (name,sex,birthdate,stype,description) values('张三丰','男','0928-01-01','太极拳','张三丰是太极派的创始人');
Query OK, 1 row affected (0.00 sec)
#查看数据
mysql> select * from ying_xiong;
+------+-----------+-----+------------+-----------+-----------------------------------+
| id | name | sex | birthdate | stype | description |
+------+-----------+-----+------------+-----------+-----------------------------------+
| NULL | 张三丰 | 男 | 0928-01-01 | 太极拳 | 张三丰是太极派的创始人 |
+------+-----------+-----+------------+-----------+-----------------------------------+
1 row in set (0.00 sec)
创建数据表格
#查找一下数字
mysql> select name,description from ying_xiong;
+-----------+-----------------------------------+
| name | description |
+-----------+-----------------------------------+
| 张三丰 | 张三丰是太极派的创始人 |
+-----------+-----------------------------------+
1 row in set (0.00 sec)
#添加一些数据
mysql> alter table ying_xiong add deleted boolean not null default 0;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
#查看数据
mysql> select name,sex,description from ying_xiong;
+-----------+-----+-----------------------------------+
| name | sex | description |
+-----------+-----+-----------------------------------+
| 张三丰 | 男 | 张三丰是太极派的创始人 |
+-----------+-----+-----------------------------------+
1 row in set (0.00 sec)
#更新数据
mysql> update ying_xiong set description='张三丰是伟大的人,是太极派的创始人哦' where name='张三丰';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
#查看数据
mysql> select * from ying_xiong;
#专门查看某些数据
mysql> select * from ying_xiong where name='张三丰';
2、SQL语句操作
2.1、数据查询操作
#创建一个数据库
mysql> create database GAME;
Query OK, 1 row affected (0.00 sec)
#进入到数据库
mysql> use GAME;
Database changed
#查看一个数据库
mysql> select database();
+------------+
| database() |
+------------+
| GAME |
+------------+
1 row in set (0.00 sec)
- 创建一个数据表格
- 字段含有:
- id 存储的标号 int
- name 英雄名字 varchar
- level 等级 int
- role 职业 varchar
- health 生命值 int
- mana 魔法值 init
- description test 描述
- 字段含有:
#创建一个数据表格
mysql> create table game_characters(
-> id int(10),
-> name varchar(30),
-> level int(15),
-> role varchar(50),
-> health int(10),
-> mana int(15),
-> description text);
Query OK, 0 rows affected, 4 warnings (0.12 sec)
#插入数据
mysql> insert into game_characters (name,level,role,health,mana,description)
-> values
-> ('大乔','50','法师',1000,800,'大乔是一位法术攻击型的角色'),
-> ('小乔', 45, '刺客', 800, 500, '小乔是一位敏捷且擅长暗杀的角色。'),
-> ('曹操', 55, '战士', 1200, 200, '曹操是一位勇猛的近战战士。'),
-> ('刘备', 50, '勇士', 1100, 300, '刘备是一位正直而有领导力的角色。'),
-> ('孙权', 48, '射手', 900, 600, '孙权是一位精通远程射击的角色。');
#查看数据信息
mysql> select * from game_characters;
#选择其中的字段来显示出来
mysql> select name,level from game_characters;
+--------+-------+
| name | level |
+--------+-------+
| 大乔 | 50 |
| 大乔 | 50 |
| 小乔 | 45 |
| 曹操 | 55 |
| 刘备 | 50 |
| 孙权 | 48 |
+--------+-------+
6 rows in set (0.00 sec)
- 去重–>数据当中有重复的,就去重
- 指定一个字段的数据来去重
- 使用到distinct
#去重;指定level
mysql> select distinct level from game_characters;
+-------+
| level |
+-------+
| 50 |
| 45 |
| 55 |
| 48 |
+-------+
4 rows in set (0.00 sec)
- 逻辑关系使用到的and和or
- and:并且
- or:或者
- 用于查询多个条件的数据
#查询登记大于或者等于50且职业为法师的人物
mysql> select * from game_characters where level >=50 and role = '法师';
+------+--------+-------+--------+--------+------+-----------------------------------------+
| id | name | level | role | health | mana | description |
+------+--------+-------+--------+--------+------+-----------------------------------------+
| NULL | 大乔 | 50 | 法师 | 1000 | 800 | 大乔是一位法术攻击型的角色 |
| NULL | 大乔 | 50 | 法师 | 1000 | 800 | 大乔是一位法术攻击型的角色 |
+------+--------+-------+--------+--------+------+-----------------------------------------+
2 rows in set (0.00 sec)
#查询级别小于50或者法力值大于1000的人物
mysql> select * from game_characters where level < 50 or mana >= 1000;
+------+--------+-------+--------+--------+------+--------------------------------------------------+
| id | name | level | role | health | mana | description |
+------+--------+-------+--------+--------+------+--------------------------------------------------+
| NULL | 小乔 | 45 | 刺客 | 800 | 500 | 小乔是一位敏捷且擅长暗杀的角色。 |
| NULL | 孙权 | 48 | 射手 | 900 | 600 | 孙权是一位精通远程射击的角色。 |
+------+--------+-------+--------+--------+------+--------------------------------------------------+
2 rows in set (0.01 sec)
#查询登记介于40到60之间,并且职业为战士或者法师的人物
mysql> select * from game_characters where (level >=40 and level <=60) and (role = '战士' or role = '法师');
+------+--------+-------+--------+--------+------+-----------------------------------------+
| id | name | level | role | health | mana | description |
+------+--------+-------+--------+--------+------+-----------------------------------------+
| NULL | 大乔 | 50 | 法师 | 1000 | 800 | 大乔是一位法术攻击型的角色 |
| NULL | 大乔 | 50 | 法师 | 1000 | 800 | 大乔是一位法术攻击型的角色 |
| NULL | 曹操 | 55 | 战士 | 1200 | 200 | 曹操是一位勇猛的近战战士。 |
+------+--------+-------+--------+--------+------+-----------------------------------------+
3 rows in set (0.00 sec)
查询排序
- 默认是升序:asc(可以省略不写的)
- 降序需要指定:desc
- order by (指定按哪一个字段来进行排序)
#按照等级的高低进行排序
mysql> select * from game_characters order by level desc;
#按照升序来排序,并且按照生命值的高低来盘排--->这里的asc可以是忽略不写
mysql> select * from game_characters order by health asc;
mysql> select * from game_characters
#按照health的字段来升序排序
mysql> select * from game_characters order by health
-> ;
#按照多个字段来进行排序
#这里按照health的值来升序排序,并且按照等级level的降序来排序
mysql> select * from game_characters order by health asc,level desc;
一个购物网站的布局模块如下:
- 用户模块
- userID
- username
- password
- phone
- weixin
- address
- city
- 商品模块
- 购物车模块
- 订单模块
- 支付模块
- 评价模块
- 物流模块
- 优惠券模块
- 后台管理模块
- .广告模块
- 安全模块
- 会员模块
- 社交分享模块
- 评价模块
- 推荐模块等等
#创建一个表格
mysql> create table User(
-> UserID int PRIMARY KEY,
-> UserName varchar(50) not null,
-> PassWord varchar(100) not null,
-> Email varchar(100) not null,
-> Phone varchar(20),
-> FirstName varchar(50),
-> LastName varchar(50),
-> Aderess varchar(100),
-> City varchar(50),
-> PostalCode varchar(20),
-> Country varchar(50),
-> Sex enum('男','女','其他'),
-> Birthdate date,
-> Avatar varchar(200),
-> RegistrationDate datetime,
-> LastLoginDate datetime,
-> IsActive boolean,
-> IsAdmin boolean);
Query OK, 0 rows affected (0.04 sec)
2.2、SQL语句进阶操作
SQL语句进阶–>涉及的数据类型
- 数值类型
- 数据的单位:
- 位:0
- 字节:是存储容量的基本单位
- 8个位就构成一个字节
- 1byte(字节)=8bit(位)
- 1KB=1024B(字节)
- 1M=1024KB
- 1G=1024MB
- 1T=1024GB
- 字符:是指计算机中使用的字母、数字、字和符号;
- 数据的单位:
#创建一个表格
mysql> create table tab1(t1 tinyint,t2 smallint,t3 bigint);
Query OK, 0 rows affected (0.36 sec)
#查看表格结构
mysql> desc tab1;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| t1 | tinyint | YES | | NULL | |
| t2 | smallint | YES | | NULL | |
| t3 | bigint | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
3 rows in set (0.00 sec)
#分别尝试插入数据
mysql> insert into tab1(t1) values (-128);
Query OK, 1 row affected (0.01 sec)
mysql> insert into tab1(t1) values (-127);
Query OK, 1 row affected (0.01 sec)
mysql> insert into tab1(t1) values (127);
Query OK, 1 row affected (0.00 sec)
#大于255 就开始报错
mysql> insert into tab1(t1) values (255);
ERROR 1264 (22003): Out of range value for column 't1' at row 1
#创建一个表格-->用于验证int结构
mysql> create table int_test(num1 int(2),num2 int(4));
Query OK, 0 rows affected, 2 warnings (0.01 sec)
#然后分别插入数据
mysql> insert into int_test(num1,num2) values(5,5);
Query OK, 1 row affected (0.00 sec)
#查看数据
mysql> select * from int_test;
+------+------+
| num1 | num2 |
+------+------+
| 5 | 5 |
+------+------+
1 row in set (0.00 sec)
- 时间日期表示方式
- 2023-06-19
- 22:15:30
- 2023/06/19
#创建一个表格
mysql> create table seckill_activity(
-> id int(10),
-> name varchar(50),
-> start_time datetime,
-> end_time datetime);
Query OK, 0 rows affected, 1 warning (0.01 sec)
- 字符串类型
2.3、select的用法
#查看当前数据库
mysql> select database();
+------------+
| database() |
+------------+
| GAME |
+------------+
1 row in set (0.00 sec)
#查看当前时间
mysql> select curdate();
+------------+
| curdate() |
+------------+
| 2023-08-05 |
+------------+
1 row in set (0.00 sec)
#查看mysql的版本
mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.33 |
+-----------+
1 row in set (0.00 sec)
#查看当前用户
mysql> select user();
+----------------+
| user() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)
#查看某些字段
mysql> select user,host from user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+------------------+-----------+
4 rows in set (0.00 sec)
2.4、show的用法
#查看数据-->类似
mysql> show variables like '%storage_engine%';
+---------------------------------+-----------+
| Variable_name | Value |
+---------------------------------+-----------+
| default_storage_engine | InnoDB |
| default_tmp_storage_engine | InnoDB |
| disabled_storage_engines | |
| internal_tmp_mem_storage_engine | TempTable |
+---------------------------------+-----------+
4 rows in set (0.30 sec)
#查看全局
mysql> show global status like 'Thread%';
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| Threads_cached | 0 |
| Threads_connected | 1 |
| Threads_created | 1 |
| Threads_running | 2 |
+-------------------+-------+
4 rows in set (0.00 sec)
#查看字符级别
mysql> show variables like 'character_set_database';
+------------------------+---------+
| Variable_name | Value |
+------------------------+---------+
| character_set_database | utf8mb4 |
+------------------------+---------+
1 row in set (0.01 sec)
#查找相似字符的信息
mysql> select * from game_characters where name like '%权%';
+------+--------+-------+--------+--------+------+-----------------------------------------------+
| id | name | level | role | health | mana | description |
+------+--------+-------+--------+--------+------+-----------------------------------------------+
| NULL | 孙权 | 48 | 射手 | 900 | 600 | 孙权是一位精通远程射击的角色。 |
+------+--------+-------+--------+--------+------+-----------------------------------------------+
1 row in set (0.00 sec)
数据存储的单位:
- 位:0
- 字节:存储容量的基本单位
- 8个位构成一个字节
- 1 byte (字节)= 8 bit(位)
- 1 KB = 1024 B(字节);
- 1M=1024KB
- 1G=1024MB
- 1T=1024GB
- 字符:是指计算机中使用的字母、数字、字和符号;
3、MySQL的升级操作
3.1、MySQL5.7升级8.0
操作思路:
- 升 级 前 要 备 份 与 数 据 相 关 的 所 有 文 件 , 包 括datadir,ib_logfile,ibdata1和binlog等
- 如果是高可用形式,先升级从库
- 安装新版本的MySQL,然后迁移数据,测试新数据库是否可以用,等完全可用后再关闭原来的数据库。
- 提前了解新数据库版本的特性
- 做好数据的同步校验
- 再测试环境做好兼容性测试,避免业务存在一些MySQL8.0不支持的函数,语法
- 考虑回滚方法,最大限度的降低停机时间