(第二十三天)

上午
在同步时,对删除和修改都比较慎重(监控同步时)
mysql 主从搭建 前提软件 libaio rsync
1 、主
2 、从
3 、同步
4 、测试
注意:先执行从服务器的脚本,再执行主服务器脚本
master-mysql 配置脚本
先要在主服务器上配置免密登录
ssh-keygen
ssh-copy-id root@10.0.0.12
vim mysql.sh
#!/bin/bash
echo " 安装 master-mysql"
sleep 3
# 下载依赖软件包
yum list installed | grep libaio &> /dev/null
if [ $? -ne 0 ];then
yum -y install libaio &> /dev/null
fi
echo "libaio 已经安装 "
yum list installed | grep rsync &> /dev/null
if [ $? -ne 0 ];then
yum -y install rsync &> /dev/null
fi
echo "rsync 已经安装 "
yum list installed | grep ntpdate.x86_64 &> /dev/null
if [ $? -ne 0 ];then
yum -y install ntpdate.x86_64 &> /dev/null
fi
echo "ntpdate.x86_64 已经安装 "
ntpdate cn.ntp.org.cn
sleep 3
# 解压软件包
tar -xf mysql-8.0.33-linux-glibc2.12-x86_64.tar
sleep 3
tar -xf mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz
echo " 软件包已经解压 "
# 转移到指定工作目录
cp -r mysql-8.0.33-linux-glibc2.12-x86_64 /usr/local/mysql
cd /usr/local/mysql/
# 创建工作文件目录
mkdir mysql-files
# 创建 mysql 系统用户
id mysql
if [ $? -ne 0 ];then
useradd -r -s /sbin/nologin mysql
fi
echo "mysql 用户已经创建 "
# 修改工作文件目录的权限和所属主,所属组
chown mysql:mysql ./mysql-files/
chmod 750 ./mysql-files/
# 删除 /etc/my.cnf 文件
rm -rf /etc/my.cnf
# 初始化 mysql
/usr/local/mysql/bin/mysqld --initialize --user = mysql --
basedir = /usr/local/mysql/
sleep 3
# 加密
/usr/local/mysql/bin/mysql_ssl_rsa_setup --datadir = /usr/local/mysql/data
echo " 加密成功 "
# 设置 service 服务
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql8
# 开启 mysql
service mysql8 start
if [ $? -ne 0 ];then
echo "mysql 开启失败 "
else
echo "mysql 开启成功 "
fi
sleep 3
# 编辑配置文件 my.cnf
cat >> /usr/local/mysql/my.cnf << EOF
[mysqld]
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
socket = /tmp/mysql.sock
activate_all_roles_on_login = on
port = 3306
log-error = /usr/local/mysql/data/db01-master.err
log-bin = /usr/local/mysql/data/binlog
server-id = 10
character_set_server = utf8mb4
EOF
# 重启 mysql
service mysql8 restart
if [ $? -ne 0 ];then
echo "mysql 重启失败 "
else
echo "mysql 重启成功 "
fi
sleep 3
# 数据同步
echo " 开始配置数据同步,如果不配置请在 3 秒内按 ctrl+c 进行打断 "
sleep 3
service mysql8 stop
echo "mysql 服务已经停止 "
rm -rf /usr/local/mysql/data/auto.cnf
echo "auto.cnf 文件已经删除 "
yum -y install rsync &> /dev/null
if [ $? -eq 0 ];then
echo "rsync 软件已经安装成功 "
else
echo "rsync 软件安装失败 "
fi
rsync -av /usr/local/mysql/data root@10.0.0.12:/usr/local/mysql/ &>
/etc/null
if [ $? -eq 0 ];then
echo "data 目录同步成功 "
else
echo "data 目录同步失败 "
fi
sleep 3
# 开启 mysql
service mysql8 start
if [ $? -ne 0 ];then
echo "mysql 开启失败 "
else
echo "mysql 开启成功 "
fi
# 修改环境变量
sed -i '$aexport PATH=/usr/local/mysql/bin:$PATH' /etc/profile
# 激活配置
source /etc/profile
if [ $? -ne 0 ];then
echo "profile 文件激活失败 "
fi
echo " 完成 master-mysql 配置 "
source mysql.sh
# source /etc/profile // 激活 profile 文件
mysql -p 'hz),bpIhb2x+' // 密码为上面初始化之后自动生成的
slave-mysql 配置脚本
#!/bin/bash
echo " 安装 slave-mysql"
sleep 3
# 下载依赖软件包
yum list installed | grep libaio &> /dev/null
if [ $? -ne 0 ];then
yum -y install libaio &> /dev/null
fi
echo "libaio 已经安装 "
yum list installed | grep rsync &> /dev/null
if [ $? -ne 0 ];then
yum -y install rsync &> /dev/null
fi
echo "rsync 已经安装 "
yum list installed | grep ntpdate.x86_64 &> /dev/null
if [ $? -ne 0 ];then
yum -y install ntpdate.x86_64 &> /dev/null
fi
echo "ntpdate.x86_64 已经安装 "
ntpdate cn.ntp.org.cn
sleep 3
# 解压软件包
tar -xf mysql-8.0.33-linux-glibc2.12-x86_64.tar
sleep 3
tar -xf mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz
echo " 软件包已经解压 "
# 转移到指定工作目录
cp -r mysql-8.0.33-linux-glibc2.12-x86_64 /usr/local/mysql
cd /usr/local/mysql/
# 创建工作文件目录
mkdir mysql-files
# 创建 mysql 系统用户
id mysql
if [ $? -ne 0 ];then
useradd -r -s /sbin/nologin mysql
fi
echo "mysql 用户已经创建 "
# 修改工作文件目录的权限和所属主,所属组
chown mysql:mysql ./mysql-files/
chmod 750 ./mysql-files/
# 删除 /etc/my.cnf 文件
rm -rf /etc/my.cnf
# 设置 service 服务
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql8
# 编辑配置文件 my.cnf
cat >> /usr/local/mysql/my.cnf << EOF
[mysqld]
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
socket = /tmp/mysql.sock
activate_all_roles_on_login = on
port = 3310
log-error = /usr/local/mysql/data/db01-slave.err
relay-log = /usr/local/mysql/data/relaylog
server-id = 11
character_set_server = utf8mb4
EOF
# 数据同步
echo " 开始配置数据同步,如果不配置请在 3 秒内按 ctrl+c 进行打断 "
sleep 3
yum -y install rsync &> /dev/null
if [ $? -eq 0 ];then
echo "rsync 软件已经安装成功 "
else
echo "rsync 软件安装失败 "
fi
# 修改环境变量
sed -i '$aexport PATH=/usr/local/mysql/bin:$PATH' /etc/profile
# 激活配置
source /etc/profile
if [ $? -ne 0 ];then
echo "profile 文件激活失败 "
fi
echo " 完成 slave-mysql 配置 , 等待 master-mysql 同步 data"
echo " 注意该数据库端口号为 3310"
source mysql.sh
两个脚本都运行完之后
主服务器配置
systemctl stop firewalld // 关闭防火墙
mysql> alter user 'root' @ 'localhost' identified by '123' ;
Query OK, 0 rows affected (0.15 sec) // 修改 root 密码
mysql> create user 'slave' @ '%' identified by '123' ;
Query OK, 0 rows affected (0.03 sec) // 创建 slave 用户
mysql> grant replication slave on *.* to 'slave' @ '%' ;
Query OK, 0 rows affected (0.02 sec) // 授予 replication slave 权限
mysql> flush privileges; // 重新加载权限表
Query OK, 0 rows affected (0.00 sec)
mysql> flush tables with read lock; // 刷新所有表并施加一个全局读锁
Query OK, 0 rows affected (0.01 sec)
mysql> show master status; // 查看主服务器当前二进制日志的状态信息
+ --------------- + ---------- + -------------- + ------------------ + ---------------
---- +
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
Executed_Gtid_Set |
+ --------------- + ---------- + -------------- + ------------------ + ---------------
---- +
| binlog.000003 | 1178 | | |
|
+ --------------- + ---------- + -------------- + ------------------ + ---------------
---- +
1 row in set (0.00 sec)
从服务器配置
service mysql8 start
source /etc/profile // 激活 profile 文件
mysql -uslave -p123 -h10 .0.0.13 -P3306 --get-server-public-key // 获取
服务器的公共密钥
mysql> quit
Bye
mysql -P3310 -p 'hz),bpIhb2x+' // 密码为主服务器原先生成的密码
mysql> alter user 'root' @ 'localhost' identified by '123' ;
Query OK, 0 rows affected (0.08 sec) // 修改 root 密码
mysql> change master to
- > master_host = '10.0.0.13' ,
- > master_user = 'slave' ,
- > master_password = '123' ,
- > master_port = 3306 ,
- > master_log_file = 'binlog.000003' ,
- > master_log_pos = 1178 ;
Query OK, 0 rows affected, 9 warnings (0.02 sec)
mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.03 sec)
mysql> show slave status\G
*************************** 1 . row ***************************
Slave_IO_State: Waiting for source to send event
Master_Host: 10 .0.0.13
Master_User: slave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: binlog.000003
Read_Master_Log_Pos: 1178
Relay_Log_File: relaylog.000002
Relay_Log_Pos: 323
Relay_Master_Log_File: binlog.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
主服务器配置
mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)
到此配置全部完成
下午
1 、新增
insert into 库名称 . 表名 (id username password) values(1,"abc","123");
insert into 表名称 values(1,"name","word");
insert into 表名称 select * from 其他表 ;
inster into 表名称 values(),();
2 、删除
delete from 表名 ;
delete from tablename where id=3;
delete from tablename where age>8;
delect from tablename where name on("a","b","c");
3 、修改
update mysql.user set host='%' where name='root'
update user set password='abc' where username="zhangsan"
4 、查询
单表查询: select 字段名列表 from 表名,索引 ;
一、 MySQL 函 数介绍
1 、聚合函数
只有 select ⼦句和 having ⼦句、 order by ⼦句中能使⽤聚合函数, where ⼦句不能使⽤聚合函
数。当使⽤聚合查询以后,不能使⽤ where 条件,如果要添加条件,就使⽤ having
2 、其他常⽤函数
1 )⽇期函数
2 )数字函数
3 )字符串函数
二、 MySQL 分组查询
语法:
select 聚合函数 ( 表头名 1), 表头名 2 from 数据表名 group by 表 头名 ;
select 聚合函数 ( 表头名 ) 临时表头名 , 真实表头名 from 数据表名 group by 真实表头名 ;
若⽤ group by 分组查询语句,必须加⼊聚合函数,否则报错 (踩坑)
mysql> create table ( 序号 int, 姓名 char(16), 年龄 int, 班级 int);
Query OK, 0 rows affected (0.01 sec)
# 新建 个学 表,表头有:序号,数字形式;姓名, 本字符串形式;年龄,数字形式;班级,数字形
式。
mysql> desc ;
+ -------- + ---------- + ------ + ----- + --------- + ------- +
| Field | Type | Null | Key | Default | Extra
|
+ -------- + ---------- + ------ + ----- + --------- + ------- +
| 序号 | int(11) | YES | | NULL |
|
| 姓名 | char(16) | YES | | NULL |
|
| 年龄 | int(11) | YES | | NULL |
|
| 班级 | int(11) | YES | | NULL |
|
+ -------- + ---------- + ------ + ----- + --------- + ------- +
4 rows in set (0.00 sec)
# 展示学 表表头信息
insert into values(1, 'tom' ,15,101);
insert into values(2, 'mike' ,16,102);
insert into values(3, 'john' ,14,103);
insert into values(4, 'lili' ,15,102);
insert into values(5, 'jack' ,15,101);
insert into values(6, 'xiaoming' ,17,103);
# 向学 表内插 信息
mysql> select * from ;
+ -------- + ---------- + -------- + -------- +
| 序号 | 姓名 | 年龄 | 班级 |
+ -------- + ---------- + -------- + -------- +
| 1 | tom | 15 | 101 |
| 2 | mike | 16 | 102 |
| 3 | john | 14 | 103 |
| 4 | lili | 15 | 102 |
| 5 | jack | 15 | 101 |
| 6 | xiaoming | 17 | 103 |
+ -------- + ---------- + -------- + -------- +
6 rows in set (0.00 sec)
# 查看表内学 信息
mysql> select avg( 年龄 ) from ;
+ ------------- +
| avg( 年龄 ) |
+ ------------- +
| 15 .3333 |
+ ------------- +
1 row in set (0.00 sec)
# 计算所有学 平均年龄, avg :计算平均值,计算 数字,结果为 0
mysql> select avg( 年龄 ) from group by 班级 ;
+ ------------- +
| avg( 年龄 ) |
+ ------------- +
| 15 .0000 |
| 15 .5000 |
| 15 .5000 |
+ ------------- +
3 rows in set (0.00 sec)
# 通过 group by 语法计算每个班的学 平均年龄
mysql> select avg( 年龄 ) 平均年龄 , 班级 from group by 班级 ;
+ -------------- + -------- +
| 平均年龄 | 班级 |
+ -------------- + -------- +
| 15 .0000 | 101 |
| 15 .5000 | 102 |
| 15 .5000 | 103 |
+ -------------- + -------- +
3 rows in set (0.00 sec)
#“ 平均年龄 :这个是 ⾃⼰ 临时命名的表头名,也可以不写,那么就是下 的效果
mysql> select avg( 年龄 ), 班级 from group by 班级 ;
+ ------------- + -------- +
| avg( 年龄 ) | 班级 |
+ ------------- + -------- +
| 15 .0000 | 101 |
| 15 .5000 | 102 |
| 15 .5000 | 103 |
+ ------------- + -------- +
3 rows in set (0.00 sec)
mysql> select min( 年龄 ) 年龄 , 班级 from group by 班级 ;
+ -------------- + -------- +
| 年龄 | 班级 |
+ -------------- + -------- +
| 15 | 101 |
| 15 | 102 |
| 14 | 103 |
+ -------------- + -------- +
3 rows in set (0.00 sec)
#avg 也可以改成 min 值、 max 值、 sum 加法函数等运算
mysql> select count(*) , 班级 from group by 班级 ;
+ ----------- + -------- +
| | 班级 |
+ ----------- + -------- +
| 2 | 101 |
| 2 | 102 |
| 2 | 103 |
+ ----------- + -------- +
3 rows in set (0.00 sec)
# 也可以 count 统计函数计算每个班的总
# 这些 count avg max min sum 就是聚合函数,分组查询必须有这些函数的其
三、 MySQL ⼦语句查询
⼦查询是指⼀个查询语句嵌套在另⼀个查询语句内部的查询 ;
该查询语句可以嵌套在⼀个 SELECT SELECT...INTO INSERT...INTO 等语句中。
在执⾏查询时,⾸先会执⾏⼦查询中的语句 , 再将返回的结果作为外层查询的过滤条件。
在⼦查询中通常可以使⽤⽐较运算符和 IN EXISTS ANY ALL 等关键字。
例如: select * from class where cid=(select classid from student where sname=' 张三 ');
1 、⽐较运算符的⼦查询
也就是⽤ “=” “<” “>” 这类⽐较运算符
mysql> create table class(cid int(4) not null primary key,cname varchar(20));
Query OK, 0 rows affected (0.05 sec)
# 创建班级表
mysql> create table student (sid int(4) not null primary key, sname varchar
(20), sage int (2), classid int (4) not null);
Query OK, 0 rows affected (0.03 sec)
# 创建学
insert into class values(1001, 'Java' );
insert into class values(1002, 'C++' );
insert into class values(1003, 'Python' );
insert into class values(1004, 'PHP' );
insert into class values(1005, 'Android' );
# 向班级表插 数据
insert into student values(1, ' 张三 ' ,20,1001);
insert into student values(2, ' 李四 ' ,21,1002);
insert into student values(3, ' 王五 ' ,24,1003);
insert into student values(4, ' 赵六 ' ,23,1004);
insert into student values(5, ' ' ,21,1001);
insert into student values(6, ' ' ,26,1001);
insert into student values(7, ' ' ,27,1002);
# 向学 表插 数据
mysql> select * from class where cid = (select classid from student where
sname = ' 张三 ' );
+ ------ + ------- +
| cid | cname |
+ ------ + ------- +
| 1001 | Java |
+ ------ + ------- +
1 row in set (0.00 sec)
# 查询张三同学所在班级的信息
mysql> select * from class where cid>(select classid from student where
sname = ' 张三 ' );
+ ------ + --------- +
| cid | cname |
+ ------ + --------- +
| 1002 | C ++ |
| 1003 | Python |
| 1004 | PHP |
| 1005 | Android |
+ ------ + --------- +
4 rows in set (0.03 sec)
# 查询 张三同学所在班级编号还 的班级的信息
2 exists 关键字的⼦查询
exists 关键字后⾯的参数可以是任意⼀个⼦查询, 它不产⽣任何数据,只返回 true false 。⽽当
返回值为 true 时外层查询才会执⾏。
相当于内层句⼦是⼀个判断句式。
mysql> select * from class where exists (select * from student where
sname = ' 王五 ' );
+ ------ + --------- +
| cid | cname |
+ ------ + --------- +
| 1001 | Java |
| 1002 | C ++ |
| 1003 | Python |
| 1004 | PHP |
| 1005 | Android |
+ ------ + --------- +
5 rows in set (0.00 sec)
# 假如王五同学在学 表中则从班级表查询所有班级信息
四、 MySQL 多表联合查询
1 、交叉连接查询
交叉连接返回的结果是被连接的两个表中所有数据⾏的笛卡尔积 ;
⽐如:集合 A={a,b} ,集合 B={0,1,2} ,则集合 A B 的笛卡尔积为 {(a,0),(a,1),(a,2),(b,0),(b,1),(b,2) 。所
以,交叉连接也被称为笛卡尔连接。
语法: select * from 1 cross join 2;
mysql> select * from student cross join class;
+ ----- + -------- + ------ + --------- + ------ + --------- +
| sid | sname | sage | classid | cid | cname |
+ ----- + -------- + ------ + --------- + ------ + --------- +
| 1 | 张三 | 20 | 1001 | 1001 | Java |
| 1 | 张三 | 20 | 1001 | 1002 | C ++ |
| 1 | 张三 | 20 | 1001 | 1003 | Python |
| 1 | 张三 | 20 | 1001 | 1004 | PHP |
| 1 | 张三 | 20 | 1001 | 1005 | Android |
| 2 | 李四 | 21 | 1002 | 1001 | Java |
| 2 | 李四 | 21 | 1002 | 1002 | C ++ |
| 2 | 李四 | 21 | 1002 | 1003 | Python |
| 2 | 李四 | 21 | 1002 | 1004 | PHP |
| 2 | 李四 | 21 | 1002 | 1005 | Android |
| 3 | 王五 | 24 | 1003 | 1001 | Java |
| 3 | 王五 | 24 | 1003 | 1002 | C ++ |
| 3 | 王五 | 24 | 1003 | 1003 | Python |
| 3 | 王五 | 24 | 1003 | 1004 | PHP |
| 3 | 王五 | 24 | 1003 | 1005 | Android |
| 4 | 赵六 | 23 | 1004 | 1001 | Java |
| 4 | 赵六 | 23 | 1004 | 1002 | C ++ |
| 4 | 赵六 | 23 | 1004 | 1003 | Python |
| 4 | 赵六 | 23 | 1004 | 1004 | PHP |
| 4 | 赵六 | 23 | 1004 | 1005 | Android |
| 5 | | 21 | 1001 | 1001 | Java |
| 5 | | 21 | 1001 | 1002 | C ++ |
| 5 | | 21 | 1001 | 1003 | Python |
| 5 | | 21 | 1001 | 1004 | PHP |
| 5 | | 21 | 1001 | 1005 | Android |
| 6 | | 26 | 1001 | 1001 | Java |
| 6 | | 26 | 1001 | 1002 | C ++ |
| 6 | | 26 | 1001 | 1003 | Python |
| 6 | | 26 | 1001 | 1004 | PHP |
| 6 | | 26 | 1001 | 1005 | Android |
| 7 | | 27 | 1002 | 1001 | Java |
| 7 | | 27 | 1002 | 1002 | C ++ |
| 7 | | 27 | 1002 | 1003 | Python |
| 7 | | 27 | 1002 | 1004 | PHP |
| 7 | | 27 | 1002 | 1005 | Android |
+ ----- + -------- + ------ + --------- + ------ + --------- +
35 rows in set (0.00 sec)
# 两个表交叉连接, class 表的 cid student 表的 classid 相乘
2 、多表联合查询
语法: select 查询字段 1, 查询字段 2, ... from 1 join 2 join ... on 1. 关系字段 = 2. 关系字段
=...
join :联合
on :条件
mysql> select sname,cname from student inner join class on
student .classid = class.cid;
+ -------- + -------- +
| sname | cname |
+ -------- + -------- +
| 张三 | Java |
| 李四 | C ++ |
| 王五 | Python |
| 赵六 | PHP |
| | Java |
| | Java |
| | C ++ |
+ -------- + -------- +
7 rows in set (0.00 sec)
# 查询学 姓名及其所学习的学科
五、 MySQL 授权
1 MySQL 基础权限
2 、权限语法
grant all on test.user
客户机地址可以有以下表现形式:
% :表示所有地址
192.168.33.% :表示 33 ⽹段下所有主机,⼀般为你想为哪个⽹段授权,或为⾃⼰⽹段下的主机授权
mysql> grant all on *.* to haha@ '192.168.100.%' identified by '123456' ;
# haha 户进 授权
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges; # 刷新权限
Query OK, 0 rows affected (0.00 sec)
mysql> show grants for haha@ '192.168.100.%' ; # 查看 haha 的权限
+ ------------------------------------------------------- +
| Grants for haha@192.168.100.% |
+ ------------------------------------------------------- +
| GRANT ALL PRIVILEGES ON *.* TO 'haha' @ '192.168.100.%' |
+ ------------------------------------------------------- +
1 row in set (0.00 sec)
mysql> drop user haha@ '192.168.100.%' ; # 删除
Query OK, 0 rows affected (0.00 sec)
mysql> show grants for haha@ '192.168.100.%' ;
ERROR 1141 (42000): There is no such grant defined for user 'haha' on host
'192.168.100.%'
六、 MySQL 触发器
1 、概念
触发器是⼀种特殊的存储过程,它在插⼊,删除或修改特定表中的数据时触发执⾏,它⽐数据库本
身标准的功能有更精细和更复杂的数据控制能⼒。
1 、例如在某⼀个时间触发什么事情
2 、例如不允许股票价格的升幅⼀次超过 %10
3 、审计功能,某⼀个⼈登录会记录所有的操作
2 、触发器语法
create trigger 触发器名称 触发的时机 触发的动作 on 表名 for each row 触发器状态
1 、语法的红字为固定格式
2 、触发器名称:⾃定义
3 、触发的时机: before( 之前 ) after( 之后 ) ,在执⾏动作之前还是之后
4 、触发的动作:指的激发触发程序的语句类型(插⼊、更新、删除表或数据等)
5 each row :操作的每⼀⾏都会被监控
6 、触发器状态:在触发的动作之前或之后做什么事情,⽐如当我删 了表 1 的某条数据后,⾃动清空表 2
3 、触发器创建的四要素
1 )监视地点: table (表)
2 )监视事件: insert (插⼊)、 update (更新)、 delete (删除) 等动作
3 )触发时间: before (之前)、 after (之后)
4 )触发事件:在监视事件之前或之后,对当前表或其他表的插 ⼊、更新、删除等动作
4 、触发器实例
# 查看数据库内的所有表
mysql> show tables;
+ -------------- +
| Tables_in_yh |
+ -------------- +
| class |
| it |
| student |
+ -------------- +
3 rows in set (0.00 sec)
# 创建触发器规则
# 命令 意:创建名为 deltable 的触发器,在执 条的删除 class 表命令之后,删除 student
mysql> create trigger deltable after delete on class for each row delete from
student;
Query OK, 0 rows affected (0.00 sec)
# 查看触发器
mysql> show triggers\G;
*************************** 1 . row ***************************
Trigger: deltable
Event: DELETE
Table: class
Statement: delete from student
Timing: AFTER
Created: 2023 -09-26 20 :46:24.53
sql_mode:
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_
DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AU
TO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Definer: root@localhost
character_set_client: utf8
collation_connection: utf8_general_ci
Database Collation: latin1_swedish_ci
1 row in set (0.00 sec)
ERROR:
No query specified
# 查看当前数据库下的所有数据表
mysql> show tables;
+ -------------- +
| Tables_in_yh |
+ -------------- +
| class |
| it |
| student |
+ -------------- +
3 rows in set (0.00 sec)
# 查看 class 表的内容,因为要 该表做示范
mysql> select * from class;
+ ------ + --------- +
| cid | cname |
+ ------ + --------- +
| 1001 | Java |
| 1002 | C ++ |
| 1003 | Python |
| 1004 | PHP |
| 1005 | Android |
+ ------ + --------- +
5 rows in set (0.01 sec)
# 查看 student 表的内容,因为要 该表做示范
mysql> select * from student;
+ ----- + ---------- + ------ + --------- +
| sid | sname | sage | classid |
+ ----- + ---------- + ------ + --------- +
| 1 | mike | 17 | 1001 |
| 2 | john | 18 | 1002 |
| 3 | lili | 19 | 1003 |
| 4 | zhangsan | 20 | 1004 |
| 5 | tom | 21 | 1005 |
+ ----- + ---------- + ------ + --------- +
5 rows in set (0.00 sec)
# 删除 class 表中 cid 1005 的整 数据,也就是执 之前设置的触发动作
mysql> delete from class where cid = 1005 ;
Query OK, 1 row affected (0.00 sec)
# 因为触发器执 ,所以 student 表的内容在 class 表的删除动作后被清空
mysql> select * from student;
Empty set (0.00 sec)
# 删除触发器
mysql> drop trigger deltable;
Query OK, 0 rows affected (0.00 sec)
七、 MySQL 基本优化操作
1 、忘记 MySQL 密码
[root@localhost ~] # vim /etc/my.cnf
[mysqld]
skip-name-resolve # 添加该 ,表示本机跳过 MySQL 密码验证
skip-grant-tables # 添加该 ,表示登录时,忽略所有的 户认证信息,包括 户名、密码和权
限。
:wq
[root@localhost ~] # systemctl restart mysqld.service
[root@localhost ~] # mysql # 免密时,直接使 MySQL 命令登录
mysql> use mysql;
mysql> update user set authentication_string = password( '123' ) where
user = "root" ;
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 1
# 更新 MySQL “root” 的密码为 “123” 等。如果 户名不叫 “root” ,那么最后的等号后 写你想要改
户名
mysql> select Host,user,authentication_string from user;
# 这条命令意为:算法对账户明 密码加密后的字符串,不 看,看不懂,没什么
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye
[root@localhost ~] # mysql -uroot -p123
2 MySQL 存储引擎
1 )查看数据库使⽤的存储引擎
mysql> use yh; # 查看存储引擎时,必须要切换到某个数据库
Database changed
mysql> show tables; # 查看当前 yh 数据库下的所有数据表
+ -------------- +
| Tables_in_yh |
+ -------------- +
| class |
| it |
| student |
+ -------------- +
3 rows in set (0.00 sec)
mysql> show table status \G; # 查看所有数据表的存储引擎
*************************** 1 . row ***************************
Name: class
Engine: InnoDB # 存储引擎,常 的还有 MyISAM
Create_time: 2023 -09-25 09 :27:28 # 数据表创建时间
Update_time: 2023 -09-26 20 :57:20 # 数据表更新时间
*************************** 2 . row ***************************
Name: it
Engine: InnoDB # 存储引擎
Create_time: 2023 -09-25 17 :55:38 # 数据表创建时间
*************************** 3 . row ***************************
Name: student
Engine: InnoDB
Create_time: 2023 -09-25 10 :16:48 # 数据表创建时间
Update_time: 2023 -09-26 20 :57:20
mysql> show table status where name = 'class' \G;
# 也可查看单个数据表的存储引擎
*************************** 1 . row ***************************
Name: class
Engine: InnoDB # 存储引擎
Version: 10
Row_format: Dynamic
Rows: 4
Avg_row_length: 4096
Data_length: 16384
Max_data_length: 0
Index_length: 0
Data_free: 0
Auto_increment: NULL
Create_time: 2023 -09-25 09 :27:28 # 创建时间
Update_time: 2023 -09-26 20 :57:20 # 更新时间
Check_time: NULL
Collation: latin1_swedish_ci
Checksum: NULL
Create_options:
Comment:
1 row in set (0.00 sec)
ERROR:
No query specified
2 )创建表并指定存储引擎
mysql> create table haha(id int) engine = MyISAM;
# 创建表 haha ,并添加数字形式的表头 id ,指定 haha 表的存储引擎为 MyISAM
Query OK, 0 rows affected (0.00 sec)
mysql> show table status where name = 'haha' \G;
# 查看 haha 表的存储引擎及其他状态信息
*************************** 1 . row ***************************
Name: haha
Engine: MyISAM # 存储引擎
3 )修改已存在数据表的存储引擎
mysql> alter table haha engine = InnoDB; # 修改已存在的数据表 haha 的存储引擎
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> show table status where name = 'haha' \G;
# 查看 haha 表状态及存储引擎
*************************** 1 . row ***************************
Name: haha
Engine: InnoDB # 存储引擎
4 )修改 MySQL 服务的默认存储引擎
[root@localhost ~] # vim /etc/my.cnf
[mysqld]
default-storage-engine = InnoDB # 添加此 ,当以后再创建表时,存储引擎将改为 InnoDB
练习
远程连接数据库的要素
1 username
2 password
3 url mysql ip| 域名 数据库名称 端口
别名
select id as 编号 ,name as 姓名 ,gender as 性别 from student;
数据分析的基础
1 、排序
max
min
2 、汇总
count
sum
avg
3 、数学进制
二进制
八进制
十进制
十六进制
select max(price) from product;
select * from student order by gender;
select * from student order by gender desc;
select * from student order by gender asc;
当我们对数据进行聚合查询后,不能使用 where 条件,如果要添加条件就使用 having
select gender as 性别, count(gender) as 人数 from student group by gender;
create table product(id int primary key auto_increment,name varchar(45) not
null,price float not null,qty int not null);
desc product;
insert into product (name,price,qty) values(" 香蕉 ",8.5,200),(" 苹果 ",12.5,400),
(" 菠萝 ",12.4,70),(" 哈密瓜 ",18.3,400);
select * from product;
select * from product order by qty;
select * from product order by price;
select * from (select * from product order by qty) as a order by a.price;
select max(price) from product;
select min(price) from product;
select sum(price) from product;
select avg(price) from product;
select *,price*qty as tt from product;
select sum(tt) from (select *,price*qty as tt from product) as a;
select year('1985-7-6') as birth;
select month('1985-7-6') as mon;
select now();
select year(now());
select second(now());
insert into product (name,price,qty)values(now(),7.8,90);
select * from product;
create table p(createtime defult now())
select trim("a b");
select floor(3.14);
select floor(-3.14);
select ceiling(9.8);
select ceiling(9.3);
select round(9.5);
  • 24
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值