黑马程序员 MySQL数据库入门到精通——基础篇(1)

黑马程序员 MySQL数据库入门到精通——基础篇(1)

  • 1. MySQL概述
    • 1.1 MySQL下载
    • 1.2 客户端连接
    • 1.3 数据模型
  • 2. SQL
    • 2.1 SQL通用语法
    • 2.2 SQL分类
    • 2.3 DDL语言
      • 2.3.1 数据库操作
      • 2.3.2 表操作——创建&查询
      • 2.3.3 数据类型及案例
      • 2.3.4 案例分析
      • 2.3.5 表操作——修改&删除
      • 2.3.6 MySQL图形化界面
    • 2.4 DML语言
      • 2.4.1 添加数据(INSERT)
      • 2.4.2 修改数据(UPDATE)
      • 2.4.3 删除数据(DELETE)
    • 2.5 DQL语言
      • 2.5.1 基础查询
      • 2.5.2 条件查询
      • 2.5.3 聚合函数
      • 2.5.4 分组查询
      • 2.5.5 排序查询
      • 2.5.6 分页查询
      • 2.5.7 案例练习
      • 2.5.8 执行顺序
    • 2.6 DCL语言
      • 2.6.1 用户管理
      • 2.6.2 权限控制


高效存储与处理这些数据才是核心!数据库就是专门存储与处理的!!

黑马程序员 MySQL数据库入门到精通——基础篇(1)_第1张图片
面试官常问:

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

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

黑马程序员 MySQL数据库入门到精通——基础篇(1)_第2张图片
下面我们就把成为合格的MySQL的工程师,分为三个阶段,此博客主要围绕着基础篇展开,后续我也会整理出进阶与运维篇。大家一起努力吧!!
黑马程序员 MySQL数据库入门到精通——基础篇(1)_第3张图片

1. MySQL概述

数据库相关概念

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

黑马程序员 MySQL数据库入门到精通——基础篇(1)_第4张图片

1.1 MySQL下载

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

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

黑马程序员 MySQL数据库入门到精通——基础篇(1)_第5张图片
黑马程序员 MySQL数据库入门到精通——基础篇(1)_第6张图片
黑马程序员 MySQL数据库入门到精通——基础篇(1)_第7张图片
黑马程序员 MySQL数据库入门到精通——基础篇(1)_第8张图片
双击进入后:
黑马程序员 MySQL数据库入门到精通——基础篇(1)_第9张图片
黑马程序员 MySQL数据库入门到精通——基础篇(1)_第10张图片
等待安装…
黑马程序员 MySQL数据库入门到精通——基础篇(1)_第11张图片
黑马程序员 MySQL数据库入门到精通——基础篇(1)_第12张图片
黑马程序员 MySQL数据库入门到精通——基础篇(1)_第13张图片
黑马程序员 MySQL数据库入门到精通——基础篇(1)_第14张图片
黑马程序员 MySQL数据库入门到精通——基础篇(1)_第15张图片
然后next——next…安装完了

黑马程序员 MySQL数据库入门到精通——基础篇(1)_第16张图片
管理员身份运行!!!

黑马程序员 MySQL数据库入门到精通——基础篇(1)_第17张图片

1.2 客户端连接

黑马程序员 MySQL数据库入门到精通——基础篇(1)_第18张图片
黑马程序员 MySQL数据库入门到精通——基础篇(1)_第19张图片

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

一般在:C:\Program Files\MySQL\MySQL Server 8.0\bin 然后配置环境变量添加这个路径
黑马程序员 MySQL数据库入门到精通——基础篇(1)_第20张图片

1.3 数据模型

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

黑马程序员 MySQL数据库入门到精通——基础篇(1)_第21张图片
特点:

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

黑马程序员 MySQL数据库入门到精通——基础篇(1)_第22张图片

2. SQL

2.1 SQL通用语法

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

2.2 SQL分类

分类 全称 说明
DDL Data Definition Language 数据定义语言,用来定义数据库对象(数据库,表,字段)
DML Data Manipulation Language 数据操作语言,用来对数据库表中的数据进行增删改
DQL Data Query Language 数据查询语言,用来查询数据库中表的记录
DCL Data 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;
黑马程序员 MySQL数据库入门到精通——基础篇(1)_第23张图片

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

例子:

id name age gender
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)范围 描述
TINYINT 1 byte (-128, 127) (0,255) 小整数值
SMALLINT 2 bytes (-32768, 32767) (0, 65535) 大整数值
MEDIUMINT 3 bytes (-8388608, 8388607) (0,16777215) 大整数值
INT或INTEGER 4 bytes (-2147483648, 2147483647) (0,4294967295) 大整数值
BIGINT 8 bytes (-263, 263-1) (0, 264-1) 极大整数值
FLOAT 4 bytes (-3.402823466 E+38,3.402823466351 E+38) 0和(1.175494351 E-38,3.402823466 E+38) 单精度浮点数值
DOUBLE 8 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)

字符串类型

类型 大小 描述
CHAR 0-255 bytes 定长字符串
VARCHAR 0-65535 bytes 变长字符串
TINYBLOB 0-255 bytes 不超过255个字符的二进制数据
TINYTEXT 0-255 bytes 短文本字符串
BLOB 0-65535 bytes 二进制形式的长文本数据
TEXT 0-65535 bytes 长文本数据
MEDIUMBLOB 0-16,777,215 bytes 二进制形式的中等长度文本数据
MEDIUMTEXT 0-16,777,215 bytes 中等长度文本数据
LONGBLOB 0-4,294,967,295 bytes 二进制形式的极大文本数据
LONGTEXT 0-4,294,967,295 bytes 极大文本数据

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

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

2.3.4 案例分析

黑马程序员 MySQL数据库入门到精通——基础篇(1)_第24张图片

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)

黑马程序员 MySQL数据库入门到精通——基础篇(1)_第25张图片

2.3.6 MySQL图形化界面

黑马程序员 MySQL数据库入门到精通——基础篇(1)_第26张图片
网上找到相关的魔法教程,成功安装永久的DataGrip

黑马程序员 MySQL数据库入门到精通——基础篇(1)_第27张图片

黑马程序员 MySQL数据库入门到精通——基础篇(1)_第28张图片
第一次打开点击DownLoad即可,然后点击testconnection 显示successful即可。
黑马程序员 MySQL数据库入门到精通——基础篇(1)_第29张图片

黑马程序员 MySQL数据库入门到精通——基础篇(1)_第30张图片
黑马程序员 MySQL数据库入门到精通——基础篇(1)_第31张图片

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


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

黑马程序员 MySQL数据库入门到精通——基础篇(1)_第32张图片
黑马程序员 MySQL数据库入门到精通——基础篇(1)_第33张图片

修改表结构
黑马程序员 MySQL数据库入门到精通——基础篇(1)_第34张图片
操作表
黑马程序员 MySQL数据库入门到精通——基础篇(1)_第35张图片

黑马程序员 MySQL数据库入门到精通——基础篇(1)_第36张图片
黑马程序员 MySQL数据库入门到精通——基础篇(1)_第37张图片

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...);

注意:

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

黑马程序员 MySQL数据库入门到精通——基础篇(1)_第38张图片

添加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 执行顺序

黑马程序员 MySQL数据库入门到精通——基础篇(1)_第39张图片

2.6 DCL语言

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

黑马程序员 MySQL数据库入门到精通——基础篇(1)_第40张图片

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 '用户名'@'主机名';

黑马程序员 MySQL数据库入门到精通——基础篇(1)_第41张图片
User
在这里插入图片描述

黑马程序员 MySQL数据库入门到精通——基础篇(1)_第42张图片

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

在这里插入图片描述
访问权限都是NO
黑马程序员 MySQL数据库入门到精通——基础篇(1)_第43张图片
我们仅仅创建了用户,但是没有权限访问数据库

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

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

黑马程序员 MySQL数据库入门到精通——基础篇(1)_第44张图片
修改密码

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

黑马程序员 MySQL数据库入门到精通——基础篇(1)_第45张图片
删除

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

黑马程序员 MySQL数据库入门到精通——基础篇(1)_第46张图片

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'@'%';

在这里插入图片描述
黑马程序员 MySQL数据库入门到精通——基础篇(1)_第47张图片
撤销权限

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

黑马程序员 MySQL数据库入门到精通——基础篇(1)_第48张图片
注意:

  • 多个权限之间,使用逗号分隔
  • 授权时,数据库名和表名可以使用*进行通配,代表所有。

你可能感兴趣的:(MySQL,数据库,mysql,sql)