学习MySQL的四万字 笔记总结【全面整理+详细解释,阿里一线架构师技术图谱

所有的创建和删除操作尽量加上判断(if exists 或者 if not exists),以免报错。

3. MySQL 数据管理

===========================================================================

3.1 外键约束(不推荐!)


方式一:在创建表的时候,增加约束(代码操作)

几个单词需要记一下:

  • constraint 约束 , foreign key 外键 ,references 引用。

– 创建grade表

CREATE TABLE grade (

gradeid INT(10) NOT NULL AUTO_INCREMENT COMMENT ‘年级id’,

gradename VARCHAR(50) NOT NULL COMMENT ‘年级名称’,

PRIMARY KEY (gradeid)

)ENGINE=INNODB DEFAULT CHARSET=utf8

– 学生表的gradeid字段,要去引用年级表的gradeid

– 1. 定义外键key。

– 2. 给外键添加约束(执行引用)。

CREATE TABLE IF NOT EXISTS student (

id INT(4) NOT NULL AUTO_INCREMENT COMMENT ‘学号’,

name VARCHAR(30) NOT NULL DEFAULT ‘匿名’ COMMENT ‘姓名’,

pwd VARCHAR(30) NOT NULL DEFAULT ‘123456’ COMMENT ‘密码’,

sex VARCHAR(2) NOT NULL DEFAULT ‘女’ COMMENT ‘性别’,

birthday DATETIME DEFAULT NULL COMMENT ‘出生日期’,

gradeid INT(10) studentNOT NULL COMMENT ‘学生的年级’,

address VARCHAR(100) DEFAULT NULL COMMENT ‘家庭住址’,

email VARCHAR(50) DEFAULT NULL COMMENT ‘邮箱’,

PRIMARY KEY (id),

KEY FK_gradeid (gradeid),

CONSTRAINT FK_gradeid FOREIGN KEY (gradeid) REFERENCES grade (gradeid)

)ENGINE=INNODB DEFAULT CHARSET=utf8

注意:删除外键关系的表的时候,必须要先删除引用别人的表(从表),再删除被引用的表。否则报错如下:

在这里插入图片描述

方式二:创建表成功后,添加外键约束

格式:

  • alter table add constraint 约束名 foreign key (作为外键的列) references 那个表(哪个字段)

– 创建grade表

CREATE TABLE grade (

gradeid INT(10) NOT NULL AUTO_INCREMENT COMMENT ‘年级id’,

gradename VARCHAR(50) NOT NULL COMMENT ‘年级名称’,

PRIMARY KEY (gradeid)

)ENGINE=INNODB DEFAULT CHARSET=utf8

– 创建student表

CREATE TABLE IF NOT EXISTS student (

id INT(4) NOT NULL AUTO_INCREMENT COMMENT ‘学号’,

name VARCHAR(30) NOT NULL DEFAULT ‘匿名’ COMMENT ‘姓名’,

pwd VARCHAR(30) NOT NULL DEFAULT ‘123456’ COMMENT ‘密码’,

sex VARCHAR(2) NOT NULL DEFAULT ‘女’ COMMENT ‘性别’,

birthday DATETIME DEFAULT NULL COMMENT ‘出生日期’,

gradeid INT(10) NOT NULL COMMENT ‘学生的年级’,

address VARCHAR(100) DEFAULT NULL COMMENT ‘家庭住址’,

email VARCHAR(50) DEFAULT NULL COMMENT ‘邮箱’,

PRIMARY KEY (id)

)ENGINE=INNODB DEFAULT CHARSET=utf8

– 创建表的时候没有外键关系:

ALTER TABLE student ADD CONSTRAINT FK_gradeid FOREIGN KEY(gradeid) REFERENCES grade (gradeid)

**注意:

以上的操作都是物理外键,数据库级别的外键,我们不建议使用!因为,引用过多删除表的时候很难删除!因此,我们不建议使用(避免数据库过多造成的困扰,这里了解即可~) 。**

在这里插入图片描述

3.2 DML语言


数据库意义:数据存储,数据管理。

DML语言:数据操作语言。

  • insert into

  • update 表名 set 字段=‘value’

  • delete from

3.3 insert into 添加


格式:

  • **插入语句(添加):

INSERT INTO 表明 ([字段名1,字段名2 ,…]) VALUES (‘值1’,‘值2’,…) , (‘值1’,‘值2’,…) , …;**

– 插入语句(添加)

– insert into 表明 ([字段名1,字段名2 ,…]) values (‘值1’,‘值2’,…);

INSERT INTO grade (gradename) VALUES(‘高三三班’)

在这里插入图片描述

如果不写表的字段,它就会一一匹配。容易报错:does’t match (不匹配)。

在这里插入图片描述

在这里插入图片描述

3.4 update 表名 set 字段=‘value’ 修改


格式:

  • update 表名 set 字段1=‘new_value1’, 字段2=‘new_value2’ , … where 条件

– 格式:update 表名 set 字段=‘new_value’ where 条件

UPDATE student SET name=‘匿名’ WHERE id = 1;

– 如果不设置where条件,就会默认修改全部

UPDATE student SET name=‘匿名’;

– 修改多个属性(字段值),逗号隔开

UPDATE student SET name=‘张三’,email=‘123456@qq.com’ WHERE id >= 2;

where 运算符 ,常用的案例,如下表格:

在这里插入图片描述

注意:

  • new_value,不一定是一个具体的值,也可以是个变量,函数调用等。如下:

– CURRENT_TIME 获得当前时间

UPDATE student SET birthday=CURRENT_TIME WHERE name=‘张三’ AND sex=‘男’

在这里插入图片描述

3.5 delete from删除 ,truncate 清空


delete语法:

  • delete from 表名 where 条件;

注意!!!一定添加条件,不添加条件就是全部删除。

– 删除student表的全部数据,不过通过这种方式全部删除数据,我们不推荐!我们使用truncate来清空数据。

DELETE FROM student

– 删除id为1的数据

DELETE FROM student WHERE id = 1;

  • truncate,作用:完全清空一个数据库表,表的结构和索引约束不会变!

– 清空表的数据

TRUNCATE student

delete from 表名 和 truncate 表名 的区别

相同点:

  • 都能删除数据,都不会删除表结构。

不同点:

  • truncate – 重新设置,自增列,计时器会归零。

  • truncate – 不会影响事务。

例如:delete from 表名 删除所有数据后,就不会对自动递增重新设置。

在这里插入图片描述

在这里插入图片描述

4. DQL查询数据

========================================================================

4.1 DQL(Data Query Language:数据查询语言)


  • 所有的查询操作都用它 select 。

  • 简单的查询,复杂的查询它都能做到。

  • 在数据库中,它是最重要的,使用频率最高的。

4.2 指定查询字段


select 字段 from 表名 和 别名

– 查询全部 select * from 表名

– select 字段 from 表名

SELECT id,name FROM student

– 别名:as ,可以字段起别名,也可以给表名起别名

SELECT id AS 学号,name AS 学生名字 FROM student AS 学生

在这里插入图片描述

函数:concat(a,b)

– 函数 concat(a,b),将a拼接到b上面

SELECT CONCAT(‘姓名:’,coll) FROM test

– 函数执行后的结果也是可以其别名的

SELECT CONCAT(‘姓名:’,coll) AS 数字 FROM test

在这里插入图片描述

去重:distinct

作用:去除select 查询出来的结果中重复的数据,重复的数据只有一条。

– distinct 去重,需要注意的是要将distinct放到最前面

– select distinct 字段 [as ‘别名’] from 表名

SELECT DISTINCT coll AS ‘数字’ FROM test

select语句还可以做加减法,查看版本,查看步长,如下:

在这里插入图片描述

4.3 where 条件


· 作用:检索数据中符合条件的值。

逻辑运算符

在这里插入图片描述

模糊查询:比较运算符

在这里插入图片描述

  • like ,% ,_ 这三个符号的使用:

– like, %(代表0到任意个字符), _(后面有一个字符)

– 查询开头有王的

SELECT * FROM student WHERE name LIKE ‘王%’;

– 查询开头是王,几个 _符号,后面加几个字

SELECT * FROM student AS s WHERE name LIKE ‘王_’;

SELECT * FROM student WHERE name LIKE ‘王__’

– %xxx%,如下查询所有包含三的内容

SELECT * FROM student WHERE name LIKE ‘%三%’

在in的范围内查询内容:

– 在规定的范围in内查询内容

SELECT name,id FROM student WHERE id IN (3,4,5,6)

查询为null 或 not null 的用法:

– null:查询为null的内容

– 查询pwd为null和空字符串的数据

SELECT * FROM student WHERE pwd IS NULL OR pwd = ‘’;

– not null:查询不为null的内容

SELECT * FROM student WHERE pwd IS NOT NULL

4.4 联表查询


注意:

模棱两可,如果进行联表查询,两个表的字段名相同,一定要指定是那个表的,不要产生模棱两可的情况。

在这里插入图片描述

– inner join

SELECT s.id,s.name,r.math,r.English FROM student AS s

INNER JOIN result AS r

WHERE s.name = r.name

– right join

SELECT s.id,s.name,math,English FROM student s

RIGHT JOIN result r

ON s.name = r.name

– left join

SELECT s.id,s.name,math,English FROM student s

LEFT JOIN result r

ON s.name = r.name

| 操作 | 描述 |

| — | — |

| inner join | 如果表中至少有一个匹配,就返回行。 |

| left join | 会从左表中返回所有的值,即使右表中没有匹配, |

| right join | 会从右表中返回所有的值,即使左表中没有匹配, |

join on连接查询 和 where 等值查询的区别。

  • join on 是一个具体的语法。on后面跟判断条件

  • where 就是等值查询。

  • 结果两者还是相同的。

如果查询多个表中的join数据,要循环递进的查询,如下解释:

在这里插入图片描述

自连接 :

  • 自己的表和自己的表连接。

  • 核心:一张表拆分为两张一样的表即可。

– 把一张表,分成两个表操作,下面分成了父和子栏目。

SELECT a.categoryName AS ‘父栏目’,b.categoryName AS ‘子栏目’

FROM category AS a,category AS b

WHERE a.categoryid = b.pid

在这里插入图片描述

4.5 分页(limit) 和 排序(order by)


在这里插入图片描述

排序: order by 要排序的字段 [asc/desc] 。

SELECT s.id,s.name,math,english FROM student s

LEFT JOIN result r

ON s.name = r.name

ORDER BY id DESC – 逆序显示

分页:limit 查询起始下标 ,pageSize 。

在这里插入图片描述

4.6 子查询 和 嵌套查询


  • 本质:在where语句中嵌套一个子查询语句。

在这里插入图片描述在这里插入图片描述

子查询和嵌套查询本质上就是由里到外的一个运行代码过程。

4.7 分组(group by) 和 过滤(having)


group by 通过什么字段来分组。

SELECT name,SUM(math) AS 数学总分, AVG(english) AS 英语平均分

FROM result AS r

WHERE r.math >= 60

GROUP BY name

HAVING 数学总分 > 60

where和having的区别:

where:

  • where是一个约束声明,使用where来约束来自数据库的数据;

  • where是在结果返回之前起作用的;

  • where中不能使用聚合函数。

having:

  • having是一个过滤声明;

  • 在查询返回结果集以后,对查询结果进行的过滤操作;

  • 在having中可以使用聚合函数。

4.8 select 语法格式 总结


总体上,select查询语法格式为:

在这里插入图片描述

在这里插入图片描述

5. MySQL 函数

=========================================================================

函数这节最好依靠官方给的文档来操作。

官方:https://dev.mysql.com/doc/refman/8.0/en/built-in-function-reference.html

5.1 常用函数


数学常用函数:

– abs(): 取绝对值

SELECT ABS(-8)

– ceiling(): 向上取整,天花板

SELECT CEILING(4.1)

– floor():向下取整,地板

SELECT FLOOR(4.9)

– rand(): 返回一个0~1之间的随机数

SELECT RAND()

– sign(): 判断一个数的符号,(注意:0是0,负数返回-1,整数返回1)

SELECT SIGN(0)

SELECT SIGN(-10)

SELECT SIGN(10)

字符串常用函数:

– 字符串函数

– char_length(): 返回字符串长度

SELECT CHAR_LENGTH(“12356张三”)

– concat(“str1”,“str2”): 拼接字符串

SELECT CONCAT(“张三”,“您好啊”)

– insert(): 查询,替换

SELECT INSERT(‘李四,hello,world’,1,2,‘张三’)

– lower() ,upper(): 转大小写

SELECT LOWER(‘ASZXCF’)

SELECT UPPER(‘sdfsd’)

– instr(‘str’,‘s’): s在str中的索引位置

SELECT INSTR(‘张三123455’,‘2’)

– replace(‘str’,‘s’,‘S’): 替换出现的指定字符串

SELECT REPLACE(‘你好张三,欢迎来到北京’,‘张三’,‘李四’)

– substr(‘str’,‘1’,‘2’): 返回指定的子字符串

SELECT SUBSTR(‘你好张三,欢迎来到北京’,‘3’,‘6’) – 注意不是3到6,而是第三个开始后面的6个。

– reverse(‘str’): 反转字符串

SELECT REVERSE(‘你好张三,欢迎来到北京’)

在这里插入图片描述

时间和日期函数:

– 时间和日期函数

– current_date() 和 curdate(): 获取当前日期 (仅有年月日)

SELECT CURRENT_DATE()

SELECT CURDATE()

– now(): 获取当前时间,比较全(年月日时分秒)

SELECT NOW()

– localtime(): 获取本地时间

SELECT LOCALTIME()

– sysdate(): 获取系统时间

SELECT SYSDATE()

– 单独输出年月日时分秒

SELECT YEAR(NOW())

SELECT MONTH(NOW())

SELECT DAY(NOW())

SELECT HOUR(NOW())

SELECT MINUTE(NOW())

SELECT SECOND(NOW())

系统函数:

– 系统函数

– system_user() 和 user(): 客户端提供的用户名和主机名

SELECT SYSTEM_USER()

SELECT USER()

– version(): 查看mysql版本

SELECT VERSION()

5.2 聚合函数 (常用)


| 函数名称 | 描述 |

| — | — |

| count() | 计数 |

| sum() | 求和 |

| avg() | 平均值 |

| max() | 最大值 |

| min() | 最小值 |

| … | … |

count(): 想查询一个表中有多少个记录,就是用count()。

– 聚合函数

– count(指定列(字段)): 查看数据的数量,但会忽略所有的null值

SELECT COUNT(categoryName) FROM category

– count(*): 查看所有代码行,*就不会忽略null值

SELECT COUNT(*) FROM category

– count(l): 将一个代码行看为 1来查询。也不会忽略null值

SELECT COUNT(1) FROM category

在这里插入图片描述

求和,平均分,最大值,最小值:

– sum():求和

SELECT SUM(pid) AS 总和 FROM category

– avg():平均分

SELECT AVG(pid) AS 平均分 FROM category

– max():最大值

SELECT MAX(pid) AS 最大值 FROM category

– min():最小值

SELECT MIN(pid) AS 最小值 FROM category

其实,使用函数大多数情况都是后面跟着列表字段,来计算整个字段的函数值。

5.3 数据库级别的 MD5()加密函数


什么是MD5?

  • MD5是一种不可逆的加密算法,主要增强算法复杂度和不可逆性。

  • MD5 不可逆,具体的值的md5值是一样的。

  • MD5 破解网站的原理,背后有一个字典,MD5加密后的值。

– 铭文密码

INSERT INTO testmd5 VALUES (1,‘张三’,‘123456’),(2,‘李四’,‘123456’),(3,‘王五’,‘123456’)

– md5()函数,通过使用md5函数加密。

UPDATE testmd5 SET pwd=MD5(pwd) – 加密全部的密码

– 插入的时候,进行加密。

INSERT INTO testmd5 VALUES (4,‘老鬼’,MD5(‘123456’))

– 如何校验:将用户传递进来的密码,进行md5加密,然后比对加密的值。

SELECT * FROM testmd5 WHERE name = ‘老鬼’ AND pwd=MD5(‘123456’)

对于MD5加密,我们只需要知道加密用户的密码,然后校验用户传进来的密码进行比较,就像下面一样。

– 如何校验:将用户传递进来的密码,进行md5加密,然后比对加密的值。

SELECT * FROM testmd5 WHERE name = ‘老鬼’ AND pwd=MD5(‘123456’)

6. 事务

===================================================================

6.1 什么是事务?什么是ACID?


将一组sql放在一个批次中去执行~,要么都执行成功,要么都执行失败。

在这里插入图片描述

事务原则:

**ACID原则特性 :

原子性(Atomicity) ,一致性(Consistency) , 隔离性(Isolation) ,持久性(Durability) (脏读,幻读…)**

一个支持事务(Transaction)的数据库,必须要具备以上四种特性,否则在事务过程(Transaction processing) 当中无法保证数据的正确性,交易过程极可能达不到交易方的要求。

原子性(Atomicity):

要么都成功,要么都失败。

在这里插入图片描述

一致性(Consistency):

事务前后的数据完整性要保证一致。

在这里插入图片描述

持久性(Durability):

**事务一旦提交则不可逆,被持久化到数据库中。

事务如果已经提交,就不可逆了。**

在这里插入图片描述

隔离性(Isolation)

事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,事务之间要相互隔离。

在这里插入图片描述

隔离所导致的一些问题:

脏读:

指一个事务读取了另外一个事务未提交的数据。

在这里插入图片描述

不可重复读:

在一个事务内读取表中的某一行数据,多次读取结果不同。(这个不一定是错误,只是某些场合不对)

在这里插入图片描述

虚读(幻读):

它是指在一个事务内读取到了别的事务插入的数据,导致前后读取数量总量不一致。

在这里插入图片描述

6.2 事务的 执行流程


SET autocommit 用来开启或关闭事务,默认是开启。

– 事务

– mysql是默认开启事务自动提交的

SET autocommit = 0 – 关闭事务

SET autocommit = 1 – 开启事务(设置为1,为默认开启)

事务执行的流程:

– 转账

CREATE DATABASE IF NOT EXISTS shop CHARACTER SET utf8 COLLATE utf8_general_ci

USE shop

CREATE TABLE account (

id INT(3) NOT NULL AUTO_INCREMENT,

name VARCHAR(30) NOT NULL,

money DECIMAL(9,2) NOT NULL,

PRIMARY KEY (id)

)ENGINE=INNODB DEFAULT CHARSET=utf8

– innodb是支持事务的,myisem好像有点版本不支持

INSERT INTO account (name,money) VALUES (‘A’,2000.00),(‘B’,100000.00)

– 模拟转账:事务

SET autocommit = 0 – 关闭自动提交

START TRANSACTION – 开启事务

UPDATE account SET money=money-500 WHERE name = ‘A’ – A减500

UPDATE account SET money=money+500 WHERE name = ‘B’ – B加500

COMMIT; – 提交事务,提交后就被持久化了,再回滚就无法回滚了。

ROLLBACK; – 如果出错,就执行回滚。

SET autocommit = 1; – 恢复默认值

在这里插入图片描述

了解保存点:

SAVEPOINT 保存点名 – 设置一个事务的保存点

ROLLBACK TO SAVEPOINT 保存点名 – 回滚到保存点

RELEASE SAVEPOINT 保存点名 – 删除撤销保存点

7. 索引

===================================================================

MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。提取句子主干,就可以得到索引的本质:索引是数据结构。

7.1 索引的分类


在一个表中,主键索引只能有一个,唯一索引可以有多个。

  • 主键索引 (primary key)

  • 唯一的标识,主键的内容是不可重复,只能有一个列作为主键。

.

  • 唯一索引 (unique key)

  • 避免重复的列出现,唯一索引可以重复,多个列都可以标识为 唯一索引。

.

  • 常规索引 (key/index)

  • 默认的:index,key关键字来设置。

.

  • 全文索引 (fulltext)

  • 在特定的数据库引擎下才有(MyISAM,现在好像都有了。)

  • 快速定位数据。

索引使用语法:

  • alter table 表名 add 键名 index 索引名(字段名)

  • show index from 表名 显示表中索引信息

  • explain 分析sql执行的状况

– 索引的使用

– 1,在创建表的时候给字段增加索引

– 2,创建完毕后,增加索引

– show index from 表名 显示表中索引信息

SHOW INDEX FROM student

– alter table 表名 add 键名 index 索引名(字段名)

– 增加一个唯一索引

ALTER TABLE student ADD UNIQUE INDEX address(name)

– 增加一个全文索引

ALTER TABLE school.student ADD FULLTEXT INDEX name(name)

– explain 分析sql执行的状况

EXPLAIN SELECT * FROM student; – 非全文索引

EXPLAIN SELECT * FROM student WHERE MATCH(name) AGAINST(‘张’)

索引使用包括:

第一种,创建表的时候添加索引。

第二种,使用alter来修改添加索引。

第三种,使用:create index 索引名 on 表(字段)。

一般批量添加索引我们都是用第三种。

7.2 测试索引


测试前准备10万条数据:

在student库中,创建一个app_user表格:

CREATE TABLE school.app_user1 (

id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,

name VARCHAR(50) DEFAULT ‘’ COMMENT ‘用户名称’,

email VARCHAR(50) NOT NULL COMMENT ‘用户邮箱’,

phone VARCHAR(20) DEFAULT ‘’ COMMENT ‘手机号’,

gender TINYINT(4) UNSIGNED DEFAULT 0 COMMENT ‘性别(0:男,1:女)’,

password VARCHAR(100) NOT NULL COMMENT ‘密码’,

age TINYINT(4) DEFAULT 0 COMMENT ‘年龄’,

create_time DATETIME DEFAULT CURRENT_TIMESTAMP,

update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

PRIMARY KEY (id)

) ENGINE=INNODB CHARSET=utf8 COLLATE=utf8_general_ci;

我们在想要定义创建数据的时间或更新数据时的修改时间,通常会这样定义:

在这里插入图片描述

使用mysql函数插入10万条数据:

– 插入100万条数据

DELIMITER $$ – 写函数之前必须要写的标志

CREATE FUNCTION mock_data()

RETURNS INT

BEGIN

DECLARE num INT DEFAULT 1000000;

DECLARE i INT DEFAULT 0;

WHILE i<num DO

– 插入语句

INSERT INTO app_user (name,email,phone,gender,password,age)VALUES (CONCAT(‘用户’,i),‘147258369@qq.com’,CONCAT(‘18’,FLOOR(RAND()*((999999999-100000000)+100000000))),FLOOR(RAND()*2),UUID(),FLOOR(RAND()*100));

SET i = i+1;

END WHILE;

RETURN i;

END;

SELECT mock_data();

– uuid()可以生成一个uuid码

给100万条数据添加索引,提高查询速度。

  • 语法格式:create 索引名 索引名 on 表(字段)

SELECT * FROM app_user WHERE name = ‘用户9999’; – 不加索引前执行速度为,1秒左右

EXPLAIN SELECT * FROM app_user WHERE name = ‘用户9999’; – 不加索引前rows的数值为991749

– id_表名_字段名

– create 索引名 索引名 on 表(字段)

CREATE INDEX id_app_user_name ON app_user(name) – 这条语句会给我们100w条数据都添加索引

SELECT * FROM app_user WHERE name = ‘用户9999’ – 加索引后执行速度为:0.03秒左右

EXPLAIN SELECT * FROM app_user WHERE name = ‘用户9999’ – 这里加了索引后rows的数值为1

通过explain 来查看语句,可得知,不添加索引查询的rows值很高!添加索引后的值仅仅是1 。

在这里插入图片描述

在这里插入图片描述

我们想要查看刚刚我们创建(CREATE INDEX id_app_user_name ON app_user(name))的id_app_user_name,可以去indexs查看。

在这里插入图片描述

因此,索引在面对大量数据时,是非常重要的!!

7.3 索引原则


  • 索引不是越多越好

  • 不要对经常变动的数据加索引

  • 小数据量的表不需要加索引

  • 索引一般加在常用来查询的字段上

索引的数据结构

Hash类型的索引

Btree:InnoDB的默认数据结构

对于MySQL索引背后的数据结构和算法原理:

http://blog.codinglabs.org/articles/theory-of-mysql-index.html

我们目前学习的是业务级别的MySQL,此外还有运维级别的MySQL。

8. 权限管理和备份

========================================================================

8.1 用户管理


SQL yog 可视化管理

添加用户:

在这里插入图片描述

添加权限:

在这里插入图片描述

删除用户:

在这里插入图片描述

注意点:

在这里插入图片描述

sql命令操作,添加用户和权限

  • mysql数据库中有一个user表,记录着用户内容。

  • sql命令操作本质上:就是对这张表进行增删改查。

命令行创建用户,修改密码等基本操作:

注意:mysql 8.0 版本的语法有所不同!

– 创建用户

– create user 用户名 identified by ‘密码’

CREATE USER zhangsan IDENTIFIED BY ‘123456’

– 修改密码(修改当前用户密码)

– set password = password(‘密码’)

SET PASSWORD = ‘123456’; – mysql 8.0 版本后,设置密码为set password = ‘密码’

– 修改密码(修改指定用户密码)

– SET PASSWORD FOR zhangsan = PASSWORD(‘zhangsan123’)

SET PASSWORD FOR zhangsan@‘%’ = ‘zhangsan123’ – mysql 8.0 版本后,设置密码为set password or 用户名@‘对应的Host’ = ‘密码’

– 重命名

– rename user 原名字 to 新名字

RENAME USER zhangsan TO zhangsan2

赋予权限,权限管理等sql命令操作:

– 用户授权

– ALL PRIVILEGES :除了给别人授权(grant),其他都能干

GRANT ALL PRIVILEGES ON . TO zhangsan

– GRANT ALL PRIVILEGES ON . TO zhangsan@‘%’ with grant option 后面的with grant option指的是赋予授予别人权限的权限

– 查询权限

– show grants for 用户名 – 查询指定用户的权限

SHOW GRANTS FOR zhangsan

SHOW GRANTS FOR root

– 撤销权限

– revoke 撤销哪些权限 在那个库中撤销 给谁撤销

REVOKE ALL PRIVILEGES ON . FROM zhangsan

– 删除用户

DROP USER zhangsan

mysql.user表中Host为%的含义

在这里插入图片描述

Host列指定了允许用户登录所使用的IP,比如user=root Host=192.168.1.1。这里的意思就是说root用户只能通过192.168.1.1的客户端去访问。

而%是个通配符,如果Host=192.168.1.%,那么就表示只要是IP地址前缀为“192.168.1.”的客户端都可以连接。如果Host=%,表示所有IP都有连接权限。

这也就是为什么在开启远程连接的时候,大部分人都直接把Host改成%的缘故,为了省事。

8.2 MySQL 备份


为什么要备份?

  • 保证重要的数据不丢失。

  • 数据转移。

MySQL 数据库备份的方式:

  • 第一种方式:直接拷贝物理文件。mysql中的data文件中的数据库或表。

  • 第二种方式:在类似Sqlyog的可视化工具中手动导出。

  • 第三种方式:使用命令行导出 mysqldump 命令行进行导出备份。

.

第一种方式备份:就是去对应目录data下,直接拷贝对应库或表。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

最后

金三银四马上就到了,希望大家能好好学习一下这些技术点

学习视频:

大厂面试真题:

SHOW GRANTS FOR root

– 撤销权限

– revoke 撤销哪些权限 在那个库中撤销 给谁撤销

REVOKE ALL PRIVILEGES ON . FROM zhangsan

– 删除用户

DROP USER zhangsan

mysql.user表中Host为%的含义

在这里插入图片描述

Host列指定了允许用户登录所使用的IP,比如user=root Host=192.168.1.1。这里的意思就是说root用户只能通过192.168.1.1的客户端去访问。

而%是个通配符,如果Host=192.168.1.%,那么就表示只要是IP地址前缀为“192.168.1.”的客户端都可以连接。如果Host=%,表示所有IP都有连接权限。

这也就是为什么在开启远程连接的时候,大部分人都直接把Host改成%的缘故,为了省事。

8.2 MySQL 备份


为什么要备份?

  • 保证重要的数据不丢失。

  • 数据转移。

MySQL 数据库备份的方式:

  • 第一种方式:直接拷贝物理文件。mysql中的data文件中的数据库或表。

  • 第二种方式:在类似Sqlyog的可视化工具中手动导出。

  • 第三种方式:使用命令行导出 mysqldump 命令行进行导出备份。

.

第一种方式备份:就是去对应目录data下,直接拷贝对应库或表。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-mNGxS0q6-1712023713230)]
[外链图片转存中…(img-IeJl5Pzq-1712023713231)]
[外链图片转存中…(img-sQdFzop6-1712023713231)]
[外链图片转存中…(img-lIAKYhZW-1712023713232)]
[外链图片转存中…(img-xKViM5l3-1712023713232)]
[外链图片转存中…(img-fhXEFVjT-1712023713233)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-iZe50wM6-1712023713233)]

最后

金三银四马上就到了,希望大家能好好学习一下这些技术点

学习视频:

[外链图片转存中…(img-IfcNotNi-1712023713233)]

大厂面试真题:

[外链图片转存中…(img-iDwvbYHE-1712023713234)]

  • 27
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值