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 = '数据库';
欢迎访问我的个人博客~~~

浙公网安备 33010602011771号