MySQL的最全常用SQL语句 —— 一文可以快速熟悉、回忆sql语句

?本篇内容:MySQL的常用指令 —— 一文可以快速熟悉、回忆Sql语句

? 最近更新:2022年1月10日 MySQL的常用指令

?个人简介:一只二本院校在读的大三程序猿,本着注重基础,打卡算法,分享技术作为个人的经验总结性的博文博主,虽然可能有时会犯懒,但是还是会坚持下去的,如果你很喜欢博文的话,建议看下面一行~(疯狂暗示QwQ)

? 点赞 ? 收藏 ⭐留言 ? 一键三连 关爱程序猿,从你我做起

MySQL的常用指令

写在前面

因为最近在复习Java的基础框架、也复习到了数据库的相关知识、这里就是整合了所有小付在开发项目与学习当中用到的最常用最常用的操作命令囊括了项目实战案例,也囊括了所有操作的SQL语句,可以让你快速过一遍SQL语句加深基础知识,学习复习时会更有余力,我也相信这篇文章会让你快速回忆起绝大部分的操作数据库的知识点,就说这么多啦~毕竟文章才是重点,小付只是个跑龙套的哦!!!

一、通过命令行操作数据库服务的常用指令

1、启动MySQL服务 net start mysql

1、启动Mysql服务器(这里使用的是PowerShell进行的测试) net start mysql

注意:需要用管理员权限来启动命令行哦~

PS C:WINDOWSsystem32> net start mysql
MySQL 服务正在启动 ....
MySQL 服务已经启动成功。

2、关闭MySQL服务器 net stop mysql

2、关闭MySQL服务器 net stop mysql

PS C:WINDOWSsystem32> net stop mysql
MySQL 服务正在停止..
MySQL 服务已成功停止。

3、连接MySQL服务器 mysql -u root -p

3、连接MySQL服务器 mysql -u root -p

PS C:WINDOWSsystem32> mysql -u root -p #-u 用户名 -p 用户的密码 -h 主机地址
Enter password: ************
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 8
Server version: 8.0.25 MySQL Community Server - GPL

Type 'help;' or 'h' for help. Type 'c' to clear the buffer.

mysql>

4、断开MySQL服务器的连接 exit

4、断开MySQL服务器的连接 exit

mysql> exit
Bye

5、查看当前MySQL服务器的信息 status

5、查看当前MySQL服务器的信息 status

mysql> status
--------------
G:AppServMySQLbinmysql.exe  Ver 14.12 Distrib 5.0.51b, for Win32 (ia32)

Connection id:          10
Current database:
Current user:           root@localhost
SSL:                    Not in use
Using delimiter:        ;
Server version:         8.0.25 MySQL Community Server - GPL
Protocol version:       10
Connection:             localhost via TCP/IP
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    utf8mb3
Conn.  characterset:    utf8mb3
TCP port:               3306
Uptime:                 2 min 30 sec

Threads: 2  Questions: 7  Slow queries: 0  Opens: 117  Flush tables: 3  Open tables: 36  Queries per second avg: 0.046
--------------

二、操作数据库的常用指令

1、查看所有的数据库 show databases

1、查看当前MySQL服务器下的所有的数据库

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| alascanfudb        |
| information_schema |
| mybatis            |
| mysql              |
| performance_schema |
| vhr                |
| vueblog            |
+--------------------+
7 rows in set (0.10 sec)

2 、创建数据库create database 数据库名

2、创建一个数据库 名称为ordertest || create database 数据库名;

mysql> create database ordertest;
Query OK, 1 row affected (0.17 sec)

3、删除数据库 drop database 数据库名

3、删除名称为ordertest的数据库 drop database 数据库名;

mysql> drop database ordertest;
Query OK, 0 rows affected (0.29 sec)

4、选择数据库 use 数据库名

4、选中指定的数据库进行操作,在创建表之间务必选择数据库 use 数据库名;

mysql> use ordertest;
Database changed

5、显示数据库中的所有表 show

5、显示数据库中的所有表 show tables;

mysql> show tables;
Empty set (0.00 sec)

6 、创建一张表(实战)

6、创建一张表 (实战演示)

CREATE TABLE `user` (
	`id` INT ( 11 ) NOT NULL AUTO_INCREMENT,
	`uid` INT ( 11 ) DEFAULT NULL,
	`Date` date DEFAULT NULL COMMENT '入职日期',
	`Salary` INT ( 11 ) DEFAULT NULL COMMENT '薪资',
	`remark` VARCHAR ( 255 ) DEFAULT NULL COMMENT '备注',
	PRIMARY KEY ( `id` ),
CONSTRAINT `adjustsalary_ibfk_1` FOREIGN KEY ( `eid` ) REFERENCES `employee` ( `id` ) 
) ENGINE = INNODB DEFAULT CHARSET = utf8;

建表说明

  • 可以在字段后NOT NULL代表当前键值不能为空,DEFAULT NULL 代表设置了默认值为null,INT ( 11 )代表此字段为INT类型且占11位COMMENT '薪资'代表的是为当前字段添加备注薪资,**PRIMARY KEY (id)**设置 id 字段为主键,同时设置了外键约束。ENGINE = INNODB DEFAULT CHARSET = utf8;设置了数据库引擎为INNODB 并且默认编码方式为UTF-8。

7、显示表中字段 desc 表名

7、显示表的字段 desc 表明;

mysql> desc user;
+--------+--------------+------+-----+---------+----------------+
| Field  | Type         | Null | Key | Default | Extra          |
+--------+--------------+------+-----+---------+----------------+
| id     | int          | NO   | PRI | NULL    | auto_increment |
| uid    | int          | YES  |     | NULL    |                |
| Date   | date         | YES  |     | NULL    |                |
| Salary | int          | YES  |     | NULL    |                |
| remark | varchar(255) | YES  |     | NULL    |                |
+--------+--------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

8、删除表 drop table 表名

8、删除表 drop table 表名;

mysql> drop table user;
Query OK, 0 rows affected (0.47 sec)

9、查看详细建库信息

9、查看创建库的详细信息 show create database 库名;

mysql> show create database ordertest;
| Database  | Create Database                                             
| ordertest | CREATE DATABASE `ordertest` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ |

1 row in set (0.00 sec)

10、查看详细建表信息

10 、查看创建表的详细信息 show create table 表名;

mysql> show create table user;

| Table | Create Table                                                     
| user  | CREATE TABLE `user` (
  `id` int NOT NULL AUTO_INCREMENT,
  `uid` int DEFAULT NULL,
  `Date` date DEFAULT NULL COMMENT '鍏ヨ亴鏃ユ湡',
  `Salary` int DEFAULT NULL COMMENT '钖祫',
  `remark` varchar(255) DEFAULT NULL COMMENT '澶囨敞',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3         |

1 row in set (0.00 sec)

三、操作表的结构常用指令

1、修改字段的类型 alter table 表名 modify 字段 字段类型;

mysql> alter table user modify `Salary` varchar(32);
Query OK, 0 rows affected (1.41 sec)
Records: 0  Duplicates: 0  Warnings: 0

2、添加新的字段 alter table 表名 add 字段 字段类型;

mysql> alter table user add age int(8);
Query OK, 0 rows affected, 1 warning (0.65 sec)
Records: 0  Duplicates: 0  Warnings: 1

3、添加字段到指定位置之后 alter table 表名 add 字段 字段类型 after 字段;

mysql> alter table user add sex int(8) after age;
Query OK, 0 rows affected, 1 warning (1.49 sec)
Records: 0  Duplicates: 0  Warnings: 1

4、删除表中字段 alter table 表名 drop 字段;

mysql> alter table user drop sex;
Query OK, 0 rows affected (1.41 sec)
Records: 0  Duplicates: 0  Warnings: 0

5、修改指定的字段 alter table 表名 change 原字段名 新字段名 字段的类型;

mysql> alter table user change uid userid int(8);
Query OK, 0 rows affected, 1 warning (0.63 sec)
Records: 0  Duplicates: 0  Warnings: 1

四、操作表中数据的常用指令

先在数据库中创建一张表user

mysql> CREATE TABLE `user`(
    -> `id` INT(8) NOT NULL PRIMARY KEY,
    -> `username` varchar(32) DEFAULT NULL ,
    -> `password` varchar(32) DEFAULT NULL
    -> ) ENGINE = InnoDB DEFAULT CHARSET = utf8;
Query OK, 0 rows affected, 2 warnings (1.17 sec)

1、增加数据

1、增加数据

-- 第一种方式 insert into 表名 values(值1,值2,...)
mysql> insert into user values(1,'root','root');
Query OK, 1 row affected (0.59 sec)
-- 第二种方式 常用!!!
mysql> insert into user(id,username,password) values (2,'admin','admin');
Query OK, 1 row affected (0.89 sec)
-- 第三种方式 插入多条数据
mysql> insert into user(id,username,password) values(1,'root','root'),(2,'admin','admin'),(3,'Alascanfu','123456');
Query OK, 3 rows affected (0.12 sec)
Records: 3  Duplicates: 0  Warnings: 0

2、修改数据

2、删除数据

-- 删除一条数据 delete from 表名 where 条件
mysql> delete from user where id = 2;
Query OK, 1 row affected (0.04 sec)
-- 删除表中所有数据
mysql> delete from user ;
Query OK, 2 rows affected (0.36 sec)

3、更新数据

3、更改数据

-- 更新数据 update 表名 set字段1 = 值1, 字段2 = 值2 where 条件
mysql> update user set password = '123' where id = 3;
Query OK, 1 row affected (0.54 sec)
Rows matched: 1  Changed: 1  Warnings: 0

4、查询数据

4、查询数据

-- 查询表中所有数据 select * from 表名
mysql> select * from user;
+----+-----------+----------+
| id | username  | password |
+----+-----------+----------+
|  1 | root      | root     |
|  2 | admin     | admin    |
|  3 | Alascanfu | 123      |
+----+-----------+----------+
3 rows in set (0.00 sec)
-- 查询指定字段数据 select * from 
mysql> select username from user;
+-----------+
| username  |
+-----------+
| root      |
| admin     |
| Alascanfu |
+-----------+
3 rows in set (0.00 sec)
-- 条件查询数据 select 字段 from 表名 where 条件 重要!!!
-- where 条件后面跟的条件
--     关系:>,<,>=,<=,!=  
--     逻辑:or, and 
--     区间:id between 4 and 6 ;闭区间,包含边界

5、排序查询

5、排序查询

-- select 字段 from 表 order by 字段  排序关键词(desc 降序 | asc 升序)
mysql> select * from user order by id desc;
+----+-----------+----------+
| id | username  | password |
+----+-----------+----------+
|  3 | Alascanfu | 123      |
|  2 | admin     | admin    |
|  1 | root      | root     |
+----+-----------+----------+
3 rows in set (0.00 sec)
-- 多字段排序查询
select 字段 fromorder by 字段1  desc |asc,...字段n desc| asc;

6、函数应用查询

6、 常用函数查询

-- 去重 distinct()  统计总数sum()   计算个数count()  平均数avg()  最大值max() 最小数min() 
mysql> select a.class,a.score
    -> from student a
    -> where (select count(*) from student where class=a.class and a.score<score)<3
    -> order by a.class,a.score desc;
+--------+-------+
| class  | score |
+--------+-------+
| class1 |    95 |
| class1 |    82 |
| class1 |    14 |
| class2 |    95 |
| class2 |    85 |
| class3 |    88 |
+--------+-------+
6 rows in set (0.03 sec)

7、分组数据查询

7、分组进行查询

-- 分组查询 
mysql> select count(sex)as sexnum,sex from user group by sex;
+--------+-------+
| sexnum | sex   |
+--------+-------+
|      3 | man   |
|      1 | woman |
+--------+-------+
2 rows in set (0.00 sec)
-- 分组查询带有条件
mysql> select count(sex)as sexnum,sex from user group by sex having sexnum > 1;
+--------+------+
| sexnum | sex  |
+--------+------+
|      3 | man  |
+--------+------+
1 row in set (0.00 sec)

8、分页数据查询

8、分组数量查询

select * from 表名 limit 偏移量,数量
说明:
不写偏移量的话就是默认的为0
实现分页的时候必须写偏移量
偏移量怎么计算?:
limit (n-1)*数量 ,数量

startIndex = (index-1)*3

SELECT * FROM table LIMIT [offset,] [rows] | rows OFFSET offset;

mysql> select * from user limit 0,1;
+----+------+------+
| id | name | sex  |
+----+------+------+
|  1 | root | man  |
+----+------+------+
1 row in set (0.00 sec)

mysql> select * from user limit 0,2;
+----+-------+------+
| id | name  | sex  |
+----+-------+------+
|  1 | root  | man  |
|  2 | admin | man  |
+----+-------+------+
2 rows in set (0.00 sec)

mysql> select * from user limit 1,1;
+----+-------+------+
| id | name  | sex  |
+----+-------+------+
|  2 | admin | man  |
+----+-------+------+
1 row in set (0.00 sec)

mysql> select * from user limit 2,1;
+----+------+-------+
| id | name | sex   |
+----+------+-------+
|  3 | hhxf | woman |
+----+------+-------+
1 row in set (0.00 sec)

mysql> select * from user limit 0;
Empty set (0.00 sec)

mysql> select * from user limit 1;
+----+------+------+
| id | name | sex  |
+----+------+------+
|  1 | root | man  |
+----+------+------+
1 row in set (0.00 sec)

mysql>

注意找到规律哦~

五、操作数据表与数据之间的连接查询

1、准备工作

准备工作

创建三张表:user、role、user_role

并且插入数据 用于连接查询。

mysql> use test ;
Database changed
mysql> create table `role`(
    -> `id` int not null primary key,
    -> `name` varchar(64) ,
    -> `nameZh` varchar(64)
    -> )engine = innodb default charset = utf8;
Query OK, 0 rows affected, 1 warning (0.18 sec)

mysql> create table `user`(
    -> `id` int not null primary key,
    -> `username` varchar(32)
    -> )engine = innodb default charset = utf8;
Query OK, 0 rows affected, 1 warning (0.30 sec)

mysql> create table `user_role`(
    -> `id` int not null primary key,
    -> `uid` int not null ,
    -> `rid` int not null
    -> )engine = innodb default charset = utf8;
Query OK, 0 rows affected, 1 warning (0.94 sec)

user表:

+----+-----------+
| id | username  |
+----+-----------+
|  1 | Alascanfu |
+----+-----------+

role表:

+----+-------+--------------------+
| id | name  | nameZh             |
+----+-------+--------------------+
|  1 | admin | 系统管理员           |
|  2 | DBA   | 数据库管理员          |
|  3 | user  | 普通用户            |
+----+-------+--------------------+

user_role表:

+----+-----+-----+
| id | uid | rid |
+----+-----+-----+
|  1 |   1 |   3 |
+----+-----+-----+

2、关联查询

关联查询

-- 隐式内连接的方式
mysql> select user.username,role.name,role.nameZh from user ,role,user_role where user.id = user_role.uid and user_role.rid = role.id;
+-----------+------+--------------+
| username  | name | nameZh       |
+-----------+------+--------------+
| Alascanfu | user | 普通用户      |
+-----------+------+--------------+
1 row in set (0.00 sec)

3、左连接、右连接、外连接、全连接 查询

左连接、右连接、外连接、全连接 查询

初始化数据表

mysql>  create table table_a(
    -> `pk` int primary key not null,
    -> `value` varchar(32) default null
    -> )engine = innodb default charset = utf8;
Query OK, 0 rows affected, 1 warning (1.37 sec)

mysql> create table table_b(
    -> `pk` int primary key not null,
    -> `value` varchar(64) default null
    -> )engine = innodb default charset = utf8;
Query OK, 0 rows affected, 1 warning (0.62 sec)
mysql> select * from table_a;
+----+--------+
| pk | value  |
+----+--------+
|  1 | 小米   |
|  2 | 红米   |
|  3 | 苹果   |
|  4 | 华为   |
|  5 | 华硕   |
|  6 | vivo   |
|  7 | oppo   |
|  8 | 三星   |
+----+--------+
8 rows in set (0.00 sec)

mysql> select * from table_b;
+----+--------+
| pk | value  |
+----+--------+
|  1 | 小米   |
|  2 | 红米   |
|  3 | 尼康   |
|  4 | 索尼   |
|  5 | 美的   |
|  6 | 格力   |
+----+--------+
6 rows in set (0.00 sec)

1、内连接 INNER JOIN

内连接是一种映射关系,如果两张表都存在相同的内容,则会显示出来。

在数学中一般被我们称之为:交集

如图所示:
在这里插入图片描述

mysql> SELECT  A.PK AS A_PK,A.Value AS A_Value,B.PK AS B_PK,B.Value AS B_Value
    -> FROM table_a A
    -> INNER JOIN table_b B
    -> ON A.pk = B.pk;
+------+---------+------+---------+
| A_PK | A_Value | B_PK | B_Value |
+------+---------+------+---------+
|    1 | 小米    |    1 | 小米    |
|    2 | 红米    |    2 | 红米    |
|    3 | 苹果    |    3 | 尼康    |
|    4 | 华为    |    4 | 索尼    |
|    5 | 华硕    |    5 | 美的    |
|    6 | vivo    |    6 | 格力    |
+------+---------+------+---------+
6 rows in set (0.00 sec)

mysql> SELECT  A.PK AS A_PK,A.Value AS A_Value,B.PK AS B_PK,B.Value AS B_Value
    -> FROM table_a A
    -> INNER JOIN table_b B
    -> ON A.value = B.value;
+------+---------+------+---------+
| A_PK | A_Value | B_PK | B_Value |
+------+---------+------+---------+
|    1 | 小米    |    1 | 小米    |
|    2 | 红米    |    2 | 红米    |
+------+---------+------+---------+
2 rows in set (0.10 sec)

2、左连接 LEFT JOIN

左连接是将在左边的表中数据都显示出来,右边数据只显示共有的那一部分,没有的部分只会填空显示,写在LEFT JOIN 左边的表称之为左表。

如图所示:
在这里插入图片描述

mysql> SELECT  A.PK AS A_PK,A.Value AS A_Value,B.PK AS B_PK,B.Value AS B_Value
    -> FROM table_a A
    -> LEFT JOIN  table_b B
    -> ON A.PK = B.PK;
+------+---------+------+---------+
| A_PK | A_Value | B_PK | B_Value |
+------+---------+------+---------+
|    1 | 小米    |    1 | 小米    |
|    2 | 红米    |    2 | 红米    |
|    3 | 苹果    |    3 | 尼康    |
|    4 | 华为    |    4 | 索尼    |
|    5 | 华硕    |    5 | 美的    |
|    6 | vivo    |    6 | 格力    |
|    7 | oppo    | NULL | NULL    |
|    8 | 三星    | NULL | NULL    |
+------+---------+------+---------+
8 rows in set (0.00 sec)

mysql> SELECT  A.PK AS A_PK,A.Value AS A_Value,B.PK AS B_PK,B.Value AS B_Value
    -> FROM table_a A
    -> LEFT JOIN  table_b B
    -> ON A.VALUE = B.VALUE;
+------+---------+------+---------+
| A_PK | A_Value | B_PK | B_Value |
+------+---------+------+---------+
|    1 | 小米    |    1 | 小米    |
|    2 | 红米    |    2 | 红米    |
|    3 | 苹果    | NULL | NULL    |
|    4 | 华为    | NULL | NULL    |
|    5 | 华硕    | NULL | NULL    |
|    6 | vivo    | NULL | NULL    |
|    7 | oppo    | NULL | NULL    |
|    8 | 三星    | NULL | NULL    |
+------+---------+------+---------+
8 rows in set (0.00 sec)

3、右连接 RIGHT JOIN

右连接与左连接恰巧相反,在RIGHT JOIN 右边的就是右表,显示右表中的所有数据,显示左表中与右表相同的数据,空填。

在这里插入图片描述

mysql> SELECT  A.PK AS A_PK,A.Value AS A_Value,B.PK AS B_PK,B.Value AS B_Value
    -> FROM table_a A
    -> RIGHT JOIN   table_b B
    -> ON A.PK = B.PK;
+------+---------+------+---------+
| A_PK | A_Value | B_PK | B_Value |
+------+---------+------+---------+
|    1 | 小米    |    1 | 小米    |
|    2 | 红米    |    2 | 红米    |
|    3 | 苹果    |    3 | 尼康    |
|    4 | 华为    |    4 | 索尼    |
|    5 | 华硕    |    5 | 美的    |
|    6 | vivo    |    6 | 格力    |
+------+---------+------+---------+
6 rows in set (0.00 sec)

mysql> SELECT  A.PK AS A_PK,A.Value AS A_Value,B.PK AS B_PK,B.Value AS B_Value
    -> FROM table_a A
    -> RIGHT JOIN   table_b B
    -> ON A.value = B.value;
+------+---------+------+---------+
| A_PK | A_Value | B_PK | B_Value |
+------+---------+------+---------+
|    1 | 小米    |    1 | 小米    |
|    2 | 红米    |    2 | 红米    |
| NULL | NULL    |    3 | 尼康    |
| NULL | NULL    |    4 | 索尼    |
| NULL | NULL    |    5 | 美的    |
| NULL | NULL    |    6 | 格力    |
+------+---------+------+---------+
6 rows in set (0.00 sec)

4、全连接 也被称之为 外连接 OUTER JOIN

全连接 查询两个表的数据 删除相同数据

UNION 联合查询 特点:后面细讲

特点:

  1. 要求多条查询语句的查询列数是一致的!
  2. 要求多条查询语句的查询的每一列的类型和顺序最好一致
  3. union关键字默认去重,如果使用union all 可以包含重复项

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

mysql> SELECT  A.PK AS A_PK,A.Value AS A_Value,B.PK AS B_PK,B.Value AS B_Value
    -> FROM table_a A
    -> LEFT JOIN  table_b B
    -> ON A.PK = B.PK
    ->  UNION
    -> SELECT  A.PK AS A_PK,A.Value AS A_Value,B.PK AS B_PK,B.Value AS B_Value
    -> FROM table_a A
    -> RIGHT JOIN  table_b B
    -> ON A.PK = B.PK;
+------+---------+------+---------+
| A_PK | A_Value | B_PK | B_Value |
+------+---------+------+---------+
|    1 | 小米    |    1 | 小米    |
|    2 | 红米    |    2 | 红米    |
|    3 | 苹果    |    3 | 尼康    |
|    4 | 华为    |    4 | 索尼    |
|    5 | 华硕    |    5 | 美的    |
|    6 | vivo    |    6 | 格力    |
|    7 | oppo    | NULL | NULL    |
|    8 | 三星    | NULL | NULL    |
+------+---------+------+---------+
8 rows in set (0.00 sec)

左连接+右连接+去重 = 全连接

5、左连接不包含内连接 LEFT JOIN EXCLUDING INNER JOIN

左连接不包含内连接:左表独有的数据

在这里插入图片描述

mysql> SELECT A.PK AS A_PK, A.Value AS A_Value,
    -> B.Value AS B_Value, B.PK AS B_PK
    -> FROM Table_A A
    -> LEFT JOIN Table_B B
    -> ON A.PK = B.PK
    -> WHERE B.value IS NULL;
+------+---------+---------+------+
| A_PK | A_Value | B_Value | B_PK |
+------+---------+---------+------+
|    7 | oppo    | NULL    | NULL |
|    8 | 三星    | NULL    | NULL |
+------+---------+---------+------+
2 rows in set (0.00 sec)

6、右连接不包含内连接 RIGHT JOIN EXCLUDING INNER JOIN

右连接不包含内连接:右表独有的数据
在这里插入图片描述

mysql> SELECT A.PK AS A_PK, A.Value AS A_Value, B.PK AS B_PK,
    -> B.Value AS B_Value
    -> FROM Table_A A
    -> RIGHT JOIN Table_B B
    -> ON A.value = B.value
    -> WHERE A.PK IS NULL;
+------+---------+------+---------+
| A_PK | A_Value | B_PK | B_Value |
+------+---------+------+---------+
| NULL | NULL    |    3 | 尼康    |
| NULL | NULL    |    4 | 索尼    |
| NULL | NULL    |    5 | 美的    |
| NULL | NULL    |    6 | 格力    |
+------+---------+------+---------+
4 rows in set (0.00 sec)

7、外连接|全连接 不包含内连接 OUTER JOIN EXCLUDING INNER JOIN

说白了就是:全集 - 交集
在这里插入图片描述

mysql> SELECT  A.PK AS A_PK, A.Value AS A_Value, B.PK AS B_PK,
    -> B.Value AS B_Value
    ->  FROM table_a A
    ->  LEFT JOIN table_b B
    -> ON A.PK = B.PK
    ->  WHERE B.PK IS NULL
    -> UNION ALL
    ->  SELECT *
    ->  FROM table_a A
    ->  RIGHT JOIN table_b B
    ->  ON A.PK = B.PK
    ->   WHERE A.PK IS NULL;
+------+---------+------+---------+
| A_PK | A_Value | B_PK | B_Value |
+------+---------+------+---------+
|    7 | oppo    | NULL | NULL    |
|    8 | 三星    | NULL | NULL    |
+------+---------+------+---------+
2 rows in set (0.00 sec)

mysql> SELECT  A.PK AS A_PK, A.Value AS A_Value, B.PK AS B_PK,
    -> B.Value AS B_Value
    ->  FROM table_a A
    ->  LEFT JOIN table_b B
    -> ON A.value = B.value
    ->  WHERE B.PK IS NULL
    -> UNION ALL
    ->  SELECT *
    ->  FROM table_a A
    ->  RIGHT JOIN table_b B
    ->  ON A.value = B.value
    ->   WHERE A.PK IS NULL;
+------+---------+------+---------+
| A_PK | A_Value | B_PK | B_Value |
+------+---------+------+---------+
|    3 | 苹果    | NULL | NULL    |
|    4 | 华为    | NULL | NULL    |
|    5 | 华硕    | NULL | NULL    |
|    6 | vivo    | NULL | NULL    |
|    7 | oppo    | NULL | NULL    |
|    8 | 三星    | NULL | NULL    |
| NULL | NULL    |    3 | 尼康    |
| NULL | NULL    |    4 | 索尼    |
| NULL | NULL    |    5 | 美的    |
| NULL | NULL    |    6 | 格力    |
+------+---------+------+---------+
10 rows in set (0.00 sec)

六、DCL数据控制语言

1、创建用户 (需要在管理员root权限进行创建)

1、创建数据库用户 create user ‘用户名’ @ ‘localhost’ idenified by ‘密码’

create user ‘用户名’ @ ‘localhost’ idenified by '密码’

mysql> create user 'HHXF'@'localhost' identified by '123456';
Query OK, 0 rows affected (0.19 sec)

mysql> exit
Bye
PS C:WINDOWSsystem32> mysql -u HHXF -p
Enter password: ******
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 12
Server version: 8.0.25 MySQL Community Server - GPL

Type 'help;' or 'h' for help. Type 'c' to clear the buffer.

mysql>

2、授予权限

2、用户授权 指令 grant

mysql> grant all privileges on *.* to 'Alascanfu'@'%' identified by '123456' with grant option;
  • all privileges: 表示将所有权限授予给指定用户。也可指定具体的权限,如:SELECT、CREATE、DROP

  • on:表示授予的权限对于哪些数据库中的数据表有效。

  • to:表示的是授予给哪个指定用户以及可以登录的ip地址 格式:”用户名”@”登录IP或域名”。%表示没有限制,在任何主机都可以登录

  • identified by:指定用户的登录密码

  • with grant option:表示允许用户将自己的权限授权给其它用户

3、刷新权限 flush privileges

3、刷新当前权限 flush privileges

mysql> flush privileges;
Query OK, 0 rows affected (0.10 sec)

4、取消授权 revoke

4、取消指定用户的权限

mysql>  revoke all on *.* from 'Alascanfu'@'localhost';

5、删除指定用户 drop

5、删除用户

mysql>  drop user'Alascanfu'@'%';

七、DTL数据事务相关操作(遵循ACID原则)

1、开启事务

start transaction

mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)

2、查询事务的隔离级别

select @@transaction_isolation

mysql> select @@transaction_isolation ;
+-------------------------+
| @@transaction_isolation |
+-------------------------+
| REPEATABLE-READ         |
+-------------------------+
1 row in set (0.00 sec)

MySQL下默认的隔离方式为 repeatable-read

隔离性有隔离级别(4个)

  • 读未提交:read uncommitted
  • 读已提交:read committed
  • 可重复读:repeatable read
  • 串行化:serializable

3、设置隔离级别

mysql> set session transaction isolation level read committed;
Query OK, 0 rows affected (0.04 sec)

mysql> select @@transaction_isolation ;
+-------------------------+
| @@transaction_isolation |
+-------------------------+
| READ-COMMITTED          |
+-------------------------+
1 row in set (0.00 sec)

set session|global transaction isolation level 隔离级别;

4、操作回滚

rollback

5、提交事务

commit

mysql> commit;
Query OK, 0 rows affected (0.00 sec)

写在最后

阿巴阿巴~

这篇文章用时两天整理好啦~

对数据库知识的沉淀 也更加一步了

虽然还没有完全二刷数据库的相关基础知识

但是这也为了我铺下了坚实的基础

最后本文截止17000字 ~ 对自己也是对大家一起负责

最后

每天进步点 每天收获点

愿诸君 事业有成 学有所获

如果觉得不错 别忘啦一键三连哦~

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>