Mysql常见问题
@
1 用户权限管理
设置用户权限时的代码:
示例代码:
grant all privileges on *.* to
'user_name'@'%' identified by 'thisisplaceforpw' with
grant option;
格式如下:
grant all privileges on 数据库.表 to
'用户名'@'登录地址' identified by '密码' with
grant option;
一些常见符号说明:
符号 | 含义 |
---|---|
*.* | 第一个表示数据库,第二个表示表,.即所有数据库的所有表 |
user_name | 被授权的用户 |
% | 表示登录地址,%表示可以在任何IP地址登录 |
thisisplaceforpw | 表示登录密码 |
常用的权限:
权限 | 说明 |
---|---|
All、All Privileges | 全部数据库的所有权限 |
Usage | 是创建一个用户之后的默认权限,包括连接、登录权限。该权限不能被回收,即使使用REVOKE |
Select | 允许从表中查看数据,某些不查询表数据的select执行则不需要此权限,如Select 1+1, Select PI()+2;而且select权限在执行update/delete语句中含有where条件的情况下也是需要的 |
Insert | 允许在表里插入数据,同时在执行analyze table,optimize table,repair table,create user语句的时候也需要Insert权限 |
Update | 允许修改表中的数据的权限 |
Delete | 允许删除行数据的权限 |
Create | 允许创建数据库和表的权限 |
Drop | 允许删除数据库、表、视图的权限,包括truncate table命令 |
Reload | 允许执行flush命令,指明重新加载权限表到系统内存中,refresh命令代表关闭和重新开启日志文件并刷新所有的表 |
Shutdown | 允许关闭数据库实例,执行语句包括mysqladmin shutdown |
Process | 允许查看MySQL中的进程信息,比如执行show processlist, mysqladmin processlist, show engine等命令。默认每个用户都可以执行show processlist命令,但是只能查询本用户的进程 |
File | 允许在MySQL可以访问的目录进行读写磁盘文件操作,可使用的命令包括load data infile、select … into outfile、load file()函数 |
Grant | 允许此用户授权或者收回给其他用户授予的权限,重新赋给管理员的时候需要加上这个权限 |
Reference | 允许创建外键 |
Alter | 允许修改表结构的权限,但必须要有Create和Insert权限配合。如果是rename表名,则要求有Alter和Drop原表,Create和Insert新表的权限 |
Show databases | 允许通过执行show databases命令查看所有的数据库名 |
Super | 允许执行一系列数据库管理命令,包括kill强制关闭某个连接命令,change master to创建复制关系命令,以及create/alter/drop server等命令 |
Create temporary tables | 允许创建临时表的权限 |
Lock tables | 允许对拥有Select权限的表进行锁定或解锁,以防止其他链接对此表的读或写 |
Execute | 允许执行存储过程和函数的权限 |
Replication slave | 允许slave主机通过此用户连接master以便建立主从复制关系 |
Create view | 允许创建视图的权限 |
Show view | 允许通过执行show create view命令查看视图创建的语句 |
Create routine | 允许创建存储过程、函数的权限,当授予此权限时会自动授予Execute和Alter routine权限 |
Alter routine | 允许修改或者删除存储过程、函数的权限 |
Create user | 允许创建、修改、删除、重命名user的权限 |
Event | 允许查询、创建、修改、删除MySQL事件 |
Trigger | 允许创建、删除、执行、显示触发器的权限 |
Create tablespace | 允许创建、修改、删除表空间和日志组的权限 |
2 获取数据表列名
SELECT COLUMN_NAME, DATA_TYPE , COLUMN_COMMENT FROM
information_schema.COLUMNS WHERE
table_name = '表名' AND table_schema = '数据库';
3 更新千万级别的数据
当更新表中的数据时,涉及的数据达到了千万行,这个过程的更新可能会很耗时。可以采用以下方法:
计算出每条记录对应的值,将其保存在单独的一张表中,以后查询相应数据时使用join进行查询。
4 数据类型大小
参考:
[1] 各类数据类型大小
[2] char、varchar所占内存大小
5 获取某张表的字段
当所有数据库中只有一张表的名字为 table 时:
select COLUMN_NAME from
information_schema.COLUMNS where
table_name = 'table';
当其他数据库中可能也存在 table 时:
select COLUMN_NAME from
information_schema.COLUMNS where
table_name = 'table' and table_schema = '数据库';
欢迎访问我的个人博客~~~
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】Flutter适配HarmonyOS 5知识地图,实战解析+高频避坑指南
【推荐】开源 Linux 服务器运维管理面板 1Panel V2 版本正式发布
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 大数据高并发核心场景实战,数据持久化之冷热分离
· 运维排查 | SaltStack 远程命令执行中文乱码问题
· Java线程池详解:高效并发编程的核心利器
· 从“看懂世界”到“改造世界”:AI发展的四个阶段你了解了吗?
· 协程本质是函数加状态机——零基础深入浅出 C++20 协程
· 基于.net6的一款开源的低代码、权限、工作流、动态接口平台
· 一个自认为理想主义者的程序员,写了5年公众号、博客的初衷
· Claude Code 初体验 - Windows
· .NET 8 gRPC 实现高效100G大文件断点续传工具
· LinqPad:C#代码测试学习一品神器