1、用户权限设置
(1)用户定义:用户名@主机域
-- 查询所有用户
use mysql;
select user,host from user;
-- 增加用户,后面是密码
create user xinjing@'%' identified by '123';
-- 删除用户
drop user xinjing@'%';
(2)权限级别:
可向用户按照全局、库、表、字段分发权限。存在于user, db, tables_priv, columns_priv, procs_priv这几个系统表中,当MySQL实例启动后加载到内存中。
-- 用户权限, mysql8.0之后不要加密码,之前要加密码!
grant all privileges on student.* to 'xinjing'@'%' with grant option;
-- 查看用户授权情况
show grants for xinjing@'%';
-- 回收用户的授权
revoke all privileges on student.* from xinjing@'%';
2、查询相关信息
-- 服务器版本信息
select version();
-- 当前数据库名
select database();
-- 当前用户名
select user();
-- 服务器的状态,变量的值,放弃的终端,废弃的连接有啥
show status;
-- 服务器的配置变量,自增的偏移量,编码方式等等
show variables;
-- 数据存放的路径
show global variables like '%datadir%';
-- 建立的数据库的存放路径
select @@datadir;
-- mysql的安装路径
select @@basedir;
3、union查询
-- union查询
use student;
show tables;
create table temp1(
uid int primary key auto_increment,
uname varchar(20) not null
)
insert into temp1(uname) values('zs'),('ls'),('ll');
create table temp2(
eid int primary key auto_increment,
age int not null
)
insert into temp2(age) values(11),(19),(20);
select * from temp1;
select * from temp2;
-- union联合查询,标头是第一个表格的
select * from temp1 union select * from temp2;
-- sql注入手段
select * from temp1 union select 1,2;
- union查询就是2条或多条查询结果合并成一个结果集;
- 要求:结果集中的列数一致就可以!
- 最终取出的列名,以第一条sql为准;
- 默认去重,不想去重要用union all;
- 非常重要的sql注入手段:因为只有当使用union语句,后接几个数字,只有相同列数,才会输出不会报错,同时可以得到表的标题!
4、分组查询
-- 分组查询
select sid,group_concat(cid),group_concat(cj order by cj desc separator ' ') from score group by sid;
- group_concat(cid):表示组合某字段
- order by <字段> esc/desc:表示升序/降序排列
- separator ' ':表示分隔符,默认是逗号
- group by sid:表示按照什么来分组
5、字符串函数
-- 字符串函数
select lower("ABcd");
select upper("ABcd");
select concat('abc','123');
select concat_ws(':','abc','123');
select substr('hello',2,2);
select length('hello');
select char_length('hello');
6、数据库的导入导出
(1)展示是否拥有导入导出的安全权限
show variables like 'secure_file_priv';
- 此处这里,我可以将其导入导出到此文件目录中!如果为NULL则是没有权限;
- 正常应该是NULL,不允许随意导入导出,所以应该在检查的时候,设置为null!!!
(2)导出文件
① 使用MySQL语句导入导出文件
-- 导出为TXT文件,有点子问题!
select * from stuinfo into outfile 'C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\stuinfov1.txt';
-- 导入TXT文件,有点子问题!
load data local infile 'C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\stuinfov1.txt';
此处没能导出导入成功,没有过于深究。应该是需要修改前面的权限,而新版本或者安全MySQL不会允许有导入导出目录,此方法不做过多解释,有大佬可以在评论区补充!感谢 ღ( ´・ᴗ・` )比心
② 使用cmd命令导出数据表
mysqldump -u root -p --all-databases>mysqldatabases.sql //导出所有数据库太大了,就不执行了
mysqldump -u root -p student>student.sql // 导出一个数据库
- Mysqldump是一个命令,在cmd里面执行!!!
-
导出的其实是sql语句,可以导出表,库,所有库。
mysqldump -u root -p student temp1>temp1.sql
③ 查看sql文件中的内容
type temp1.sql
(3)导入文件
① cmd命令下导入数据
但首先要在mysql中创建这个数据库!
mysql -u root -p1234 tt<student.sql
② mysql中导入数据的命令
但首先要在mysql中创建这个数据库!
source c:\Users\BXG\student.sql
观察到直接在Navicat里面输入是不行的!那么我们在cmd里面进入mysql,输入此命令!
导入成功!!!
PS:-- 这是Linux系统下的数据库路径
source /var/lib/mysql-files/student.sql