mysql基础地总结一下

一、操作数

  • mysql中,操作数可以是:数、列、函数、表达式、null等。
  • 在mysql中 非0且非NULL都是true。
  • null只有(注意是只有。如:null+1等结果都是null)在以下表达式中才有可能使表达式值为true:
    is not null
    is nul
    <==>:当符号两端都不为NULL时,等同’=’;当一边为null,一边非null时,结果为0(null);两边都是null时,结果为1(true)

二、函数

字符串处理函数

名称示例示例结果描述
leftleft(‘12345’,3)‘123’从给定字符串左边取指定长度的子串
rightright(‘12345’,3)‘345’从给定字符串右边取指定长度的子串
lengthlength(‘12345’)3给定字符串占用的字节数
lowerlower(‘abCDEF’)‘abcdef’将给定字符串转换为小写
upperupper(‘abCDEF’)‘ABCDEF’将给定字符串转换为大写
ltrimltrim(’ abc’)‘abc’剔除字符串左边空格
rtrimrtrim('abc ')‘abc’剔除字符串右边空格
substringsubstring(‘123456’,3,2)‘34’截取字符串某部分
concatconcat(‘ab’,‘cd’,‘ef’)‘abcdef’将若干个字符串按顺序合为一个
char_lengthchar_length(‘张三’)2测出给定字符串的字符数

运用例子:

select concat('用户名是',姓名) as 姓名 from 用户;/*姓名列的值都是'用户名'+姓名列对应行的值*/

流程控制表达式与函数

流程表达式:

case表达式第一种写法:
case when 比较 then 结果 [else 默认结果] end:
select score,case when score>80 then '优秀' when scroe<60 then '不及格' else '及格' end as ShuiPing from student_score;
/*查询学生成绩,并将成绩分为及格与不及格。两列,一列为score,一列为ShuiPing*/
第二种写法:
case 带比较表达式 when 表达式1 then 结果1 [else 默认结果] end;
select case score when 80 then '得分80' else '得分不为80' end as is80 from student_score;

函数:

if(表达式1,表达式2,表达式3):当表达式1为true时,返回表达式2,否则返回表达式3.
ifnull(表达式1,表达式2)表达式1为null时返回表达式2,否则返回表达式1.
nullif(表达式1,表达式2)表达式1与表达式2的值相同时,返回null,否则返回表达式1.

汇总函数

针对于某一组。

max(表达式):求最大值。
min(表达式):求最小值.
sum(表达式):求和.
avg(表达式):求平均值。
count(表达式):从匹配结果中统计非NULL的表达式代表对象的数量。用它时,只会显示一个记录,若其他列有多个记录,也只会显示一个记录.如果只是想直到一个表中有多少个记录,可以用selcet count(1) from 表名;


三、隐式转换

只要某个表达式的类型与上下文要求的类型不符,mysql就会根据上下文环境的类型对该表达式进行类型转换。

1+'4'->5(double类型)
'1'+'4'->5(double类型)
'11abc'->11(double类型)/*截断现象*/
'abc11'->0(double类型)
where '2f'->where 2(double类型)
1>'a'=1>0=true
concat(1,2)->'12'
concat(1,'2')->'12'

在插入数据时不能发生截断现象。

四、列的属性

主键

主键:通过该键可以找到唯一的记录。主键列不能重复。主键列默认具有NOT NULL 属性。一个表必有且仅有一个主键。如果我们没有声明主键列或组合,mysql会将第一个具有not null和unique属性的列作为主键。

/*可以在创建表时,在列的类型后面加上 primary key;*/
 create table if not exists 用户(
 姓名 varchar(20),
 电话 varchar(20) primary key,
 性别 enum('男','女'),
 爱好 set('跳舞','游戏','学习')
 )comment '存储用户信息的表';
 
 /*也可以把主键单独声明*/
  create table if not exists 用户(
 姓名 varchar(20),
 电话 varchar(20),
 性别 enum('男','女'),
 爱好 set('跳舞','游戏','学习'),
 primary key(电话[,××])
 )comment '存储用户信息的表';
  /*对于多个列组合作为主键的情况,需采取第二种情况,在"电话"后加上逗号,再加组合列.*/

unique键

该键可以约束某列或某列的组合的值是唯一的。一个表可以有多个unique列。允许重复存放NULL。

/*可以在创建表时,在列的类型后面加上 unique key;*/
 create table if not exists 用户(
 姓名 varchar(20),
 电话 varchar(20) unique [key],
 性别 enum('男','女'),
 爱好 set('跳舞','游戏','学习')
 )comment '存储用户信息的表';
 
 /*也可以把键单独声明*/
  create table if not exists 用户(
 姓名 varchar(20),
 电话 varchar(20),
 性别 enum('男','女'),
 爱好 set('跳舞','游戏','学习'),
 unique [key] [自定义约束名称] (电话[,××])
 )comment '存储用户信息的表';
 约束:Mysql中一种规则,如主键,unique。
 每一个约束都可以有一个名字,这个名字为约束名称。如:主键的约束名称是primary,它是mysql默认且无法改的。但unique允许我们自定义约束名称.
  /*对于多个列组合,需采取第二种情况,在"电话"后加上逗号,再加组合列.*/

外键

  • 如果某一列与另一个表中的某一列用外键关联起来,则在保证该列的值唯一的同时,也保证该列的值在另一个表中所关联列的值存在。如:成绩表中的学号必须在信息表中存在。
  • 如果A表中的某个列或某些列依赖于B表中的某个列或者某些列,那么就称A表为父表,B表为子表.
  • 子表和父表可以用外键关联起来。
/*可以在创建表时,在列的类型后面加上 primary key;*/
 create table if not exists 用户(
 姓名 varchar(20),
 电话 varchar(20),
 性别 enum('男','女'),
 爱好 set('跳舞','游戏','学习'),
 constraint foreign key(姓名) references 另一表名(姓名) 
 )comment '存储用户信息的表';

自增

  • 在整型或浮点型类型后加上 auto_increment。当加入字段时,列值默认较上一字段加一。
  • 一个表最多有一个自增属性的列。

列注释

 create table if not exists 用户(
 姓名 varchar(20) comment '存储用户名',
 电话 varchar(20) comment '存储电话号码',
 性别 enum('男','女'),
 爱好 set('跳舞','游戏','学习'), 
 )comment '存储用户信息的表';

前补0

  • 当列的属性有 zerofill 时,会默认将宽度设置为10,不够则前补0
  • 声明属性zerofill 时,会自动声明unsigned属性h
 create table if not exists 测试(
 shuzi int(6) zerofill default 4;
 );
 然后
 select * from 测试;
 会发现 他的值时 000004

五、分组

  • 分组查询时会把相同的去重。
  • 与where的区别是,where针对所有的记录,优先级比分组高。即:先通过where条件筛选出结 果,再从结果中分组.
  • having 用来过滤组,在分组后起效;where用来过滤记录,在分组前起效。
select subject,avg(score)as '平均分' from student_score group by subject;
通过学科来分组,假设数据库中仅有语文和数学两学科,那么这个查询会显示两列,一列是subject,一列是平均分。

若subject有100个不重复的值,当我们只需要语文和数学时可以这样写:
select subject,avg(score)as '平均分' from student_score group by subject having subject in ('语文','数学');

当然也可以以多个列进行分组:
select subject,sex,avg(score)as '平均分' from student_score group by subject,sex;
/*3列,四记录,数学、语文学科与男女平均分的笛卡尔积。*/

六、查询规范

select [distinct] 列 from 表名 [where] [group by] [having] [order by] [limit];

七、数据库操作

前言

数据库:一些表的集合。

基操

show databases;/*展示当前服务器有哪些数据库*/
create database if not exists 数据库名;/*创建一个数据库*/
show warnings;/*用来展示异常*/
use 数据库名;/*在某客户端中,切换默认操作的数据库,再次登录失效*/
drop database if exists 数据库名;/*删除一个数据库*/

八、表的操作

查看数据库中的表

show tables from 数据库名;/*展示某个数据库中所有表*/
show tables;/*展示默认数据库中的所有表*/

建表

建表时必须要有字段。

在创建一个表时,至少要完成以下结构:

create table if not exists 表名(列名1 类型 [列的属性],列名2 类型 [列的属性]……)[comment '注释'];

其中列的属性可以没有,comment也可以没有,comment后跟注释,以方便告诉这个表是干什么的。

表名和列名还可以用反引号修饰:

 create table if not exists `表名`(`列名1` 类型 [列的属性],`列名2` 类型 [列的属性]……);

一个例子:

 create table if not exists 用户(
 姓名 varchar(20),
 电话 varchar(20),
 性别 enum('男','女'),
 爱好 set('跳舞','游戏','学习')
 )comment '存储用户信息的表';
 /*创建了一个名称为用户的表,其中,有4列(字段)*/```

删表

drop table if exists 表名;/*删除一个表*/

查看表结构

describe 表名;
desc 表名;
explain 表名;
show columns from 表名;
show fields from 表名;
show create table 表名 \G;/*查看创建该表的语句,搭配\G效果更好*/
/*使用上述任意一条语句即可产看表的结构*/
show create table 数据库名.表名 \G;/*用于查看默认数据库外的数据库中的表*/

注意:没有这一语句:show table 表名;

修改表

alter table 表名 rename to 新表名;/*更改表名*/
rename table 表1名 to 新表1名,表2名 to 新表2名……;/*使用该语句可以一次性改多个表的表名*/

/*若加上数据库名,则会把该表删除,并移动到数据库中,以新的名字作为数据库中的表.
如:*/
alter table 表名 rename to 数据库名.新表名;
rename table 表1名 to 数据库1名.新表1名,表2名 to 数据库2名.新表2名……;


alter table 表名 add column 列名 类型 [列的属性];/*增加列,使其称为最后一列*/
alter table 表名 add column 列名 类型 [列的属性] first;/*增加列,并添加到第一列*/
alter table 表名 add column A列名 类型 [列的属性] after B列名;/*增加列,并添加到B列后*/

alter table 表名 modify 列名 类型 属性 first;/*将某列设置为第一列*/
alter table 表名 modify A列名 类型 属性 after B列名;/*将A列的位置设置到B列的后面*/
/*如果对一个表由多个操作,可以写成alter table 表名 操作1,操作2……*/

查记录

  • 过于简单,select到底.……
结果集中列的别名:
select 姓名 [as 用户的名字] from 用户;/*起别名*/
select 姓名 用户的名字 from 用户;/*原名和别名之间可以省略as,但要加上空格*/
如果这样来查姓名列,显示结果时,会把结果的列名由姓名改为用户的名字,本次有效。

结果集去重:
select distinct 姓名 from 用户;/*返回单列去重结果集*/
select distinct A列名,B列名…… from 表名;/*返回多列去重的结果集,多列去重:如在A列中字段w与A列中字段e重复,且w对应的B列中的值x也在B列中与e对应的B列值重复*/
	如:
	专业      学院号
	软工       1
	计科       1
	软工       2
	软工       1
	双列去重后:
	专业      学院号	
	软工       1
	计科       1
	软工       2

限制结果集中记录数量:
select 姓名 from 用户 limit 4;/*可以通过limit来限制结果集中记录的个数,这个例子返回的结果集中仅有4个记录*/

结果集排序:
/*order命令使用在limit命令之后*/
select 得分 from 用户 order by 得分 [asc|desc];/*返回的结果集是以得分的升序或降序排列的,asc升序,desc降序。用order by默认升序*/
select 得分,进球数 from 用户 order by 得分 desc,进球数 [asc];
select * from 用户 order by 列名 [asc|desc],列名 [asc|desc],列名 [asc|desc]……

需要注意的语句:
select 得分+10 新得分 from 表名;
/*得分+10是一个表达式,列名和表达式都是操作数。这个例子会返回的列是得分都加10后的列,并且名字为新得分*/

where查记录

where true|false
为true则将查询的结果放入结果集。否则不放。
这个true|false通常是表达式返回的值。如:where 得分=10,将每列的值为10的记录加入结果集.
在mysql中 非0且非NULL都是true。


select 得分 from 用户 where 条件;
条件可以是:
  比较运算符:
    <>等同于'!='
    其他不再啰嗦.
  匹配运算符:
    a in(x1,x2,x3)/*a是x1,x2,x3的任一个*/
    a not in(x1,x2,x3)/*a不是x1,x2,x3的任一个*/
    a is null/*a为空*/
    a is not null/*a不为空*/
select 得分 from 用户 where 得分 is not null;/*返回得分列有值的记录*/
  and运算符:连接俩条件.
  or运算符/*and运算符优先级高于or运算符*/
  
  通配符(不能通配到NULL):
  /*如果待匹配的对象本身就有%或_,则要加上'\'
  select 用户名 from 用户 where 用户名 like '\%%';
  匹配所有以%开头的记录.*/
    %:代表任意数量的字符,包括0个字符   。
    _:代表任意一个字符。
这条语句可以匹配到用户名为 '小'、'小红'、'小刚'、'小哥哥'、'小姐姐'
select 用户名 from 用户 where 用户名 like '小%';

而这条语句只能匹配到 '小红'、'小刚'
select 用户名 from 用户 where 用户名 like '小_';
  
  


插记录

insert into 表名(列名,列名……) values(值,值);/*向表中插入一条记录.列为待插入数据的列,列与值相对,列可以不完全,没声明的数据为NULL*/

insert into 表(值,值);/*插入一条记录,这种方式需要按顺序插满*/

insert into 表名(列名,列名……) values(值,值),(列名,列名……) values(值,值),(列名,列名……) values(值,值);/*以这样的形式批量插入*/
/*对于set这种可以插入许多特定值的列,可以这样插入'值1,值2',注意只有两个单引号.*/
在向unique键等插入数据时,若不知道是否重复,可用 insert ignore 前缀来修饰插入语句。
insert ignore insert into 表名……;
当插入的数据时,若主键或unique或列组合等唯一键存在重复时,则不插入(而不是报错)。

如果存在重复,我们又想更新它们的值,则要用
insert ignore …… on duplicate key update 新值.
insert ignore insert into students(id,name) values(100,'小红') on duplicate key update id=101,name='小红';


更新记录

update 表名 set 列1=值1,列2=值2……[where 表达式];

删记录

delete from 表名 [where 表达式];
不加where会删除该表中所有数据.

九、子查询

子查询:一条查询语句中的子查询语句。
以结果集的类型可以分为:

  • 标量子查询:子查询结果集为一行一列
  • 列子查询:子查询结果集为一列多行
  • 行子查询:子查询结果集为一行多列
  • 表子查询:子查询结果集为多行多列
  • exists月not exists子查询:exists(select语句),结果集不是空时,exists表达式为真。
select subject,score from student_score where id=(select id from students where id=2001);/*标量子查询*/

select subject,score from student_score where id in(select id from students);/*列子查询*/

select subject,score from student_score where (name,sex)=(select name,sex from students);/*行子查询*/

select subject,score from student_score where (name,sex)in(select name,sex from students where id=2001);/*表子查询*/

十、连接

在mysql中,连接的语法很随意,只需在from后跟多个表即可.

select * from s1,s2;
假设s1表只有2列为a,b,且只有2条记录,s2表也只有两列b,c,且也只有2条记录。
那么这个语句返回的结果集就有2×2个记录,即:两表结果集的笛卡尔积。

上面的查询等效于
select s1.a,s1.b,s2.c,s2.d from s1,s2;
select a,b,c,d from s1,s2;
select s1.*,s2.* from s1,s2;

当连接后有过滤条件时,可以这样理解:
先从各表中筛选出满足调教的结果集,再求这些结果集的笛卡尔积。

内连接和外连接产生的笛卡尔积是一样的!!!!!!!!!

内连接和外连接产生的笛卡尔积是一样的!!!!!!!!!

内连接和外连接产生的笛卡尔积是一样的!!!!!!!!!

外连接

  • 对于外连接的两个表,即使驱动表中的记录再被驱动表中没有匹配的记录,也仍然需要加入到结果集中。
  • on过滤:对于驱动表来说,若结果集中某一记录找不到on过滤条件后的被驱动表中的记录,则仍会加入到最后的结果集中。

左外连接

select 列 from s1 left [outer] join s2 on 过滤条件 [where 过滤条件];
left 左边的表称为驱动表。

右外连接

select 列 from s1 right [outer] join s2 on 过滤条件 [where 过滤条件];
right 右边的表称为驱动表。

内连接

  • 对于内连接的两个表,如果驱动表中的记录在被驱动表中找不到匹配的记录,则该记录不会加入到结果集中。
  • on过滤在内连接中等于where。
如:当两表内连接查询时,存在条件where 一个表中的某列=另一个表中的某列 或 一个表中的某列>另一个表中的某列 等类似条件时,若一个表的结果集中的某一记录不满足这个条件,则不会出现到最终的结果集,也不会参与笛卡尔积的形成。
对于内连接的两个表,谁是驱动表,谁是被驱动表,是没有意义的。

内连接语法:
select 列 from 表1,表2;
select 列 from 表1 join 表2;
select 列 from 表1 inner join 表2;(推荐写法)
select 列 from 表1 cross join 表2;
以上四种写法等价.

内连接和外连接产生的笛卡尔积是一样的!!!!!!!!!

内连接和外连接产生的笛卡尔积是一样的!!!!!!!!!

内连接和外连接产生的笛卡尔积是一样的!!!!!!!!!

十一、并集

select t1 from s1 union select t2 from s2;
从s1表中查找出t1列,并把从s2中查找到的t2列加到t1列中。

select t1 t11 from s1 union select t2 t22 from s2;
从s1表中查找出t1、t11列,并把从s2中查找到的t2列加到t1列中,t22列加入到t11列中。

使用 union 会默认过滤掉最终结果集中重复的记录。

十二、游标

游标(cursor)就像指针一样,可以获取记录的某一条。但这个获取是从头往后以遍历的方式获得的。就像一个循环,想要获得第二条记录就要在循环的第二次跳出循环。
一般与存储函数或存储过程搭配使用。

declare 游标名称 cursor for 查询语句
open 游标名称;#打开游标意味着开始执行查询语句.
fetch 游标名 into 变量1,变量2,变量3……;#将游标当前对应的记录各列的值依次赋值给后面的变量。只是获得一条记录!!!!!如果想获取多个,需要配合循环语句。
close 游标名称;#关闭游标意味着释放游标的相关资源。end也会关闭。

#当fetch获取不到记录时,会默认停止存储函数或存储过程,并报错。
可以这样处理:
declare continue handler for not found 处理语句;
处理语句可以是一条,也可以是begin与end包裹的多条.

十三、视图

  • 视图是一个查询语句,并不是该查询语句的结果集。
  • 视图也叫虚拟表。系统不会在磁盘维护虚拟表,当需要虚拟表时,会自动调用虚拟表对应的查询语句。
  • 当视图中每条记录与查询语句表中每一条记录一一对应(不能出现多余)时,视图是可更新的,此时对视图的增删改操作,都会映射到视图所对应的表上。PS:若查询语句中包含了以下内容,则一定是不可更新的:汇总函数、distinct 、group by,having、union [all]、 子查询等。
create view 视图名 as 查询语句;/*创建视图*/
show tables;/*查看有哪些视图(也会显示表)*/
show create view 视图名;/*显示视图结构。搭配\G效果好*/
drop view 视图名;/*删除视图*/

十四、存储程序

存储程序分为:存储例程(包括存储函数、存储过程)、触发器、事件。

在mysql中,我们可以自定义变量.

set @a=1;/*定义了a变量,并赋值1*/
操作时,一定要加@,否则系统会认为这是一个操作系统变量。
同一变量可以存储不同类型的值。

也可以将标量子查询赋值给变量
select name from students where id=101 into @a;

存储例程

存储函数

创建存储函数:

create function 函数名([参数列表])
returns 返回值类型
begin 函数体; end;
/*创建一个存储函数*/
函数体:return (查询语句);,函数体中每一条语句都要加;,这个';'是单纯的';',而不是结束的标志.

/*mysql默认以';'结束语句,但该语句应在end结束,故需要修改这个默认符号*/
delimiter !;/*临时地以'!'作为语句结尾,但函数体中仍需';'。下次启动客户端就失效了。*/

存储函数的调用和普通函数一样,函数名([参数表]).
函数参数不能有默认值,故在使用时必须显示传入数值.

查、删存储函数:

show function status [like ……];/*查看存储函数*/
使用like 的原因是系统也有很多存储函数,所以要匹配名称.
show create function 函数名;/*查看函数结构*/
drop function 函数名;/*删除函数*/

存储函数体中的变量:

函数体中既可以有函数局部变量,也可以修改外部自定义变量.
create function 函数名([w int])
returns int
begin 
	declare c int;#声明一个int 类型的c变量。声明需要放在函数体首部。
	set c=5;#赋值为5
	set @a=10;#将外部自定义变量a的值改为10。
	return c;#返回
end;

函数体中判断语句:

if 表达式 then 语句列表;
[elseif 表达式 then 语句列表;]
[else 语句列表;]
end if;

如:
create function 函数名(score int)
returns varchar(10)
begin
	declare result varchar(10);
	if score>80 then
		set result='优秀';
	elseif score<60 then
		set result='不及格';
	else set result='及格';
	end if;
	return result;
end;

函数体中的循环语句:

while循环:
while 表达式 do
	语句列表;
end while;

repeat循环:
repeat
	语句列表;
until 表达式 end repeat;

loop循环:
loop
	语句列表;
end loop;
#除了用return直接结束函数以跳出loop循环外,还可以用flag与leave组合来跳出loop循环
#当然,flag与leave组合也可以用到while和repeat循环中.
loop循环:
flag:loop
	if @a=10 then
		leave flag;
end loop flag;

存储过程

存储过程创建:

create procedure 存储过程名称([参数列表])
begin
	语句列表;
end;
#不需要返回值!!!
#不需要返回值!!!
#不需要返回值!!!

存储过程的调用:

call 存储过程名(参数列表);
#语句列表中语句产生的结果集将直接显示出来.
#只有查询语句才会产生结果集.

查、删存储过程:

show procedure status[like ];#产看存储过程

drop procedure 存储过程名称;#删

判断循环等语句,参考存储函数.

存储过程中参数前缀:

[in|out|inout] 参数名 参数类型;
in:被他修饰的参数只用于读。1、可以在语句列表中通过select 参数名;来查看参数的值。2、若语句列表里有对传入的参数修改的语句,则修改生效范围只是存储函数中。如:将原本值为10的自定义变量a,当作参数b传入,若存储过程的语句列表有set b=20;,则不会修改变量a 的值。在外部查看a 的值时,仍为10。

out:被他修饰的参数只用于赋值。1、无法通过语句列表中select 参数名;来查看参数值。2、语句列表对参数的修改,也会影响到传入的参数.

inout:具备in和out的全部优点。
create procedure 存储过程名称(in t int,inout w int)
begin
	语句列表;
end;

触发器

它可以放在一个表上的预执行器.

创建:

create trigger 触发器名
{before|after}#触发器内容在何时执行
{insert|delete|update}#当表受到什么操作时会激活触发器,具体何时执行触发器内容看选择的是berfore,还是after
on 表名
for each row
begin
	触发器内容;
end;

before:在表受到特定(创建触发器时定义的)操作时,在操作之前执行触发器内容。 
after:在表受到特定(创建触发器时定义的)操作时,在操作之后执行触发器内容。

在触发器中还有old、new两个特定词,对于不同触发器激活条件,它们有不同含义。
insert:new代表准备插入的记录,old无意义。
delete:old代表删除前的记录,new无意义。
update:new代表修改后的记录,old代表修改前的记录。

查、删触发器:

show triggers;#查看当前数据库所以触发器

show create trigger 触发器名;#查看触发器结构

drop trigger 触发器名;#删除触发器

注意:

  • 触发器内容中不能有输出结果集的语句(查询语句)。
  • new代表的记录的列的值可以被修改,old的不能修改。
  • berfore触发器中,可以使用 “set new.列名 = 某个值” 的形式来修改待插入或待更新记录的某个列的值。但是不能用于after触发器。

事件

事件可以让mysql服务器在某个时间点或每隔一段时间自动执行一些语句。
创建:

create event 事件名:
on shcedule
{
	{at 某个确定的时间点|every 期望的时间间隔} [starts 开始日期和时间]
	[end 结束日期和时间]
}
do
begin
	具体的语句
end;

时间点可以是代表时间的常量(如:'2022-02-07 11:50:48')、变量、表达式()。
还要开启一项权限:
set global event_scheduler = on; 

查、删事件:

show events;#查看所有事件
show create event 事件名;#查看事件结构
drop event 事件名;#删除事件

十五、备份与恢复

备份

命令行输入:
mysqldump -u用户名 -p密码 --databases 数据库名 [表1,表2……] > 所要备份到的文件/*注意没有';'*/
mysqldump是另一个客户端,与mysql客户端不同.
把上面命令中--database 数据库名换成--all-database时,备份对象为所有数据库中所有表。

恢复

在mysql客户端输入:
source 备份文件的路径;

导出

将结果集导出至指定文件:

select * from 数据库名 into outfile '文件路径' [导出选项];

一般导出选项有:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m0038OBL-1646824922391)(6.jpg)]

导入

将指定文件中的记录导入表中

load data [local] infile '文件路径' into table 表名 [导入选项];

十六、用户与权限

  • 在安装mysql时,会让我们创建一个root用户。它具有最高权限。
  • 用户信息保存在mysql.uesr表中。名为mysql的数据库是系统创建的。
select user,host from mysql.user;/*查看mysql中有哪些用户,host列表示用户可以从哪些host上连接客户端*/

创建用户

create user '用户名'@'主机名' identified by '密码';
主机名:用于指定该用户可以从哪些主机上启动客户端,也可以填入ip。省则视为'%',即任意主机。
密码:省略则表示不需要密码。

修改密码

alter user '用户名'@'主机名' identified by '密码';

删除用户

drop user '用户名'@'主机名';

增加权限

grant 权限名称 on 权限应用范围 to '用户名'@'主机名' [with grant option];
with grant option 存在时,表示被授权用户还可以将自己的权限授予给其他用户。
权限应用范围:
1、*.*代表全局级别,即所有数据库中所有表。
2、数据库名.*表示某个数据库中所有表。
3、数据库名.表名 表示某个数据库中的某个表。

查看权限

show grant for '用户名'@'主机名';/*查看某用户的权限*/
show grant;/*查看当前用户的权限*/

移除权限

revoke 权限名称 on 应用级别 from '用户名'@'主机名';
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值