远程后台登录
mysql -h [ip] -P [port] -u [username] -p [password]
创建database
CREATE DATABASE [dbname]
CHARACTER SET utf8
COLLATE utf8_general_ci;
查指定分区数据
select * from table PARTITION (p202505) where ...
授权用户所有来源ip所有权限
# 第一个*是库名,第二个*是权限名,如果是myDB.*即授权myDB这个库的全部权限
grant all privileges on *.* to 'yangxin'@'%'
构造1-10000的整数序列
SELECT @row := @row + 1 as row FROM
(
select 0 union all
select 1 union all
select 3 union all
select 4 union all
select 5 union all
select 6 union all
select 6 union all
select 7 union all
select 8 union all
select 9) t,
(
select 0 union all
select 1 union all
select 3 union all
select 4 union all
select 5 union all
select 6 union all
select 6 union all
select 7 union all
select 8 union all
select 9) t2,
(
select 0 union all
select 1 union all
select 3 union all
select 4 union all
select 5 union all
select 6 union all
select 6 union all
select 7 union all
select 8 union all
select 9) t3,
(
select 0 union all
select 1 union all
select 3 union all
select 4 union all
select 5 union all
select 6 union all
select 6 union all
select 7 union all
select 8 union all
select 9) t4,
( SELECT @row:=0)t5
查数据库死锁情况和sql执行情况
SHOW ENGINE INNODB STATUS
时间计算函数
使用DATE_SUB、DATE_ADD可以进行时间运算,参数二固定为INTERVAL XXX 单位
使用UTC_TIMESTAMP()可以获取当前时间
SELECT DATE_SUB(UTC_TIMESTAMP(), INTERVAL 300 SECOND)
select u.* from t_test u WHERE createtime >= DATE_ADD(UTC_TIMESTAMP(), INTERVAL -5 MINUTE) ;
时间戳转秒数使用time_to_sec
SELECT time_to_sec(updateTime - createTime) FROM t_test_time
索引相关
添加索引
# 添加主键
ALTER TABLE tbl_name ADD PRIMARY KEY (col_list);
# 该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL
# 添加唯一索引
ALTER TABLE tbl_name ADD UNIQUE index_name (col_list);
# 这条语句创建索引的值必须是唯一的。
# 添加普通索引
ALTER TABLE tbl_name ADD INDEX index_name (col_list, col_list2);
# 添加普通索引,索引值可出现多次
# 添加全文索引
ALTER TABLE tbl_name ADD FULLTEXT index_name (col_list);
# 该语句指定了索引为 FULLTEXT ,用于全文索引。
# 或者
ALTER TABLE tbl_name DROP INDEX index_name;
ALTER TABLE tbl_name DROP PRIMARY KEY;
删除索引
DROP INDEX index_name ON tbl_name;
查询索引
SELECT COUNT(1) FROM information_schema.statistics WHERE table_schema = DATABASE()
AND table_name = "test1" AND index_name = "idx_test"
语句组装和条件执行
SET @s =
(SELECT
IF(
(条件,可以是select语句结果和比较,
'条件满足执行的语句',
'条件不满足执行的语句'
)) ;
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
insert ignore
如果insert ignore语句中的数据主键中的uniquekey是联合键,其中一个字段为null,将不会被ignore语句忽略掉
锁表
有时候执行清理可能被一些自启动的慢查询给阻塞,kill一个又一个,这时可以先锁表,阻塞查询,不断kill掉,让清理的语句优先级提高
LOCK TABLES mytable WRITE;
truncate mytable;
unlock tables ;
select * from mytable;
# 可以从information_schema中查询进程
SELECT * FROM information_schema.`PROCESSLIST` WHERE DB = "mydb" ORDER BY time DESC
分页查询
分页查询一般使用limit、offset实现
limit n // 只输出前n条
limit n, m // 跳过n条,从第n+1条开始输出,一共输出m条
limit n offset m // 跳过m条,从第m+1条开始输出,一共输出n条
删除所有库表
可以通过information_schema.tables进行拼接
SELECT CONCAT('DROP TABLE ', 'your_database_name.', table_name, ';')
FROM information_schema.tables
WHERE table_schema = 'your_database_name';
然后执行所有drop语句
评论区