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 数据库操作语言 增
insert改update查select删delete - DCL 数据库控制语言 例如控制用户访问权限
grant、revoke
查看当前登录用户
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 * from 表1 where uid in(select id from 表2 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
定义变量&使用变量
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;