数据库学习--DCL(数据库控制语言)

DCL

在默认情况下,只有超级管理员才能操作数据库

访问控制权限

mysql实现了复杂的访问控制和权限系统,允许

命令行链接方式

mysql -u 用户名 -p密码 -h 服务器IP地址 -P 服务器端mysql端口 -D 数据u名

当客户端链接到服务器时,mysql访问控制两个阶段

1.链接
2.验证

默认表

创建mysql的时候就会有

user表:包含账户和权限列

db表:那个用户可以访问那个数据库

table_priv和columns_priv表:包含表级和列级操作

procs_priv:包含存储函数和存储过程的表

创建账户:

create user 用户名(格式:username@访问域名) identified by 密码[必须是明文,字符串]

用户名:

username@%

username@%.alibaba.com 只能访问alibaba.com 域名下的东西	

省略@,表示%

通配符(%)和(-)

百分号或者-表示在任意部位都可以修改

删除用户

drop username@访问域名

drop username@访问域名,username1@访问域名,username2@访问域名

delete from user where user=username

查看用户权限

show grants for username@访问域名

点之前的部分表示数据库,(.)之后的部分表示表上的结果,

设置权限

grant 权限1,权限2【all:所有】on 库.表/库/表 to user 【 identified by 密码[必须是明文,字符串]】 【require 链接数据的方式】 【with [grant option | resource option]】(一般都写)

grant all on ( * . *) to username@访问域名 with grant option;

设置指定权限

create user rfc indentified by ‘密码’

grant select,update,delete on alibaba.* to rfc

执行无权利错误 1142(42000)

允许远程链接

grant all privileges on * . * to ‘root’@’%’ indentfied by ‘mysql’ with grant option; 设置权限密码用户名

刷新权限

flush privileges;

撤销权限

revoke privilege_type [(column_list)],[privilege_type [(column_list)]] on object_type.privilege_level from user,[user1,user2]

示例:

revoke select on * . * from user

修改密码

1.登录MySQL

set password for 用户名@localhost =password(‘新密码’)

2.登录MySQL

update user set password=password(‘密码’) where user=‘root’ and host=‘localhost’

刷新

3.用mysqladmin

mysqladmin -u用户名 -p旧密码 password 新密码

4.忘记root密码或者初始化密码

在windows上
 1.关闭正在运行的mysql【必须】
 2.打开DOS窗口,转到mysql\bin
 3.输入
 	8.0版本以前:mysqld --skip-grant-tables   【跳过权限检查】
 	8.0版本:mysqld --console --sjip-grant-tables --shared-memory
 4.再打开一个DOS窗口,转到mysql\bin目录
 5.输入mysql回车,若成功,将出现mysql提示符
 6.链接数据库: use mysql
 7.改密码
 	update user set password=password('密码') where user='root' and host='localhost'
 8.刷新权限
 	flush privileges;
 9.退出
 10.重启电脑早进入,修改完成

数据库备份

mysqldump

mysqldump -u 用户名 -p 密码 [-hlocalhost] 数据库名 > 输出的文件.sql

仅备份数据库结构

mysqldump -u 用户名 -p 密码 [-hlocalhost] --no-data 数据库名 > 输出的文件.sql

仅备份数据库数据

mysqldump -u 用户名 -p 密码 [-hlocalhost] --no-create-info 数据库名 > 输出的文件.sql

导出多个数据库

mysqldump -u 用户名 -p 密码 [数据库1,数据库2] > [输出的文件1.sql,输出的文件2.sql]

所有的:

mysqldump -u 用户名 -p 密码 --all-database > [all_dbs_dump_files.sql]

导入数据库

1、首先建空数据库
	mysql>create database abc;
2、导入数据库
    方法一:
        (1)选择数据库
            mysql>use abc;
        (2)设置数据库编码
            mysql>set names utf8;
        (3)导入数据(注意sql文件的路径)
            mysql>source /home/abc/abc.sql;
    方法二:
        mysql -u用户名 -p密码 数据库名 < 数据库名.sql
        #mysql -uabc_f -p abc < abc.sql

查询

查询数据库

show databases;
 删除数据库:
	drop database sc;
查询表的结构:desc 表名;
查看基本表:show tables;

查询列

show columns from 表名;
show columns from 表名 like '关键字';
show columns from 表名 like '%e%';
show columns from 表名 where Field="关键字";

查询用户

select user from mysql;
当前用户:
select user();
select current_user();

当前登录的用户
select user,host,db,command from information_schema.processlist;[临时表]

数据库维护

分析表

analyze table 表名,【表名2,...】;
分析结果:
Table:表名;
Op:执行的操作
Msg_type:信息类型,状态/警告/错误
Msg_text:显示信息

优化表

optimize table 表名;

检查表

check table 表名;
只管检查,不管修复

修复表

尝试修复,不一定能修好
repair table 表名;
显示表是否修复;

猜你喜欢

转载自blog.csdn.net/qq_43320162/article/details/84669023