MySQL数据库入门到精通——基础篇(1)

在这里插入图片描述

在这里插入图片描述
我们为什么要学MySQL!!!!

在这里插入图片描述
高效存储与处理这些数据才是核心!数据库就是专门存储与处理的!!

在这里插入图片描述
面试官常问:

  • 什么是事务,以及事务的四大特性?
  • 事务的隔离级别有哪些,MySQL默认是哪个?
  • 内连接与左外连接的区别是什么?
  • 常用的存储引擎? InnoDB与MylSAM的区别?
  • MySQL默认InnoDB引擎的索引是什么数据结构?
  • 如何查看MySQL的执行计划?
  • 索引失效的情况有哪些?
  • 什么是回表查询?
  • 什么是MVCC?
  • MySQL主从复制的原理是什么?
  • 主从复制之后的读写分离如何实现?
  • 数据库的分库分表如何实现?

MySQL就是大型管理数据的软件,我们要通过SQL语言来操作它

在这里插入图片描述
下面我们就把成为合格的MySQL的工程师,分为三个阶段,此博客主要围绕着基础篇展开,后续我也会整理出进阶与运维篇。大家一起努力吧!!
在这里插入图片描述

1. MySQL概述

数据库相关概念

名称全称简称
数据库存储数据的仓库,数据是有组织的进行存储DataBase (DB)
数据库管理系统操纵和管理数据库的大型软件DataBase Management System (DBMS)
SQL操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准Structured Query Language (SQL)

在这里插入图片描述

1.1 MySQL下载

MySQL官方提供了两种不同的版本:

  1. 社区版(MySQL Community Server)——免费,MySQL不提供任何技术支持
  2. 商业版. (MySQL Enterprise Edition)——收费,可以试用30天,官方提供技术支持

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
双击进入后:
在这里插入图片描述
在这里插入图片描述
等待安装…
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后next——next…安装完了

在这里插入图片描述
管理员身份运行!!!

在这里插入图片描述

1.2 客户端连接

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

注意:使用这种方式时,需要配置PATH环境变量

一般在:C:\Program Files\MySQL\MySQL Server 8.0\bin 然后配置环境变量添加这个路径
在这里插入图片描述

1.3 数据模型

关系型数据库(RDMMS)
概念:建立在关系模型基础上,由多张相互连接的二维表组成的数据库。

在这里插入图片描述
特点:

  1. 使用表存储数据,格式统一,便于继护
  2. 使用SQL语言操作,标准统一,使用方便

在这里插入图片描述

2. SQL

2.1 SQL通用语法

  1. SQL语句可以单行或多行书写,以分号结尾
  2. SQL语句 可以使用空格/缩进来增强语句的可读性。
  3. MySQL 数据库的SQL语句不区分大小写,关键字建议使用大写。
  4. 注释:
    ●单行注释: - - (中间无空格)注释内容或#注释内容(MySQL特有)
    ●多行注释: /* 注释内容*/

2.2 SQL分类

分类全称说明
DDLData Definition Language数据定义语言,用来定义数据库对象(数据库,表,字段)
DMLData Manipulation Language数据操作语言,用来对数据库表中的数据进行增删改
DQLData Query Language数据查询语言,用来查询数据库中表的记录
DCLData Control Language数据控制语言,用来创建数据库用户、控制数据库的访问权限

2.3 DDL语言

2.3.1 数据库操作

  • 查询
    查询所有数据库:SHOW DATABASES;
    查询当前数据库:SELECT DATABASE();
  • 创建:CREATE DATABASE [IF NOT EXISTS]数据库名[DEFAULT CHARSET字符集] [COLLATE 排序规则];
  • 删除:DROP DATABASE [IF EXISTS] 数据库名;
  • 使用:USE 数据库名;
Enter password: **************
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.33 MySQL Community Server - GPL

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sakila             |
| sys                |
| world              |
+--------------------+
6 rows in set (0.01 sec)

mysql>

这几个是自创的

mysql> create database test;
Query OK, 1 row affected (0.01 sec)

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sakila             |
| sys                |
| test               |
| world              |
+--------------------+
7 rows in set (0.00 sec)

重复创建错误

mysql> create database test;
ERROR 2013 (HY000): Lost connection to MySQL server during query
No connection. Trying to reconnect...
Connection id:    11
Current database: *** NONE ***
ERROR 1007 (HY000): Can't create database 'test'; database exists

mysql> create database if not exists test;
Query OK, 1 row affected, 1 warning (0.00 sec)

删除

mysql> drop database test;
Query OK, 0 rows affected (0.01 sec)

mysql> drop database test;
ERROR 1008 (HY000): Can't drop database 'test'; database doesn't exist

mysql> drop database if exists test;
Query OK, 0 rows affected, 1 warning (0.00 sec)

Use

mysql> create database test;
Query OK, 1 row affected (0.00 sec)

mysql> use test;
Database changed

mysql> SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| test       |
+------------+
1 row in set (0.00 sec)

2.3.2 表操作——创建&查询

  • DDL——表操作——查询
    查询当前数据库所有表:SHOW TABLES;
    查询表结构:DESC 表名;
    查询指定表的建表语句:SHOW CREATE TABLE 表名;

show tables

mysql> show tables;
Empty set (0.01 sec)

mysql> use sys;
Database changed

mysql> show tables;
+-----------------------------------------------+
| Tables_in_sys                                 |
+-----------------------------------------------+
| host_summary                                  |
......好多好多......
+-----------------------------------------------+
101 rows in set (0.01 sec)

切换到自己的test中 ,不要在系统中sys中创建 use test;
在这里插入图片描述

注意: […] 为可选参数,最后一个字段后面没有逗号

例子:

idnameagegender
1令狐冲28
2风清扬68
3东方不败32
mysql> create table tb_user(
    -> id int comment '编号',
    -> name varchar(50) comment '姓名',
    -> age int comment '年龄',
    -> gender varchar(1) comment '性别'
    -> ) comment '用户表' ;
Query OK, 0 rows affected (0.01 sec)

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| tb_user        |
+----------------+
1 row in set (0.00 sec)

mysql> desc tb_user;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int         | YES  |     | NULL    |       |
| name   | varchar(50) | YES  |     | NULL    |       |
| age    | int         | YES  |     | NULL    |       |
| gender | varchar(1)  | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

show create table tb_user

mysql> show create table tb_user;
+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table   | Create Table

                                                                         |
+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tb_user | CREATE TABLE `tb_user` (
  `id` int DEFAULT NULL COMMENT '编号',
  `name` varchar(50) DEFAULT NULL COMMENT '姓名',
  `age` int DEFAULT NULL COMMENT '年龄',
  `gender` varchar(1) DEFAULT NULL COMMENT '性别'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户表'            |
+---------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)

2.3.3 数据类型及案例

上面写的int varchar 是什么啊?

数据库中有三种数据类型:

  • 数值类型
  • 字符串类型
  • 日期时间类型

数值类型

类型大小有符号(SIGNED)范围无符号(UNSIGNED)范围描述
TINYINT1 byte(-128, 127)(0,255)小整数值
SMALLINT2 bytes(-32768, 32767)(0, 65535)大整数值
MEDIUMINT3 bytes(-8388608, 8388607)(0,16777215)大整数值
INT或INTEGER4 bytes(-2147483648, 2147483647)(0,4294967295)大整数值
BIGINT8 bytes(-263, 263-1)(0, 264-1)极大整数值
FLOAT4 bytes(-3.402823466 E+38,3.402823466351 E+38)0和(1.175494351 E-38,3.402823466 E+38)单精度浮点数值
DOUBLE8 bytes(-1.7976931348623157 E+308, 1.7976931348623157 E+308)0和(2.2250738585072014 E-308, 1.7976931348623157 E+308)双精度浮点数值
DECIMAL依赖于M(精度)和D(标度)的值依赖于M(精度)和D(标度)的值小数值(精确定点数)

其中,TINYINT相当于Java中的byte、SMALLINT相当于Java中的short、BIGINT相当于JAVA中的long

例 123.45
精度为5 标度为2

其中,比如年龄,我们其实就可以选择TINYINT 而且年龄不可能为负数,所有我们选择无符号范围:

age TINYINT UNSIGNED

如果我们要是分数呢,我们选择double即可——最大是100.0 而且只有一位小数,所以:

score double(4,1)

字符串类型

类型大小描述
CHAR0-255 bytes定长字符串
VARCHAR0-65535 bytes变长字符串
TINYBLOB0-255 bytes不超过255个字符的二进制数据
TINYTEXT0-255 bytes短文本字符串
BLOB0-65535 bytes二进制形式的长文本数据
TEXT0-65535 bytes长文本数据
MEDIUMBLOB0-16,777,215 bytes二进制形式的中等长度文本数据
MEDIUMTEXT0-16,777,215 bytes中等长度文本数据
LONGBLOB0-4,294,967,295 bytes二进制形式的极大文本数据
LONGTEXT0-4,294,967,295 bytes极大文本数据

char(10)与varchar(10)的区别?

  1. 当你存储1个字节的,使用char你还是回使用10个字节的空间。而varchar可以只浪费1个
  2. 但是char——性能高!因为varchar还要根据内容计算空间。
类型大小范围格式描述
DATE31000-01-01至9999-12-31YYYY-MM-DD日期值
TIME3-838:59:59 至838:59:59HH: MM: ss时间值或持续时间
YEAR11901至2155YYYY年份值
DATETIME81000-01-01 00:00:00至9999-12-31 23:59:59YYYY-MM-DD HH:MM: ss混合日期和时间值
TIMESTAMP41970-01-01 00:00:01至2038-01-19 03:14:07YYYY-MM-DD HH:MM:SS混合日期和时间值,时间戳

2.3.4 案例分析

在这里插入图片描述

mysql> create table emp(
    -> ID int comment '编号',
    -> Num Char(10) comment '员工工号',
    -> Name Varchar(10) comment '员工姓名',
    -> Gender Char(1) comment '性别',
    -> Age TINYINT comment '年龄',
    -> ID_p Varchar(18) comment '身份证号',
    -> ruzhi_Time DATE comment '入职时间'
    -> )comment '员工表' ;
Query OK, 0 rows affected (0.01 sec)

mysql> desc emp;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| ID         | int         | YES  |     | NULL    |       |
| Num        | char(10)    | YES  |     | NULL    |       |
| Name       | varchar(10) | YES  |     | NULL    |       |
| Gender     | char(1)     | YES  |     | NULL    |       |
| Age        | tinyint     | YES  |     | NULL    |       |
| ID_p       | varchar(18) | YES  |     | NULL    |       |
| ruzhi_Time | date        | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
7 rows in set (0.00 sec)

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| emp            |
| tb_user        |
+----------------+
2 rows in set (0.00 sec)

2.3.5 表操作——修改&删除

添加字段ALTER TABLE 表名 ADD 字段名类型(长度) [COMMENT 注释] [约束];

mysql> alter table emp add nickname varchar(20) comment '昵称' ;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc emp;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| ID         | int         | YES  |     | NULL    |       |
| Num        | char(10)    | YES  |     | NULL    |       |
| Name       | varchar(10) | YES  |     | NULL    |       |
| Gender     | char(1)     | YES  |     | NULL    |       |
| Age        | tinyint     | YES  |     | NULL    |       |
| ID_p       | varchar(18) | YES  |     | NULL    |       |
| ruzhi_Time | date        | YES  |     | NULL    |       |
| nickname   | varchar(20) | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
8 rows in set (0.00 sec)

修改数据类型ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);

mysql> alter table emp modify Num varchar(10);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc emp;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| ID         | int         | YES  |     | NULL    |       |
| Num        | varchar(10) | YES  |     | NULL    |       |
| Name       | varchar(10) | YES  |     | NULL    |       |
| Gender     | char(1)     | YES  |     | NULL    |       |
| Age        | tinyint     | YES  |     | NULL    |       |
| ID_p       | varchar(18) | YES  |     | NULL    |       |
| ruzhi_Time | date        | YES  |     | NULL    |       |
| nickname   | varchar(20) | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
8 rows in set (0.00 sec)

修改字段名和字段类型ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];

mysql> alter table emp change ID_p IDcard char(18) comment '身份证号' ;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc emp;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| ID         | int         | YES  |     | NULL    |       |
| Num        | varchar(10) | YES  |     | NULL    |       |
| Name       | varchar(10) | YES  |     | NULL    |       |
| Gender     | char(1)     | YES  |     | NULL    |       |
| Age        | tinyint     | YES  |     | NULL    |       |
| IDcard     | char(18)    | YES  |     | NULL    |       |
| ruzhi_Time | date        | YES  |     | NULL    |       |
| nickname   | varchar(20) | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
8 rows in set (0.00 sec)

删除字段ALTER TABLE 表名 DROP 字段名;


mysql> alter table emp drop nickname;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc emp;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| ID         | int         | YES  |     | NULL    |       |
| Num        | varchar(10) | YES  |     | NULL    |       |
| Name       | varchar(10) | YES  |     | NULL    |       |
| Gender     | char(1)     | YES  |     | NULL    |       |
| Age        | tinyint     | YES  |     | NULL    |       |
| IDcard     | char(18)    | YES  |     | NULL    |       |
| ruzhi_Time | date        | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
7 rows in set (0.00 sec)

修改表名ALTER TABLE 表名 RENAME TO 新表名;

mysql> alter table emp rename to emp_2;
Query OK, 0 rows affected (0.01 sec)

mysql> desc emp;
ERROR 1146 (42S02): Table 'test.emp' doesn't exist
mysql> desc emp_2;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| ID         | int         | YES  |     | NULL    |       |
| Num        | varchar(10) | YES  |     | NULL    |       |
| Name       | varchar(10) | YES  |     | NULL    |       |
| Gender     | char(1)     | YES  |     | NULL    |       |
| Age        | tinyint     | YES  |     | NULL    |       |
| IDcard     | char(18)    | YES  |     | NULL    |       |
| ruzhi_Time | date        | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
7 rows in set (0.00 sec)

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| emp_2          |
| tb_user        |
+----------------+
2 rows in set (0.00 sec)

mysql>

删除表DROP TABLE [IF EXISTS] 表名;

mysql> drop table if exists tb_user;
Query OK, 0 rows affected (0.00 sec)

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| emp_2          |
+----------------+
1 row in set (0.00 sec)

删除指定表,并重新创建该表TRUNCATE TABLE 表名; 数据删除,只有表头了

mysql> desc emp_2;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| ID         | int         | YES  |     | NULL    |       |
| Num        | varchar(10) | YES  |     | NULL    |       |
| Name       | varchar(10) | YES  |     | NULL    |       |
| Gender     | char(1)     | YES  |     | NULL    |       |
| Age        | tinyint     | YES  |     | NULL    |       |
| IDcard     | char(18)    | YES  |     | NULL    |       |
| ruzhi_Time | date        | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
7 rows in set (0.00 sec)

mysql> truncate table emp_2;
Query OK, 0 rows affected (0.01 sec)

mysql> desc emp_2;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| ID         | int         | YES  |     | NULL    |       |
| Num        | varchar(10) | YES  |     | NULL    |       |
| Name       | varchar(10) | YES  |     | NULL    |       |
| Gender     | char(1)     | YES  |     | NULL    |       |
| Age        | tinyint     | YES  |     | NULL    |       |
| IDcard     | char(18)    | YES  |     | NULL    |       |
| ruzhi_Time | date        | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
7 rows in set (0.00 sec)

在这里插入图片描述

2.3.6 MySQL图形化界面

在这里插入图片描述
网上找到相关的魔法教程,成功安装永久的DataGrip

在这里插入图片描述

在这里插入图片描述
第一次打开点击DownLoad即可,然后点击testconnection 显示successful即可。
在这里插入图片描述

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

这就是我们之前整的,我们可以清楚的看到层级关系以及数据表头等信息!!!!!


那么怎么在Datagrip中创建建立呢???

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

修改表结构
在这里插入图片描述
操作表
在这里插入图片描述

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

2.4 DML语言

DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增删改操作。

2.4.1 添加数据(INSERT)

  1. 给指定字段添加数据:INSERT INTO 表名 (字段名1,字段名2...) VALUES (值1,值2, ...);

  2. 给全部字段添加数据:INSERT INTO 表名 VALUES (值1,值2, ...);

  3. 批量添加数据
    INSERT INTO 表名 (字段名1,字段名2,...) VALUES (值1,值2...),(值1,值2...),(值1,值2...);
    INSERT INTO 表名 VALUES (值1,值2...),(值1,值2...),(值1,值2...);

注意:

  • 插入数据时,指定的字段顺序需要与值的顺序是一一对应的。
  • 字符串和日期型数据应该包含在引号中。
  • 插入的数据大小,应该在字段的规定范围内。

在这里插入图片描述

添加1

insert into emp_2(id, num, name, gender, age, idcard, ruzhi_time) values (1,'1','帝','男','19','123456789987654321','2000-01-01');

在这里插入图片描述
查询这个表

select * from emp_2;

添加2

insert into emp_2 values (2,'2','戈','女','81','123456789987654321','1949-10-01');

必须一一对应!!!

添加3

insert into emp_2 values (3,'3','戈1','女','13','123456789987654321','1949-10-01'),(4,'4','戈2','女','81','123456789987654321','1949-10-01');

2.4.2 修改数据(UPDATE)

DML-修改数据:UPDATE 表名 SET 字段名1 = 值1 ,字段名2 = 值2....[WHERE条件];

注意:修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。

当前的表为这样:
在这里插入图片描述


更新:

update emp_2 set Name = '老八' where ID = 3;

在这里插入图片描述


update emp_2 set Gender = '男',IDcard = '987456321123654789' where  ID = 4;

在这里插入图片描述


update emp_2 set ruzhi_Time = '1921-07-01';

在这里插入图片描述

2.4.3 删除数据(DELETE)

DELETE FROM 表名 [ WHERE条件]

DELETE FROM emp_2 where ID = 3;

在这里插入图片描述

注意:

  • DELETE语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据。
  • DELETE语句不能删除某一个字段的值(可以使用URDATE)。

2.5 DQL语言

DQL英文全称是Data Query Language(数据查询语言),数据查询语言,用来查询数据库中表的记录。

查询关键字:SELECT

SELECT
	字段列表
FROM
	表名列表
WHERE
	条件列表
GROUP BY
	分组字段列表
HAVING
	分组后条件列表
ORDER BY
	排序字段列表
LIMIT
	分页参数
  • 🐎基本查询
  • 🐎条件查询(WHERE)
  • 🐎聚合函数(count、 max、min、avg、sum)
  • 🐎分组查询(GROUP BY)
  • 🐎排序查询(ORDER BY)
  • 🐎分页查询(LIMIT)

2.5.1 基础查询

  1. 查询多个字段
    SELECT字段1, 字段2, 字段3 FROM 表名;
    SELECT * FROM 表名;

  2. 设置 别名
    SELECT 字段1 [AS别名1], 字段2 [AS别名2] ... FROM表名;

  3. 去除重复记录
    SELECT DISTINCT 字段列表 FROM 表名;

练习!!

-- 查询数据 --------------
-- 数据准备
create table emp(
    id          int                 comment '编号',
    workno      varchar(10)         comment '工号',
    name        varchar(10)         comment '姓名',
    gender      char(1)             comment '性别',
    age         tinyint unsigned    comment '年龄',
    idcard      char(18)            comment '身份证号',
    workaddress varchar(50)         comment '工作地址',
    entrydate   date                comment '入职时间'
)comment'员工表';

insert into emp (id, workno, name, gender, age, idcard, workaddress, entrydate )
values  (1,'1',     '柳岩','女',20, '123456789012345678','北京','2000-01-01'),
        (2,'2',   '张无忌','男',18, '123456789012345670','北京','2005-09-01') ,
        (3,'3',   '韦一笑','男',38, '123456789712345670','上海','2005-08-01'),
        (4,'4',     '赵敏','女' ,18,'123456757123845670','北京','2009-12-01') ,
        (5,'5',     '小昭','女',16, '123456769012345678','上海','2007-07-01'),
        (6,'6',     '杨逍','男',28, '12345678931234567X','北京','2006-01-01'),
        (7,'7',     '范瑶','男',40, '123456789212345670', '北京','2005-05-01'),
        (8,'8',    '黛绮丝','女',38, '123456157123645670','天津', '2015-05-01'),
        (9,'9',    '范凉凉','女',45, '123156789012345678', '北京', '2010-04-01') ,
        (10,'10',  '陈友谅','男',53, '123456789012345670','上海', '2011-01-01'),
        (11,'11',  '张士诚','男' ,55,'123567897123465670','江苏' , '2015-05-01' ) ,
        (12,'12',  '常遇春','男',88, '123656789012345678', '江苏','2020-11-01') ,
        (14,'14',    '灭绝','女', 65,'123456719012345670','西安' , '2019-05-01' ),
        (15,'15',  '胡青牛','男',70, '12345674971234567X','西安','2018-04-01' ),
        (16,'16',  '周芷若','女' ,18,nuLl, '北京' , '2012-06-01');

-- -------------------------查询需求--------------------------------------
-- 基本查询 --------------
-- 1.查询指定字段name, workno, age返回
select name,workno,age from emp;


-- 2.查询所有字段返回

select *from emp;

-- 3.查询所有员工的工作地址,起别名
select workaddress as '工作地址' from emp;


-- 4. 查询公司员工的上班地址(不要重复)
select distinct workaddress from emp;

2.5.2 条件查询

SELECT 字段列表 FROM 表名 WHERE 条件列表;

条件

比较运算符功能
>大于
>=大于等于
<小于
<=小于等于
=等于
<>或!=不等于
BETWEEN …AND…在某个范围之内(含最小、最大值)
IN(…)在in之后的列表中的值,多选一
LIKE 占位符模糊匹配(_匹配单个字符,%匹配任意个字符)
IS NULL是NULL
逻辑运算符功能
AND或&&并且(多个条件同时成立)
OR或II或者(多个条件任意一个成立)
NOT或!非,不是
-- 条件查询-----------------------------------
-- 1.查询年龄等于88的员工
select * from  emp where age=88;
-- 2.查询年龄小于20的员工信息
select * from  emp where age<20;
-- 3.查询年龄小于等于20的员工信息
select * from  emp where age<=20;
-- 4.查询没有身份证好的员工信息
select * from  emp where idcard=NULL;
-- 5.查询有身份证号的员工信息
select * from  emp where idcard!=NULL;
-- 6.查询年龄不等于88的员工信息
select * from  emp where age!=88;
-- 7.查询年龄在15岁(包含)到20岁(包含)之间的员工信息
select * from  emp where age<=20&&age>=15;
-- 8.查询性别为女且年龄小于25岁的员工信息
select * from  emp where age<=25&&gender = '女';
-- 9.查询年龄等于18或20或40的员工信息
select * from emp where age =18 or age=20 or age=40;
select * from emp where age in(18,20, 40) ;
-- 10.查询姓名为两个字的员工信息
select * from emp where name like '__';
-- 11. 查询身份证号最后一位是X的员工信息
select * from  emp where idcard like '%X';

2.5.3 聚合函数

将一列数据作为一个整体,进行纵向计算。(可以对照Excel的功能)

函数功能
count统计数量
max最大值
min最小值
avg平均值
sum求和

SELECT 聚合函数 (字段列表) FROM表名;

-- 聚合函数----------------------------------
-- 1.统计该企业员工数量
select  count(id) from emp;

-- 2.统计该企业员工的平均年龄
select  avg(age) from  emp;

-- 3.统计该企业员工的最大年龄
select max(age) from emp;
-- 4.统计该企业员工的最小年龄
select min(age) from emp;
-- 5.统计西安地区员工年龄之和
select  sum(age)from  emp where workaddress='西安';

2.5.4 分组查询

SELECT 字段列表 FROM 表名 [WHERE条件] GROUP BY 分组字段名 [HAVING分组后过滤条件];

where与having区别
🐎执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
🐎判断条件不同: where不能对聚合函数进行判断,而having可以。

-- 分组查询-------------------------------------------
-- 1.根据性别分组,统计男性员工和女性员工的数量
select gender,count(*) from emp group by gender ;

-- 2.根据性别分组,统计男性员工和女性员工的平均年龄
select gender,avg(age) from emp group by gender ;

-- 3.查询年龄小于45的员工,并根据工作地址分组,获取员工数量大于等于3的工作地址
select  workaddress,count(*) from emp where age<45 group by workaddress having count(*)>3;

注意

  • 执行顺序: where >聚合函数> having。
  • 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。

2.5.5 排序查询

SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1 , 字段2 排序方式2;

排序方式

  • ASC:升序(默认值)
  • DESC:降序

注意:如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。

-- 排序查询-------------------------------------------
-- 1.根据年龄对公司的员工进行升序排序
select * from emp order by  age ASC;

-- 2.根据入职时间,对员工进行降序排序
select * from emp order by  entrydate DESC ;

-- 3.根据年龄对公司的员工进行升序排序,年龄相同,再按照入职时间进行降序排序
select * from emp order by  age ASC ,entrydate DESC ;

2.5.6 分页查询

在这里插入图片描述
SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询记录数;

注意

  • 起始索引从0开始,起始索引= (查询页码-1)×每页显示记录数
  • 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LMIT。
  • 如果查询的是第一页数据,起始索引可以省略,直接简写为limit 10。
-- 分页查询
-- 1.查询第1页员工数据,每页展示10条记录
select * from  emp limit 0,10;
select * from  emp limit 10;
-- 2.查询第2页员工数据,每页展示10条记录
select * from  emp limit 10,10;

2.5.7 案例练习

按照需求完成如下DQL语句编写
1.查询年龄为20,21,22,23岁 的员工信息。
2.查询性别为男,并且年龄在20-40岁(含)以内的姓名为三个字的员工。
3.统计员工表中,年龄小于60岁的,男性员工和女性员工的人数。
4.查询所有年龄小于等于35岁员工的姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按入职时间降序排序。
5.查询性别为男,且年龄在20-40岁(含)以内的前5个员工信息,对查询的结果按年龄升序排序,年龄相同按入职时间升序排序。

-- 按照需求完成如下DQL语句编写----------------------------------------------------
-- 1.查询年龄为20,21,22,23岁 的员工信息。
select * from emp where gender = '女' and age= 20 or age = 21 or age = 22 or age = 23;
-- 2.查询性别为男,并且年龄在20-40岁(含)以内的姓名为三个字的员工。
select * from emp where gender = '男' and age between 20 and 40 && name like '___';
-- 3.统计员工表中,年龄小于60岁的,男性员工和女性员工的人数。
select age,count(*) '人数' from emp where age<60 group by age;
-- 4.查询所有年龄小于等于35岁员工的姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按入职时间降序排序。
select name,age from emp where age<=35 order by  age ASC, entrydate DESC ;
-- 5.查询性别为男,且年龄在20-40岁(含)以内的前5个员工信息,对查询的结果按年龄升序排序,年龄相同按入职时间升序排序。
select * from emp where gender = '男'and (age between 20 and  40) order by age ASC, entrydate ASC limit 0,5  ;

2.5.8 执行顺序

在这里插入图片描述

2.6 DCL语言

DCL英文全称是Data Control Language(数据控制语言),用来管理数据库用户、控制数据库的访问权限。

在这里插入图片描述

2.6.1 用户管理

  1. 查询用户:USE mysql;
    SELECT * FROM user;
  2. 创建用户:CREATE USER '用户名’@'主机名’ IDENTIFIED BY‘密码' ;
  3. 修改用户密码: ALTER USER‘用户名'@'主机名’ IDENTIFIED WITH mysqL native_ password BY '新密码’ ;
  4. 删除用户: DROP USER '用户名'@'主机名';

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

在这里插入图片描述

-- 创建用户itcast ,只能够在当前主机LocaLhost访问,密码123456;
create  user 'itcast'@'localhost' identified by '123456';

在这里插入图片描述
访问权限都是NO
在这里插入图片描述
我们仅仅创建了用户,但是没有权限访问数据库

下面我们创建一个任意主机可访问的!

-- 创建用户heima ,可以在任意主机访问该数据库,密码123456 ;
create  user 'heima'@'%' identified by '123456';

在这里插入图片描述
修改密码

-- 修改用户heima 的访问密码为1234 ;
alter  user 'heima'@'%' identified with mysql_native_password by '1234';

在这里插入图片描述
删除

-- 删除itcast@LocaLhost用户
drop user 'itcast'@'localhost';

在这里插入图片描述

2.6.2 权限控制

MySQL中定义了很多种权限,但是常用的就以下几种:

权限说明
ALL, ALL PRIVILEGES所有权限
SELECT查询数据
INSERT插入数据
UPDATE修改数据
DELETE删除数据
ALTER修改表
DROP删除数据库/表/视图
CREATE创建数据库/表
  1. 查询权限:SHOW GRANTS FOR ‘用户名'@'主机名';
  2. 授予权限:GRANT 权限列表ON 数据库名.表名 TO '用户名’@'主机名';
  3. 撤销权限:REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
show grants for 'heima'@'%';

表示有登录权限
在这里插入图片描述
授予权限

grant all on test.* to 'heima'@'%';

在这里插入图片描述
在这里插入图片描述
撤销权限

revoke all on test.* from 'heima'@'%';

在这里插入图片描述
注意:

  • 多个权限之间,使用逗号分隔
  • 授权时,数据库名和表名可以使用*进行通配,代表所有。
  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
【完整课程列表】 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第01章 初始MySQL(共19页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第02章 MySQL的安装与配置(共14页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第03章 数据库的基本操作(共6页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第04章 数据表的基本操作(共28页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第05章 数据类型和运算符(共17页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第06章 MySQL函数(共76页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第07章 查询数据(共50页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第08章 插入、更新与删除数据(共12页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第09章 索引(共13页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第10章 存储过程和函数(共20页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第11章 视图(共20页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第12章 触发器(共11页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第13章 MySQL权限与安全管理(共30页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第14章 数据备份与还原(共21页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第15章 MySQL日志(共23页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第16章 性能优化(共23页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第17章 MySQL Replication(共27页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第18章 MySQL Workbench 的使用(共18页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第19章 MySQL管理利器-MySQL Utilities(共5页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第20章 读写分离的利器-MySQL Proxy(共8页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第21章 精通MySQL存储引擎(共31页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第22章 PHP操作MySQL数据库(共16页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第23章 PDO数据库抽象类库(共12页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第24章 开发网上商城(共6页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第25章 论坛管理系统数据库设计(共6页).ppt 完整版 MySQL8.0从入门到精通 MySQL数据库教程 第26章 新闻发布系统数据库设计(共9页).ppt
### 回答1: MySQL是一种流行的关系型数据库管理系统,具有易学易用、高性能和开源的特点。要想从入门到精通MySQL,需要掌握以下几个方面。 首先,了解MySQL的基本概念和架构。理解数据库、表、字段、索引和查询等基础概念,并了解MySQL的客户端-服务器架构以及数据的存储和查询过程。 其次,学习MySQL的安装和配置。学会如何下载、安装和配置MySQL服务器,并了解MySQL的配置文件和常见配置选项。 然后,熟悉MySQLSQL语言。学习如何使用SQL语句进行数据的插入、更新、删除和查询。掌握SQL语句的基本语法和常用的查询操作,如JOIN、GROUP BY和ORDER BY等。 接着,了解MySQL的优化和调优技巧。学习如何通过创建合适的索引、优化查询语句和调整服务器参数等方式提高MySQL的性能。掌握查询执行计划的分析方法和索引的设计原则。 最后,深入学习MySQL的高级特性和扩展功能。学习如何使用存储过程、触发器和视图等高级特性,以及如何使用复制、分区和集群等扩展功能。同时,了解MySQL的安全机制和备份恢复策略,确保数据的安全性和可靠性。 通过以上的学习和实践,就可以从入门逐步进阶,最终掌握MySQL的各种特性和技巧,成为一名MySQL的专家。当然,实际的学习过程中还需要大量的实践和项目经验积累,不断提升自己的技术能力和解决问题的能力。 ### 回答2: 《MySQL从入门到精通》是一本由李波撰写的MySQL学习指南。该书详细介绍了MySQL数据库基础知识和高级应用技巧,适合初学者和进阶学习者阅读。 该书的前几章主要介绍了数据库的基本概念和MySQL的安装与配置方法。作者通过简明扼要的语言,帮助读者了解数据库的概念、结构和基本操作,以及如何在各种操作系统上安装和配置MySQL。 接下来的几章主要介绍了SQL语言的基本知识和常用操作。作者通过实例演示和练习题,详细讲解了SQL的语法、查询、插入、更新和删除操作,以及各种约束和函数的使用。 随后的章节逐渐深入,介绍了MySQL数据库的高级应用技巧和性能优化方法。作者详细介绍了索引的原理和使用方式,以及如何设计和优化数据库模型,提高查询和执行效率。此外,作者还介绍了如何进行备份和恢复数据库,以及如何保护数据库的安全性。 最后几章则介绍了MySQL数据库在Web开发中的应用。作者详细介绍了如何使用PHP和MySQL进行数据交互,以及如何利用MySQL实现用户认证和权限控制等功能。 总的来说,该书通过丰富的示例和实践操作,帮助读者系统全面地了解和掌握MySQL数据库的使用。无论是初学者还是有一定经验的开发人员,都可以通过阅读该书有效提升自己的MySQL水平。 ### 回答3: 《MySQL从入门到精通李波》是一本以MySQL数据库为主题的书籍,旨在帮助读者从零开始学习MySQL,并逐步成为MySQL专家。 首先,书中会介绍MySQL数据库的基本概念、结构和工作原理,以及在不同操作系统下的安装和配置方法。读者可以从中了解MySQL的基本特性,如数据类型、表、索引等,以及MySQL与其他数据库系统的差异。 第二,书中会逐步引导读者学习SQL语言,这是使用MySQL的必备知识。读者将学习SQL的基本语法和常用操作,如查询数据、插入、更新和删除等。此外,书中还会介绍高级的SQL操作和性能优化技巧,以提升数据库的效率和查询速度。 第三,书中会详细介绍MySQL的高级功能和特性。读者将学习如何进行数据库的备份与恢复、事务管理以及数据安全等方面的知识。同时,还会介绍MySQL的集群和分布式架构,以及如何进行数据库的水平和垂直拆分,以满足大规模应用的需求。 最后,书中还会介绍MySQL的性能调优和故障处理方法。读者将学习如何监控数据库的性能指标,以及如何调整数据库配置和优化查询语句,以提高数据库的性能和稳定性。同时,还会介绍如何处理数据库故障和恢复数据的方法。 总之,通过《MySQL从入门到精通李波》,读者可以系统地学习MySQL数据库的基本知识和高级技巧,从而成为一名熟练的MySQL专家。无论是初学者还是有一定经验的开发人员,都可以通过这本书提升自己的数据库技能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Matthew

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值