MySQL回顾

303 阅读4分钟

Windows ZIP版安装卸载服务

# 安装服务
mysqld --install

# 卸载服务
mysqld --remove

# 启动服务
net start mysql

# 关闭服务
net stop mysql

连接mysql数据库

mysql -u用户名 -p
mysql -u用户名 -p密码
mysql -uroot -p
mysql -uroot -p111111
mysql -h数据库ip地址 -P端口 -u用户名 -p
......

修改密码

mysqladmin -u用户名 -p原密码 password "新密码"

忘记密码

mysqld --skip-grant-tables
update mysql.user set password=password("新密码") where user="root" and host='localhost';
flush privileges;

统一字符编码

my.ini

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

SQL语句的三种类型

  • DDL 数据库定义语言 数据库、表、视图、索引、存储过程,例如 create, drop, alter
  • DML 数据库操作语言 增insertupdateselectdelete
  • DCL 数据库控制语言 例如控制用户访问权限 grantrevoke

查看当前登录用户

select user();

操作数据库 database

查看所有数据

show databases;

进入指定数据库

use 数据库名;
use mysql;

查看当前所在数据库

select database();

创建数据库

create database 数据库名;
create datebase 数据库名 charset 字符编码;
create database mydb charset utf8;

修改数据库字符编码

alter database 数据库名 charset 字符编码;
alter database mydb charset gbk;

删除数据库

drop database 数据库名;
drop database mydb;

操作数据表 table

查看所有表

show tables;

创建表

create table user(
    id int,
    name char(20),
    age int
);

查看表信息

show create table 表名;
desc 表名;

修改表字段类型

alter table 表名 modify name char(4);

修改字段名

alter table 表名 change age sex int;

操作数据

-- 增加一条数据
insert into 表名(字段1,字段2...) value (值1, 值2);
-- 增加多条数据
insert into 表名(字段1,字段2...) values (值1, 值2), (值1, 值2), (值1, 值2);

-- 查询一张表表的所有行
select 字段1, 字段2 from 表名;
-- *代表查看所有字段
select * from 表名;

-- 查询年龄大于等于18的
select * from 表名 where 年龄 >= 18;
-- 查询年龄不等18的
select * from 表名 where 年龄 <> 18;
select * from 表名 where 年龄 != 18;

-- 查询年龄大于18 并且 收入大于1万元的数据
select * from 表名 where 年龄 > 18 and 收入 > 10000;

-- 查询工资大于等于5000 或者年龄 小于等于35岁的,并且年龄大于等于18岁的
select * from 表名 where 工资 >= 5000 or 年龄 <= 35 and 年龄 >= 18;

-- 查询唯一的值,不重复的值
select distinct 字段名 from 表名;

-- 查询cid大于等于623 并且小于等于 640 这个范围的值
select * from mem_chr_vip where cid >=623 and cid <=640;
select * from mem_chr_vip where cid between 623 and 640;

-- 查询所有以 水月 开头的数据
SELECT * FROM `cfg_buff` where name like '水月%';

-- 查询所有以 水月 结尾的数据
SELECT * FROM `cfg_buff` where name like '%水月';

-- 查询所有包含 水月 结尾的数据
SELECT * FROM `cfg_buff` where name like '%水月%';

-- 自定义字段名称
select count(*) as 总数 from 表名;

-- 自定义多个字段名称
select 
`id` as 编号,
`name` as 名称,
`desc` as 描述,
`interval` as 积分,
`icon`
from `cfg_buff`;

-- 查询多个值
select * from cfg_buff where name in('百草散', '紫金丹', '黎洞丹');
排序(升序,降序)
-- 排序-升序
SELECT * FROM 表名 order by 字段名;
SELECT * FROM 表名 where 条件 order by 字段名 asc;

-- 排序-降序
SELECT * FROM 表名 order by 字段名 desc;
聚合查询
-- max 最大值
select max(`interval`) from cfg_buff;

-- min 最小值
select min(`interval`) from cfg_buff;

-- count 总数, 数据的行数
select count(*) from cfg_buff;

-- sum 求和
select sum(`interval`) from cfg_buff;

-- avg 平均值
select avg(`interval`) from cfg_buff;

-- 修改所有数据
update 表名 set 字段名1=1, 字段2=2;

-- 修改指定数据
update 表名 set 字段名1=1, 字段2=2 where 条件...;

-- 删除所有数据
delete from 表名;

-- 删除指定数据
delete from 表名 where 条件...;

分组查询

SELECT age FROM `userinfo` group by age;

-- 求每个分组有多少条数据
SELECT age, count(*) FROM `userinfo` group by age;

分组后的条件查询

SELECT age, count(*) as zs 
FROM `userinfo` 
group by age 
HAVING age > 27 
order by zs desc;

子查询

select * from1 where uid in(select id from2 where 条件);

连接查询

文档
https://blog.csdn.net/zjt980452483/article/details/82945663
-- 内连接
select * from userinfo inner join log where userinfo.id = log.uid;

-- 内连接第二种写法
select * from userinfo, log where userinfo.id = log.uid;

多个查询结果显示再一起

select * from
(select count(*) as 艺术品数据量 from al_work) as c1,
(select count(*) as 艺术品数据量 from al_artist) as c2,
(select count(*) as 艺术品数据量 from al_institute) as c3

image.png


定义变量&使用变量

set @instituteId = '8a98a68a554435c2015547677d630097';
set @instituteName = (select name from al_institute where id = @instituteId);
update al_work set imp_institute_name1 = @instituteName where imp_user_name ='赵洺悦' and imp_institute_name1 is not null and imp_institute_name1 !='' and imp_institute_name1 REGEXP '[a-zA-Z0-9]{32}'
and imp_institute_name1 = @instituteId;

存储引擎

查看当前MySQL支持的存储引擎
show engines;
show engines\G
查看当前使用的是什么存储引擎
show variables like 'storage_engine%';
创建表指定存储引擎
create table 表名称(字段) engine=存储引擎名称;
create table user( id int, name varchar(32) ) engine=innodb;

备份还原

-- 待更新

主从复制

-- 待更新

优化

offset&limit查询慢的问题-优化!

-- 18万条数据中查询时间为1.8s
select * from al_data_index limit 100 offset 180000;

-- 改为一下方式
-- 18万的数据中查询时间为0.28s
select * from al_data_index a inner join (select id from al_data_index limit 180000,100) b on a.id=b.id;

innodb count(*)速度慢的解决办法

-- 这个会很慢 1千万的数据要执行52s
SELECT count(*) FROM `users`;
SELECT count(`status`) FROM `users`;

-- 给很小的列加上索引
-- 使用了第二索引并加上where条件后执行时间3.1s
SELECT count(`status`) FROM `users` where status=1;