查看、启动、重启、关闭
> systemctl status mysqld.service;
> systemctl start mysqld.service;
> systemctl restart mysqld.service;
> systemctl stop mysqld.service;
导入、导出SQL文件
> mysqldump -uroot -p database > /home/database.sql
> mysqldump -uroot -p database table > /home/table.sql
> mysql -u root -p
mysql> use database;
mysql> source /home/database.sql
高效导入、导出数据
select '字段' from table
into outfile '/home/file.txt'
fields terminated by ','
lines terminated by '\n';
load data
infile '/home/file.txt'
ignore into table xxx
fields terminated by ','
lines terminated by '\n';
数据迁移
mysqldump -h远程ip -u用户 -p密码 -P3306 --default-character-set=utf8 --databases 单个或多个数据库名称空格分开 | mysql -h127.0.0.1 -uroot -p -P3306
mysqldump -h远程ip -u用户 -p密码 -P3306 --default-character-set=utf8 --all-databases | mysql -h127.0.0.1 -uroot -p -P3306
mysqldump -h远程ip -u用户 -p密码 -P3306 --default-character-set=utf8 dbname table1 table2…… | mysql -h127.0.0.1 -uroot -p -P3306
常用函数
alter database table character set utf8 collate utf8_general_ci;
select now();
select unix_timestamp() * 1000;
select unix_timestamp('日期') * 1000;
select from_unixtime(time / 1000);
select from_unixtime(time / 1000, '%Y-%m-%d');
select from_unixtime(time / 1000, '%Y-%m-%d %H:%i:%s');
select date_format(now(), '%Y-%m-%d');
select date_format(now(), '%Y-%m-%d %H:%i:%s');
%a 缩写星期名 (Sun..Sat)
%b 缩写月名 (Jan..Dec)
%c 月,数值 (0..12)
%D 带有英文前缀的月中的天 (1st, 2nd, 3rd, 等等)
%d 月的天,数值 (00..31)
%e 月的天,数值 (0..31)
%f 微秒 (000000..999999)
%H 小时 (00..23)
%h 小时 (01..12)
%I 小时 (01..12)
%i 分钟,数值 (00..59)
%j 年的天 (001..366)
%k 小时 (0..23)
%l 小时 (1..12)
%M 月名 (January..December)
%m 月,数值 (00..12)
%p AM 或 PM
%r 时间,12-小时 (hh:mm:ss AM 或 PM)
%S 秒 (00..59)
%s 秒 (00..59)
%T 时间,24-小时 (hh:mm:ss)
%U 周 (00..53) 星期日是一周的第一天
%u 周 (00..53) 星期一是一周的第一天
%V 周 (01..53) 星期日是一周的第一天,与 %X 使用
%v 周 (01..53) 星期一是一周的第一天,与 %x 使用
%W 星期名 (Sunday..Saturday)
%w 周的天 (0=星期日..6=星期六)
%X 年,其中的星期日是周的第一天,4 位,与 %V 使用
%x 年,其中的星期一是周的第一天,4 位,与 %v 使用
%Y 年,4 位
%y 年,2 位
select adddate('日期', interval num day);
select subdate('日期', interval num day);
select datediff('开始日期', '结束日期');
select timestampdiff(interval, '开始日期', '结束日期');
select concat('字段', '字段', '...');
select lpad('#', 16, 0);
select rpad('#', 16, 0);
select '字段' from '表名' where '字段' like '%_%';
select '字段' from '表名' where instr('字段', '');
select '字段' from '表名' where locate('', '字段');
select '字段' from '表名' where position('' in '字段');
select '字段' from '表名' where find_in_set('', '字段');
left join : 两个表的交集外加左表剩下的数据;
right join : 两个表的交集外加右表剩下的数据;
inner join : 两个表的交集;
cross join : 将A表的每一条记录与B表的每一条记录强行拼在一起;
using : using('字段')的功能相当于on '字段' = '字段',using会去除指定的列,而on不会;
select group_concat([distinct] '字段' [order by] [separator '分隔符']) from '表名' group by '字段';
select * from '表名' order by field('字段', '值1', '值2', '值3',...);
create table date (i int(1));
insert into date (i) values (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);
select
adddate('开始日期', dates.i) date
from (
select
d1.i + d10.i * 10 + d100.i * 100 i
from date d1
cross join date d10
cross join date d100
) dates
where '结束日期' >= adddate('开始日期', dates.i);
select
(@i := @i + num)
from t
cross join (select @i := 0) x;
alter table 表名 add column 字段名 varchar(255) character set utf8 collate utf8_general_ci null default '' comment '描述' after 字段名;
正则替换(mysql8.0)
select regexp_replace(source, pattern, replace)
预定义的 POSIX 字符类
| 字符类 | 说明 |
|---|
[:alpha:] | 字母字符 |
[:lower:] | 小写字母字符 |
[:upper:] | 大写字母字符 |
[:digit:] | 数字 |
[:alnum:] | 字母数字字符 |
[:space:] | 空白字符(禁止打印),如回车符、换行符、竖直制表符和换页符 |
[:punct:] | 标点字符 |
[:cntrl:] | 控制字符(禁止打印) |
[:print:] | 可打印字符 |
使用 CTE 实现递归(mysql8.0)
with recursive cte as (
select * from org where id = ''
union all
select o.* from org o, cte where o.id = cte.pid
)
select * from cte
排名统计(mysql8.0)
select score, rank() over(order by score desc) from score;
select score, rank() over(partition by xxx order by score desc) from score;
select score, row_number() over(order by score desc) from score;
select score, row_number() over(partition by xxx order by score desc) from score;
select score, dense_rank() over(order by score desc) from score;
select score, dense_rank() over(partition by xxx order by score desc) from score;
存储过程
create procedure pro_()
begin
declare i int;
declare user varchar(36);
set i = 0;
while i < 15000 do
set user = uuid();
insert into sys_user(user_id, username) values (user, user_id);
insert into sys_org_user(relate_id, org_id, user_id) values (uuid(), org_id, user);
set i = i+1;
end while;
end;
call pro_;
drop procedure pro_;
Mybatis转义字符
| 转义符 | 符号 | 备注 |
|---|
< | < | 小于 |
> | > | 大于 |
& | & | 与 |
' | ' | 单引号 |
" | " | 双引号 |