常用sql(mysql)

新建一个只读权限的账号


create user 'ops'@'%' IDENTIFIED by 'opsmima';
grant select on yourDB.* TO 'ops'@'%';
flush PRIVILEGES;

-- 其中ops是新的账户名,opsmima是密码,yourDB是要授权的数据库名。%是不受IP限制,也可改为指定IP限制访问权限。
			

update时出现:Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect.


set sql_safe_updates=0;
			

字段转为utf8mb4


show full columns from 表名; --查看表内容

alter table 表名 modify 字段名 字段类型,比如char(20) character set utf8mb4 COLLATE utf8mb4_general_ci;
			

导出的.sql中含有SET .GTID_PURGED=/*!80000 '+'*/ '0230eda4-21bc-11e8-b75c-00163f00c7a2:1-24632401,c7adaef2-9ef2-11ec-88fb-00163e176270:1-23707057';导致无法导入


reset master;
			

添加新账户并赋权限


CREATE USER 'test'@'%' IDENTIFIED BY 'password'; --添加新用户
GRANT ALL ON *.* TO 'test'@'%'; --赋所有库所有权限
GRANT select ON *.* TO 'test'@'%'; --赋所有库select权限
FLUSH privileges; --按需使用刷新

当我们不是通过create user、grant、revoke、drop命令来操作用户和权限,
而是通过update语句直接去修改了mysql.user表中的数据的时候,
此时我们需要执行flush privileges;命令。
			

查询某库用量


SELECT 
	TABLE_NAME,
	DATA_LENGTH,
	INDEX_LENGTH,
	(DATA_LENGTH + INDEX_LENGTH) AS length,
	TABLE_ROWS,
	CONCAT(ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024 / 1024,
				3),
		'GB') AS total_size
FROM
	information_schema.TABLES
WHERE
	TABLE_SCHEMA = 'DBNAME'
ORDER BY length DESC
			

查询表所有字段


show columns from table_name;

show full columns from table_name; -- 比上面多了编码、备注、权限信息
		

日期、时间查询


select str_to_date('08/09/2008', '%m/%d/%Y'); -- 2008-08-09
select str_to_date('08/09/08' , '%m/%d/%y'); -- 2008-08-09
select str_to_date('08.09.2008', '%m.%d.%Y'); -- 2008-08-09
select str_to_date('08:09:30', '%h:%i:%s'); -- 08:09:30
select str_to_date('08.09.2008 08:09:30', '%m.%d.%Y %h:%i:%s'); -- 2008-08-09 08:09:30

select unix_timestamp(); -- 1218290027
select unix_timestamp('2008-08-08'); -- 1218124800
select unix_timestamp('2008-08-08 12:30:00'); -- 1218169800

select from_unixtime(1218290027); -- '2008-08-09 21:53:47'
select from_unixtime(1218124800); -- '2008-08-08 00:00:00'
select from_unixtime(1218169800); -- '2008-08-08 12:30:00'

select from_unixtime(1218169800, '%Y %D %M %h:%i:%s %x'); -- '2008 8th August 12:30:00 2008'

set @dt = now();
select date_add(@dt, interval 1 day); -- add 1 day
select date_add(@dt, interval 1 hour); -- add 1 hour
select date_add(@dt, interval 1 minute); -- ...
select date_add(@dt, interval 1 second);
select date_add(@dt, interval 1 microsecond);
select date_add(@dt, interval 1 week);
select date_add(@dt, interval 1 month);
select date_add(@dt, interval 1 quarter);
select date_add(@dt, interval 1 year);
select date_add(@dt, interval -1 day); -- sub 1 day
			

windows绿色版安装,MySQL5.7.43


-- 解压后,新建一个my.ini的文件,写入如下信息(目录可自定义)
[mysqld]
basedir = D:\mysql-5.7.43-winx64
datadir = D:\mysql-5.7.43-winx64\data
port = 3306
character-set-server=utf8

[client]
default-character-set=utf8

-- 环境变量中的Path里配置
D:\mysql-5.7.43-winx64\bin

-- 用管理员打开cmd,执行如下命令。
cd D:\mysql-5.7.43-winx64\bin
d:
mysqld --initialize --user=mysql --console
-- 下面这个mysql57是服务名,可自定义
mysqld --install mysql57
-- 成功会显示Servers Successfully installed
-- 失败的话,另外根据失败信息自行百度。

-- 启动服务
net start mysql

-- 启动成功后登陆mysql。密码在上面几步中会打印出来一个默认密码
mysql -P3306 -uroot -p
ALTER USER USER() IDENTIFIED BY '新密码';

-- 修改访问权限(IP白名单)。%是允许所有,可设置指定ip,比如127.0.0.1
use mysql;
SELECT 'host' FROM USER WHERE USER='root';
UPDATE USER SET HOST = '%' WHERE USER ='root';
FLUSH PRIVILEGES; 

-- 关闭服务用
net stop mysql57

-- 若安装失败,可用如下命令移除服务
mysqld --remove mysql57

-- 若遇到启动服务器失败,服务一直在启动中,只能强行杀死进程
taskkill /f /t /im "mysqld.exe"

-- 附带查找命令
tasklist | findstr "mysql"