先说一些废话

很多时候深入学习固然很重要,但是想要写下一篇给新手都能看得懂看的很香,并且老鸟可以查漏补缺的的练习博客,还是挺有难度,
所以今天尝试写一些关于MySQL的语句练习大全,供想要从零开始练习MySQL的新手们去学习。

需要注意的是写代码是一种脑力和操作并行的技术,建议没怎么写过SQL的人一定要先从命令行的语句练习开始,这样才能够更好的加深印象!!!

所有的语句我会写一些基本的注释,需要深入学习的童鞋可以参考单个知识点继续了解。

当然今天列出的所有语句都有测试过,但是不确保没有手误打错的时候,如果有什么错误的地方请在评论区指出,非常感谢!!!

提示信息:本文测试所使用的MySQL版本是**_5.7.26_**

其余废话不多说直接上代码

连接MySQL

  1. # 用户名和密码要紧跟-u-p不能有空格
  2. mysql -u用户名 -p密码
  3. # 如果不想明文显示密码,执行命令后会提示输入密码,并且不会明文显示密码
  4. mysql -u 用户名 -p

数据库

  1. # 查看所有的数据库
  2. SHOW DATABASES;
  3. # 创建一个数据库
  4. CREATE DATABASE test;
  5. # 删除一个数据库
  6. DROP DATABASE test;
  7. # 使用数据库
  8. USE test;

  1. # 查看所有的表
  2. SHOW TABLES;
  3. # =======================================================
  4. # 知识点提示!!!
  5. # 主键约束(PRIMARY KEY):没有明确的概念定义,是唯一性索引的一种,不能重复,一个表只能有一个主键
  6. # 自动增加(AUTO_INCREMENT):自动增加(需要和主键PRIMARY KEY一起使用)
  7. # 非空约束(NOT NULL):要求被装饰的字段非空
  8. # 外键约束(FOREIGN KEY):用来在表与表的数据之间建立链接,它可以是一列或者多列
  9. # 举个栗子帮助理解:班级表,10个班级,年级表,6个年级,每个班级只能所属1个年级,
  10. # 且必须是这6个年级中的1个,这个时候班级表就需要用年级表来建立外键,确保数据一致且完整
  11. # 唯一约束(UNIQUE KEY):指所有记录中的字段的值不能重复出现,可以联合非空UNIQUE(字段1,字段2)
  12. # 数据类型,务必深入了解,对数据库的优化非常重要
  13. # AS 别名或者连接语句的操作符
  14. # =======================================================
  15. # 创建一个表,拥有主键
  16. CREATE TABLE test(id INT, name VARCHAR(10), PRIMARY KEY (id));
  17. # 创建另一个表,拥有主键,并包含前一个表的外键约束,以及唯一约束
  18. CREATE TABLE test_key(id INT, name VARCHAR(10), PRIMARY KEY (id),
  19. FOREIGN KEY (id) REFERENCES test(id), UNIQUE (name));
  20. # 直接将查询结果导入或复制到,一个新创建的表
  21. CREATE TABLE test_copy SELECT * FROM test;
  22. CREATE TABLE test_copy_as AS SELECT * FROM test;
  23. # 将一个已存在表的数据结构克隆到,一个新创建的表
  24. CREATE TABLE test_clone LIKE test;
  25. # 创建一个临时表,各种方式
  26. # 临时表将在你连接MySQL期间存在,当断开连接时,MySQL将自动删除表并释放所用的空间,也可手动删除。
  27. CREATE TEMPORARY TABLE test_tem(id INT, name VARCHAR(10));
  28. CREATE TEMPORARY TABLE test_tem_copy SELECT * FROM test;
  29. # 删除一个存在表
  30. DROP TABLE IF EXISTS test;
  31. # 更改存在表的名称
  32. ALTER TABLE test RENAME test_rename;
  33. RENAME TABLE test_rename TO test;
  34. # 查看表的结构
  35. # 以下五条语句效果相同,推荐第一条,因为简单
  36. DESC test;
  37. DESCRIBE test;
  38. SHOW COLUMNS IN test;
  39. SHOW COLUMNS FROM test;
  40. EXPLAIN test;
  41. # 查看表的创建语句
  42. SHOW CREATE TABLE test;

表结构

  1. # 添加表字段
  2. ALTER TABLE test ADD age VARCHAR(2);
  3. # 删除表字段
  4. ALTER TABLE test DROP age;
  5. # 更改表字段和表字段属性
  6. ALTER TABLE test CHANGE age age_change INT;
  7. # 只更改表字段属性
  8. ALTER TABLE test MODIFY age VARCHAR(7);
  9. # 查询所有表信息
  10. SHOW TABLE STATUS;

表数据

  1. # 增加表数据
  2. INSERT INTO test VALUES (1, 'alpha', '24'), (2, 'beta', '25'), (3, 'delta', '27');
  3. # =======================================================
  4. # 因为test表设置了主键无法用下面这种方式增加,前两个语句先重建一张表
  5. CREATE TABLE test_insert(id INT, name VARCHAR(8));
  6. INSERT INTO test_insert VALUES (1, 'alpha'), (2, 'beta');
  7. # =======================================================
  8. # 增加查询之后的表数据
  9. INSERT INTO test_insert SELECT * FROM test_insert;
  10. # 删除表数据
  11. DELETE FROM test_insert WHERE id = 2;
  12. # 更改表数据
  13. UPDATE test_insert SET name = 'delta' WHERE id = 1;
  14. # =======================================================
  15. # 为了下面的查询语句能够更直观一些我们再插入一些数据并把age_change的表字段改为age
  16. INSERT INTO test VALUES (10, 'gamma', '39'), (6, 'zeta', '30'),
  17. (19, 'theta', '10'), (8, 'eta', '20'), (46, 'zeta', '11'),
  18. (56, 'zeta', '9'), (66, 'zeta', '3');
  19. ALTER TABLE test CHANGE age_change age VARCHAR(20);
  20. # =======================================================
  21. # =======================================================
  22. # 知识点提示!!!
  23. # SELECT DISTINCT * FROM '表名' WHERE '限制条件' GROUP BY '分组依据' HAVING '过滤条件'
  24. # ORDER BY LIMIT '展示条数' OFFSET '跳过的条数'
  25. # 以上关键字使用顺序不能错误,否则会产生错误信息
  26. # DISTINCT 去重,注意如果是多个表字段去重,只有每个表字段都相同才会认为相同
  27. # * 代表通配符,会返回所有字段数据
  28. # WHERE 语句用来包含查询条件,对原始记录过滤
  29. # HAVING 语句也是用来包含查询条件,但是HAVING是对WHERE查询分组之后的记录继续过滤
  30. # ORDER BY 排序默认正序也就是升序,DESC表示反序也就是降序
  31. # LIMIT 属性来设定返回的记录数,一般用于列表的分页
  32. # OFFSET 属性来设定跳过的返回的记录数,一般配合LIMIT
  33. # =======================================================
  34. # 查找表数据
  35. SELECT * FROM test;
  36. # 查询去除重复数据之后的表数据
  37. SELECT DISTINCT name FROM test;
  38. # 根据表字段查找表数据
  39. SELECT * FROM test WHERE name = 'zeta';
  40. # 查找name为zeta并且id大于30的表数据
  41. SELECT * FROM test WHERE name = 'zeta' HAVING id > 30;
  42. # 根据id分组查询age小于20的表数据
  43. SELECT * FROM test GROUP BY id HAVING age < 20;
  44. # 查找根据name排序之后的表数据
  45. SELECT * FROM test ORDER BY name;
  46. # 查找根据name反序排序之后的表数据
  47. SELECT * FROM test ORDER BY name DESC;
  48. # =======================================================
  49. # 注意下面这个排序,如果排序的第一个字段所有值都不同,那么第二列排序就没有意义了,
  50. # 所以我们之前加入了一些name相同的值,所以可以我们可以看下zeta字段的age排序
  51. # =======================================================
  52. # 查找先根据name排序,再根据age排序之后的表数据
  53. SELECT * FROM test ORDER BY name, age;
  54. # 查找先根据age反序,再根据name排序之后,年龄最大的前三位的表数据
  55. SELECT * FROM test ORDER BY age DESC, name LIMIT 3;
  56. # 查找先根据age反序,再根据name排序之后,年龄最大的前三位,并跳过第一条的表数据
  57. SELECT * FROM test ORDER BY age DESC, name LIMIT 3 OFFSET 1;
  58. SELECT * FROM test ORDER BY age DESC, name LIMIT 1,3;
  59. # 使用正则查询name表字段中包含字母g的表数据
  60. SELECT * FROM test WHERE name regexp '.*[g]+.*';

表数据 —— 连接查询

  1. # =======================================================
  2. # 为了方便大家更为直观的看到连接查询的效果,我再重新建一个用于连接的表
  3. CREATE TABLE test_join(id INT, join_name VARCHAR(20), join_desc VARCHAR(100));
  4. INSERT INTO test_join VALUES (10, 'join_a', 'desc_a'),
  5. (11, 'join_b', 'desc_b'), (10, 'gamma', 'join_gamma');
  6. # =======================================================
  7. # =======================================================
  8. # 解释一下下面的内连接查询为什么会有三种
  9. # 第一种为不设置别名的写法
  10. # 第二种为简写AS设置别名的写法
  11. # 第三种为有AS关键字设置别名的写法
  12. # 后续均使用第二种写法
  13. # =======================================================
  14. # 内连接查询
  15. # 注意JOIN连接默认使用内连接
  16. SELECT * FROM test INNER JOIN test_join ON test.id = test_join.id;
  17. SELECT * FROM test m INNER JOIN test_join ON m.id = n.id;
  18. SELECT * FROM test AS m INNER JOIN test_inert AS n ON m.id = n.id;
  19. # 左外连接查询
  20. SELECT * FROM test m LEFT JOIN test_join n ON m.id = n.id;
  21. # 左外连接查询,左表独有数据
  22. SELECT * FROM test m LEDT JOIN test_join n ON m.id = n.id WHERE n.id IS NULL;
  23. # 右外连接查询
  24. SELECT * FROM test m RIHGT JOIN test_join n ON m.id = n.id;
  25. # 右外连接查询,右表独有数据
  26. SELECT * FROM test m RIGHT JOIN test_join n ON m.id = n.id WHERE m.id IS NULL;
  27. # 交叉连接查询,又叫笛卡尔连接
  28. SELECT * FROM test CROSS JOIN test_join;
  29. SELECT * FROM test,test_join;
  30. # 全连接查询
  31. # UNION默认不返回重复的数据,UNION ALL则会返回重复的数据
  32. SELECT id,name FROM test UNION SELECT id,join_name FROM test_join;
  33. SELECT id,name FROM test UNION ALL SELECT id,join_name FROM test_join;

  1. # =======================================================
  2. # 这里是指定主键约束名的添加和删除方式,但是主键只能有一个,所以感觉主键指定名称貌似有点多余?
  3. ALTER TABLE test ADD CONSTRAINT pk_test PRIMARY KEY (id);
  4. ALTER TABLE test DROP PRIMARY KEY `pk_test`;
  5. # =======================================================
  6. # 添加主键
  7. ALTER TABLE test ADD PAIMARY KEY (id);
  8. # 删除主键
  9. ALTER TABLE test DROP PRIMARY KEY;
  10. # =======================================================
  11. # 知识点提示!!!
  12. # 不指定外键约束名,会自动生成一个,但是不知道怎么查出来,
  13. # 有人说用SHOW CREATE TABLE 表名 可以查询出来但是我测试了一下不行
  14. # 这个问题先放着,后期我来填坑
  15. # =======================================================
  16. # =======================================================
  17. # 外键增删改查,都要通过外键的约束名,创建时尽量注意写外键的约束名,
  18. # 所以不建议下面这种不指定外键约束名的方式
  19. ALTER TABLE test ADD FOREIGN KEY (id) REFERENCES test_join(id);
  20. # =======================================================
  21. # =======================================================
  22. # 建两个表用于测试
  23. CREATE TABLE test_key(id INT, key_name VARCHAR(20), PRIMARY KEY(id));
  24. CREATE TABLE test_foreign_key(id INT, foreign_key_name VARCHAR(20), PRIMARY KEY(id));
  25. # =======================================================
  26. # 添加外键
  27. ALTER TABLE test_key ADD CONSTRAINT fk_id FOREIGN KEY (id) REFERENCES test_foreign_key(id);
  28. # 删除外键
  29. ALTER TABLE test_key DROP FOREIGN KEY `fk_id`;
  30. # 修改外键
  31. ALTER TABLE test_key DROP FOREIGN KEY `fk_id`,
  32. ADD CONSTRAINT fk_id_new FOREIGN KEY (id) REFERENCES test_foreign_key(id);
  33. # 添加唯一键
  34. # 这种不指定唯一键约束名的方式,可以用SHOW CREATE TABLE 查看约束名
  35. ALTER TABLE test_key ADD UNIQUE(key_name);
  36. # 添加唯一键,指定键名
  37. ALTER TABLE test_key ADD UNIQUE un_name (name);
  38. ALTER TABLE test_key ADD UNIQUE INDEX un_name (name);
  39. ALTER TABLE test_key ADD CONSTRAINT un_name UNIQUE (name);
  40. CREATE UNIQUE INDEX un_name ON test_key(name);
  41. # 删除唯一键
  42. DROP INDEX un_name ON test_key;
  43. # 添加索引
  44. ALTER TABLE test_key ADD INDEX (key_name);
  45. # 添加索引,指定索引名
  46. ALTER TABLE test_key ADD INDEX in_name (key_name);
  47. CREATE INDEX in_name ON test_key(key_name);
  48. # 删除索引
  49. DROP INDEX in_name ON test_key;

函数

  1. # =======================================================
  2. # 聚合函数
  3. # =======================================================
  4. # 求总数
  5. SELECT count(id) AS total FROM test;
  6. # 求和
  7. SELECT sum(age) AS total_age FROM test;
  8. # 求平均值
  9. SELECT avg(age) AS avg_age FROM test;
  10. # 求最大值
  11. SELECT max(age) AS max_age FROM test;
  12. # 求最小值
  13. SELECT min(age) AS min_age FROM test;
  14. # =======================================================
  15. # 数学函数
  16. # =======================================================
  17. # 绝对值:8
  18. SELECT abs(-8);
  19. # 二进制:1010,八进制:12,十六进制:A
  20. SELECT bin(10), oct(10), hex(10);
  21. # 圆周率:3.141593
  22. SELECT pi();
  23. # 大于x的最小整数值:6
  24. SELECT ceil(5.5);
  25. # 小于x的最大整数值:5
  26. SELECT floor(5.5);
  27. # 返回集合中最大的值:86
  28. SELECT greatest(13, 21, 34, 41, 55, 69, 72, 86);
  29. # 返回集合中最小的值:13
  30. SELECT least(13, 21, 34, 41, 55, 69, 72, 86);
  31. # 余数:3
  32. SELECT mod(1023, 10);
  33. # 返回0-1内的随机值,每次不一样
  34. SELECT rand();
  35. # 提供一个参数生成一个指定值
  36. SELECT rand(9); # 0.406868412538309
  37. SELECT rand('test123'); # 0.15522042769493574
  38. # 四舍五入:1023
  39. SELECT round(1023.1023);
  40. # 四舍五入,保留三位数:1023.102
  41. SELECT round(1023.1023, 3);
  42. # 四舍五入整数位:
  43. SELECT round(1023.1023, -1); # 1020
  44. SELECT round(1025.1025, -1); # 1030,注意和truncate的区别
  45. # 截短为3位小数:1023.102
  46. SELECT truncate(1023.1023, 3);
  47. # 截短为-1位小数:1020
  48. SELECT truncate(1023.1023, -1); # 1020
  49. SELECT truncate(1025.1025, -1); # 1020,注意和round的区别
  50. # 符号的值的符号(负数,零或正)对应-1,0或1
  51. SELECT sign(-6); # -1
  52. SELECT sign(0); # 0
  53. SELECT sign(6); # 1
  54. # 平方根:10
  55. SELECT sqrt(10);
  56. # =======================================================
  57. # 字符串函数
  58. # =======================================================
  59. # 连接字符串 'fx67ll'
  60. SELECT concat('f', 'x', '67', 'll');
  61. # 用分隔符连接字符串 'fx67ll',注意如果分隔符为NULL,则结果为NULL
  62. SELECT concat_ws('-', 'fx', '6', '7', 'l', 'l'); # fx-6-7-l-l
  63. SELECT concat_ws(NULL, 'fx', '6', '7', 'l', 'l'); # NULL
  64. # 将字符串 'fx67ll' 从3位置开始的2个字符替换为 '78'
  65. SELECT insert('fx67ll', 3, 2, '78'); # fx78ll
  66. # 返回字符串 'fx67ll' 左边的3个字符:fx6
  67. SELECT left('fx67ll', 3);
  68. # 返回字符串 'fx67ll' 右边的4个字符: 67ll
  69. SELECT right('fx67ll', 4);
  70. # 返回字符串 'fx67ll' 第3个字符之后的子字符串:67ll
  71. SELECT substring('fx67ll', 3);
  72. # 返回字符串 'fx67ll' 倒数第3个字符之后的子字符串:7ll
  73. SELECT substring('fx67ll', -3);
  74. # 返回字符串 'fx67ll' 第3个字符之后的2个字符:67
  75. SELECT substring('fx67ll', 3, 2);
  76. # 切割字符串 ' fx67ll ' 两边的空字符,注意字符串左右有空格:'fx67ll'
  77. SELECT trim(' fx67ll ');
  78. # 切割字符串 ' fx67ll ' 左边的空字符:'fx67ll '
  79. SELECT ltrim(' fx67ll ');
  80. # 切割字符串 ' fx67ll ' 右边的字符串:' fx67ll'
  81. SELECT rtrim(' fx67ll ');
  82. # 重复字符 'fx67ll' 三次:fx67llfx67llfx67ll
  83. SELECT repeat('fx67ll', 3);
  84. # 对字符串 'fx67ll' 进行反向排序:ll76xf
  85. SELECT reverse('fx67ll');
  86. # 返回字符串的长度:6
  87. SELECT length('fx67ll');
  88. # 对字符串进行大小写处理,大小写各两种方式
  89. SELECT upper('FX67ll'); # FX67LL
  90. SELECT lower('fx67LL'); # fx67ll
  91. SELECT ucase('fX67Ll'); # FX67LL
  92. SELECT lcase('Fx67lL'); # fx67ll
  93. # 返回 'f' 在 'fx67ll' 中的第一个位置:1
  94. SELECT position('f' IN 'fx67ll');
  95. # 返回 '1' 在 'fx67ll' 中的第一个位置,不存在返回0:0
  96. SELECT position('1' IN 'fx67ll');
  97. # 比较字符串,第一个参数小于第二个返回负数,否则返回正数,相等返回0
  98. SELECT strcmp('abc', 'abd'); # -1
  99. SELECT strcmp('abc', 'abb'); # 1
  100. SELECT strcmp('abc', 'abc'); # 0
  101. # =======================================================
  102. # 时间函数
  103. # =======================================================
  104. # 返回当前日期,时间,日期时间
  105. SELECT current_date, current_time, now();
  106. # 返回当前时间的时,分,秒
  107. SELECT hour(current_time), minute(current_time), second(current_time);
  108. # 返回当前日期的年,月,日
  109. SELECT year(current_date), month(current_date), day(current_date);
  110. # 返回当前日期的季度
  111. SELECT quarter(current_date);
  112. # 返回当前月份的名称,当前星期的名称
  113. SELECT monthname(current_date), dayname(current_date);
  114. # 返回当前日在星期的天数,当前日在月的天数,当前日在年的天数
  115. SELECT dayofweek(current_date), dayofmonth(current_date), dayofyear(current_date);
  116. # =======================================================
  117. # 控制流函数
  118. # =======================================================
  119. # IF判断:1
  120. SELECT IF(2>1, '1', '0') # 1
  121. # IFNULL判断
  122. # 判断第一个表达式是否为NULL,如果为NULL则返回第二个参数的值,否则返回第一个参数的值
  123. SELECT IFNULL(NULL, 1); # 1
  124. SELECT IFNULL('fx67ll', 0); # fx67ll
  125. # ISNULL判断
  126. # 接受1个参数,并测试该参数是否为NULL,如果参数为NULL,则返回1,否则返回0
  127. SELECT ISNULL(1); # 0
  128. SELECT ISNULL(1/0); # 1
  129. # NULLIF判断
  130. # 接受2个参数,如果第1个参数等于第2个参数,则返回NULL,否则返回第1个参数
  131. SELECT NULLIF('fx67ll', 'fx67ll'); # NULL
  132. SELECT NULLIF('fx67ll', 'll76xf'); # fx67ll
  133. # NULLIF类似于下面的CASE表达式
  134. CASE WHEN expression_1 = expression_2
  135. THEN NULL
  136. ELSE
  137. expression_1
  138. END;
  139. # CASE判断:second
  140. SELECT CASE 2
  141. WHEN 1 THEN 'first'
  142. WHEN 2 THEN 'second'
  143. WHEN 3 THEN 'third'
  144. ELSE 'other'
  145. END;
  146. # =======================================================
  147. # 系统信息函数
  148. # =======================================================
  149. # 显示当前数据库名
  150. SELECT database();
  151. # 显示当前用户id
  152. SELECT connection_id();
  153. # 显示当前用户
  154. SELECT user();
  155. # 显示当前mysql版本
  156. SELECT version();
  157. # 返回上次查询的检索行数
  158. SELECT found_rows();

视图

  1. # 创建视图
  2. CREATE VIEW v AS SELECT id,name FROM test;
  3. CREATE VIEW sv(sid,sname) AS SELECT id,name FROM test;
  4. # =======================================================
  5. # 知识点提示!!!
  6. # MySQL视图规定FROM关键字后面不能包含子查询
  7. # 修改了视图对基表数据会有影响,反之,修改了基表数据对视图也会有影响
  8. # =======================================================
  9. # 查看创建视图语句
  10. SHOW CREATE VIEW v;
  11. # 查看视图结构
  12. DESC v;
  13. DESCRIBE v;
  14. SHOW COLUMNS IN v;
  15. SHOW COLUMNS FROM v;
  16. EXPLAIN v;
  17. # 查看视图数据
  18. SELECT * FROM v;
  19. # 修改视图
  20. CREATE OR REPLACE VIEW v AS SELECT name,age FROM test;
  21. ALTER VIEW v AS SELECT age FROM test;
  22. # 删除视图
  23. DROP v IF EXISTS v;
  24. # =======================================================
  25. # 知识点提示!!!
  26. # 使用视图的好处:
  27. # 1. 安全,只查询需要的数据
  28. # 2. 性能,避免过多使用JOIN查询
  29. # 3. 灵活,放弃使用一些过旧的表
  30. # =======================================================

存储过程

  1. # 因为存储过程比较灵活,这里不写具体示例,主要写一些定义语法
  2. # 声明语句结束符
  3. DELIMITER $$
  4. # =======================================================
  5. # 知识点提示!!!
  6. # 上面的($$)结束符可以自己定义,MySQL中默认是;
  7. # =======================================================
  8. # 声明存储过程
  9. CREATE PROCEDURE 存储过程名( [IN | OUT | INOUT] 参数 数据类型)
  10. # =======================================================
  11. # 知识点提示!!!
  12. # IN 输入参数 OUT 输出参数 INOUT 输入输出参数
  13. # =======================================================
  14. # 声明存储函数
  15. CREATE FUNCTION 存储函数名(参数 数据类型)
  16. # 声明存储过程开始和结束
  17. BEGIN ...... END
  18. # 声明变量
  19. DECLARE 变量名 变量类型 默认值
  20. # 变量赋值
  21. SET @变量名 =
  22. # 调用存储过程
  23. CALL 存储过程名(传参)
  24. # 注释
  25. -- 注释体
  26. # 查看存储过程的详细
  27. SHOW CREATE PROCEDURE 数据库.存储过程名
  28. # 修改存储过程
  29. ALTER PROCEDURE
  30. # 删除存储过程
  31. DROP PROCEDURE
  32. # =======================================================
  33. # 知识点提示!!!
  34. # 把过多的业务逻辑写在存储过程汇中不利于维护管理,
  35. # 除了个别对业务性能要求较高的业务,其他的必要性不是很大
  36. # =======================================================

备份还原

  1. # 备份命令
  2. # 选项参考下方列表内容
  3. mysqldump [选项] 数据库名 [表名] > 脚本名
  4. mysqldump [选项] --数据库名 [选项 表名] > 脚本名
  5. # 备份所有数据库命令
  6. mysqldump [选项] --all-databases [选项] > 脚本名
  7. # =======================================================
  8. # 知识点提示!!!
  9. # 下方在导入备份数据库前,db_name如果没有,是需要创建的,
  10. # 而且与db_name.db中数据库名是一样的才可以导入
  11. # =======================================================
  12. # 系统行还原命令
  13. mysqladmin -uroot -p create db_name
  14. mysql -uroot -p db_name < /backup/mysqldump/db_name.db
  15. # source还原命令
  16. mysql > use db_name
  17. mysql > source /backup/mysqldump/db_name.db
  18. # =======================================================
  19. # 知识点提示!!!
  20. # 不同的业务场景与规模有不同的备份策略
  21. # 双机热备:通过日志文件来传输服务器上的数据变化,主服务器上数据被更新时触发,
  22. # 传输相应的日志文件到从服务器,并通过日志文件,作出相应的操作
  23. # =======================================================

备份命令选项说明
参数名 缩写 含义
—host -h 服务器IP地址
—port -P 服务器端口号
—user -u MySQL用户名
—password -p MySQL密码
—databases 指定要备份的数据库
—all-databases 备份MySQL服务器上的所有数据库
—compact 压缩模式,产生更少的输出
—comments 添加注释信息
—complete-insert 输出完成的插入语句
—lock-tables 备份前,锁定所有数据库表
—no-create-db/—no-create-info 禁止生成创建数据库语句
—force 当出现错误时仍然继续备份操作
—default-character-set 指定默认字符集
—add-locks 备份数据库表时锁定数据库表

用户

用户权限是非常敏感的一类操作,需要非常小心的使用,所以这里只介绍修改密码的常用操作,其余操作请在完整了解过MySQL权限系统之后再作尝试
您可以参考这篇文章 — Mysql用户与权限操作系统学习MySQL用户与权限

  1. # 修改用户密码
  2. UPDATE USER SET authentication_string=passworD("你的新密码") WHERE USER='root';
  3. # =======================================================
  4. # 在MySQL5.7中,mysql.user表中已不再包含Password字段,
  5. # 而是使用plugin和authentication_string字段保存用户身份验证的信息
  6. # =======================================================

我是 fx67ll.com,如果您发现本文有什么错误,欢迎在评论区讨论指正,感谢您的阅读!
如果您喜欢这篇文章,欢迎访问我的 本文github仓库地址,为我点一颗Star,Thanks~ :)
转发请注明参考文章地址,非常感谢!!!