猿创征文 | MySQL从基础到高级

目录

1,数据库相关概念

1.1 数据库

1.2 数据库管理系统

1.3 常见的数据库管理系统

1.4 SQL

2,MySQL

2.1 MySQL安装

2.1.1 下载

2.2 MySQL卸载

2.3 MySQL配置

2.3.1 添加环境变量

2.3.2 新建配置文件

2.3.3 初始化MySQL

2.3.6 修改默认账户密码

2.4 MySQL登陆和退出

2.4.1 登陆

2.4.2 退出

2.5 MySQL数据模型

3,SQL概述

3.1 SQL简介

3.2 通用语法

3.3 SQL分类

4,DDL:操作数据库

4.1 查询

4.2 创建数据库

4.3 删除数据库

4.4 使用数据库

5,DDL:操作表

5.1 查询表

5.2 创建表

5.3 数据类型

5.4 删除表

5.5 修改表

6,navicat使用

6.1 navicat概述

6.2 navicat安装

6.3 navicat使用

6.3.1 建立和mysql服务的连接

6.3.2 操作

7,DML

7.1 添加数据

7.2 修改数据

7.3 删除数据

8,DQL

8.1 基础查询

8.2 条件查询

8.3 排序查询

8.4 聚合函数

8.4.1 概念

8.4.2 聚合函数分类

8.4.3 聚合函数语法

8.5 分组查询

8.6 分页查询

9,约束

9.1 概念

9.2 分类

9.3 非空约束

9.4 唯一约束

9.5 主键约束

9.6 默认约束

9.7 外键约束

9.8.1 概述

9.8.2 语法

10,数据库设计

2.1 数据库设计简介

2.2 表关系(一对多) 

2.3 表关系(多对多)

2.4 表关系(一对一)

11,多表查询

11.1 内连接查询

11.2 外连接查询

11.3 子查询


1,数据库相关概念

1.1 数据库

存储和管理数据的仓库,数据是有组织的进行存储。

数据库英文名是 DataBase ,简称 DB
数据库就是将数据存储在硬盘上,可以达到持久化存储的效果。

1.2 数据库管理系统

管理数据库的大型软件

英文: DataBase Management System ,简称 DBMS
在电脑上安装了数据库管理系统后,就可以通过数据库管理系统创建数据库来存储数据,也可以通过该系统对数据库中的数 据进行数据的增删改查相关的操作。我们平时说的MySQL 数据库其实是 MySQL 数据库管理系统。
猿创征文 | MySQL从基础到高级_第1张图片

 

1.3 常见的数据库管理系统

Oracle:收费的大型数据库,Oracle 公司的产品

MySQL : 开源免费的中小型数据库。后来 Sun 公司收购了 MySQL ,而 Sun 公司又被 Oracle 收购
SQL Server MicroSoft 公司收费的中型的数据库。 C# .net 等语言常使用
PostgreSQL :开源免费中小型的数据库
DB2 IBM 公司的大型收费数据库产品
SQLite :嵌入式的微型数据库。如:作为 Android 内置数据库
MariaDB :开源免费中小型的数据库

1.4 SQL

英文: Structured Query Language ,简称 SQL ,结构化查询语言
操作关系型数据库的编程语言
定义操作所有关系型数据库的统一标准,可以使用 SQL 操作所有的关系型数据库管理系统,以后工作中如果使用到了其
他的数据库管理系统,也同样的使用 SQL 来操作。

2MySQL

2.1 MySQL安装

2.1.1 下载

https://downloads.mysql.com/archives/community/

2.1.2 安装 ( 解压 )
下载完成后我们得到的是一个压缩包,将其解压,我们就可以得到 MySQL 5.7.24 的软件本体了 ( 就是一个文件夹 ) ,我们可以
把它放在你想安装的位置。

2.2 MySQL卸载

如果你想卸载MySQL,也很简单。

右键开始菜单,选择 命令提示符 ( 管理员 ) ,打开黑框
1、net stop mysql(停止连接)
2、 mysqld -remove mysql(移除mysql)
3. 最后删除 MySQL 目录及相关的环境变量。

2.3 MySQL配置

2.3.1 添加环境变量

2.3.2 新建配置文件

2.3.3 初始化MySQL

mysqld --initialize-insecure

2.3.4 注册MySQL服务

mysqld -install

2.3.5 启动MySQL服务

net start mysql // 启动mysql服务

net stop mysql // 停止 mysql 服务

2.3.6 修改默认账户密码

mysqladmin -u root password 1234

2.4 MySQL登陆和退出

2.4.1 登陆

mysql -uroot -p1234

格式:mysql -u用户名 -p密码 -h要连接的mysql服务器的ip地址(默认127.0.0.1) -P端口号(默认3306)

2.4.2 退出

exit
quit

2.5 MySQL数据模型

关系型数据库:

关系型数据库是建立在关系模型基础上的数据库,简单说,关系型数据库是由多张能互相连接的 二维表 组成的数据库
如下图 订单信息表 客户信息表 都是有行有列二维表我们将这样的称为关系型数据库。
猿创征文 | MySQL从基础到高级_第2张图片

 关系型数据库的优点:

都是使用表结构,格式一致,易于维护。

使用通用的 SQL 语言操作,使用方便,可用于复杂查询。

        关系型数据库都可以通过SQL 进行操作,所以使用方便。
        复杂查询。现在需要查询001 号订单数据,我们可以看到该订单是 1 号客户的订单,而 1 号订单是李聪这个客户。以
        后也可以在一张表中进行统计分析等操作。
数据存储在磁盘中,安全。
小结:
MySQL 中可以创建多个数据库,每个数据库对应到磁盘上的一个文件夹
在每个数据库中可以创建多个表,每张都对应到磁盘上一个 frm 文件
每张表可以存储多条数据,数据会被存储到磁盘中 MYD 文件中

3SQL概述

3.1 SQL简介

英文:Structured Query Language,简称 SQL。

结构化查询语言,一门操作关系型数据库的编程语言。

定义操作所有关系型数据库的统一标准。

对于同一个需求,每一种数据库操作的方式可能会存在一些不一样的地方,我们称为 方言 ”。

3.2 通用语法

SQL 语句可以单行或多行书写,以分号结尾。

MySQL 数据库的 SQL 语句不区分大小写,关键字建议使用大写。

注释 :使用-- 添加单行注释时, -- 后面一定要加空格,而 #没有要求。多行注释 : /* 注释 */

3.3 SQL分类

DDL(Data Definition Language) : 数据定义语言,用来定义数据库对象:数据库,表,列等 DDL简单理解就是用来操作数据库,表等
猿创征文 | MySQL从基础到高级_第3张图片

 

DML(Data Manipulation Language) 数据操作语言,用来对数据库中表的数据进行增删改 DML简单理解就对表中数据进行增删改
猿创征文 | MySQL从基础到高级_第4张图片

 

DQL(Data Query Language) 数据查询语言,用来查询数据库中表的记录 ( 数据 )。
DQL 简单理解就是对数据进行查询操作。从数据库表中查询到我们想要的数据。
DCL(Data Control Language) 数据控制语言,用来定义数据库的访问权限和安全级别,及创建用户。
DML 简单理解就是对数据库进行权限控制。比如我让某一个数据库表只能让某一个用户进行操作等。
注意: 以后我们最常操作的是 DML 和 DQL ,因为我们开发中最常操作的就是数据。

4DDL:操作数据库

4.1 查询

查询所有的数据库:

SHOW DATABASES ;

4.2 创建数据库

创建数据库
CREATE DATABASE 数据库名称 ;

创建数据库(判断,如果不存在则创建):

CREATE DATABASE IF NOT EXISTS 数据库名称;

4.3 删除数据库

删除数据库:

DROP DATABASE 数据库名称 ;

 删除数据库(判断,如果存在则删除):

DROP DATABASE IF EXISTS 数据库名称 ;

4.4 使用数据库

使用数据库:

USE 数据库名称 ;

查看当前使用的数据库:

 SELECT DATABASE();

5DDL:操作表

5.1 查询表

查询当前数据库下所有表名称

SHOW TABLES ;

 查询表结构

DESC 表名称 ;

5.2 创建表

创建表

CREATE TABLE 表名 (
字段名 1 数据类型 1,
字段名 2 数据类型 2,
字段名 n 数据类型 n
) ;

 注意:最后一行末尾,不能加逗号。

创建表:

 create table tb_user (

id int ,
username varchar ( 20 ) ,
password varchar ( 32 )
) ;  

5.3 数据类型

MySQL 支持多种类型,可以分为三类:

数值:

tinyint : 小整数型,占一个字节

int : 大整数类型,占四个字节
eg age int
double : 浮点类型
使用格式: 字段名 double ( 总长度 , 小数点后保留的位数 )
eg score double ( 5 , 2 )
日期
date : 日期值。只包含年月日
eg birthday date
datetime : 混合日期和时间值。包含年月日时分秒
字符串
char : 定长字符串。
优点:存储性能高
缺点:浪费空间
eg name char ( 10 ) 如果存储的数据字符个数不足 10 个,也会占 10 个的空间
varchar : 变长字符串。
优点:节约空间
缺点:存储性能底
eg name varchar ( 10 ) 如果存储的数据字符个数不足 10 个,那就数据字符个数是几就占几个的空间 

5.4 删除表

删除表

DROP TABLE 表名 ;

删除表时判断表是否存在

DROP TABLE IF EXISTS 表名 ;

5.5 修改表

修改表名
ALTER TABLE 表名 RENAME TO 新的表名 ;
-- 将表名 student 修改为 stu
alter table student rename to stu;
添加一列
ALTER TABLE 表名 ADD 列名 数据类型 ;
-- stu 表添加一列 address ,该字段类型是 varchar(50)
alter table stu add address varchar ( 50 ) ;
修改数据类型
ALTER TABLE 表名 MODIFY 列名 新数据类型 ;
-- stu 表中的 address 字段的类型改为 char(50)
alter table stu modify address char ( 50 ) ;
修改列名和数据类型
ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型 ;
-- stu 表中的 address 字段名改为 addr ,类型改为 varchar(50)
alter table stu change address addr varchar ( 50 ) ;
删除列
ALTER TABLE 表名 DROP 列名 ;
-- stu 表中的 addr 字段 删除
alter table stu drop addr;

6navicat使用

6.1 navicat概述

Navicat for MySQL 是管理和开发 MySQL MariaDB 的理想解决方案。
这套全面的前端工具为数据库管理、开发和维护提供了一款直观而强大的图形界面。
官网: http://www.navicat.com.cn

6.2 navicat安装

6.3 navicat使用

6.3.1 建立和mysql服务的连接

第一步: 点击连接,选择 MySQL
猿创征文 | MySQL从基础到高级_第5张图片

 第二步:填写连接数据库必要的信息

猿创征文 | MySQL从基础到高级_第6张图片 

6.3.2 操作

修改表结构。
编写 SQL 语句并执行。

7DML

7.1 添加数据

给指定列添加数据
INSERT INTO 表名 ( 列名 1, 列名 2,… ) VALUES ( 1, 2,… ) ;

 给全部列添加数据

INSERT INTO 表名 VALUES(1,2,…);

 批量添加数据

INSERT INTO 表名 ( 列名 1, 列名 2,… ) VALUES ( 1, 2,… ) , ( 1, 2,… ) , ( 1, 2,… ) …;
INSERT INTO 表名 VALUES ( 1, 2,… ) , ( 1, 2,… ) , ( 1, 2,… ) …;

7.2 修改数据

修改表数据

UPDATE 表名 SET 列名 1 = 1, 列名 2 = 2,… [ WHERE 条件 ] ;

7.3 删除数据

删除数据
DELETE FROM 表名 [ WHERE 条件 ] ;

8DQL

8.1 基础查询

查询多个字段
SELECT 字段列表 FROM 表名 ;
SELECT * FROM 表名 ; -- 查询所有数据
去除重复记录
 
SELECT DISTINCT 字段列表 FROM 表名 ;
起别名
AS : AS 也可以省略

8.2 条件查询

条件查询

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

 猿创征文 | MySQL从基础到高级_第7张图片

 模糊查询

模糊查询使用 like 关键字,可以使用通配符进行占位 :
(1) _ : 代表单个任意字符
(2)% : 代表任意个数字符

8.3 排序查询

8.3.1 语法
SELECT 字段列表 FROM 表名 ORDER BY 排序字段名 1 [ 排序方式 1 ] , 排序字段名 2 [ 排序方式 2 ] …;
上述语句中的排序方式有两种,分别是:
ASC : 升序排列 (默认值)
DESC : 降序排列
注意:如果有多个排序条件,当前边的条件值一样时,才会根据第二条件进行排序

8.4 聚合函数

8.4.1 概念

将一列数据作为一个整体,进行纵向计算。

8.4.2 聚合函数分类

猿创征文 | MySQL从基础到高级_第8张图片 

8.4.3 聚合函数语法

SELECT 聚合函数名 ( 列名 ) FROM ;
注意: null 值不参与所有聚合函数运算。

8.5 分组查询

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

 注意:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义

8.6 分页查询

SELECT 字段列表 FROM 表名 LIMIT 起始索引 , 查询条目数 ;

 注意: 上述语句中的起始索引是从0开始。

 起始索引计算公式:

起始索引 = ( 当前页码 - 1 ) * 每页显示的条数

9,约束

9.1 概念

约束是作用于表中列上的规则,用于限制加入表的数据。
例如:我们可以给 id 列加约束,让其值不能重复,不能为 null 值。
约束的存在保证了数据库中数据的正确性、有效性和完整性。
添加约束可以在添加数据的时候就限制不正确的数据,年龄是 3000 ,数学成绩是 -5 分这样无效的数据,继而保障数据的
完整性。

9.2 分类

非空约束: 关键字是 NOT NULL
保证列中所有的数据不能有 null 值。
例如: id 列在添加 马花疼 这条数据时就不能添加成功。
唯一约束:关键字是 UNIQUE
保证列中所有数据各不相同。
例如: id 列中三条数据的值都是 1 ,这样的数据在添加时是绝对不允许的。
主键约束: 关键字是 PRIMARY KEY
主键是一行数据的唯一标识,要求非空且唯一。一般我们都会给没张表添加一个主键列用来唯一标识数据。
例如:上图表中 id 就可以作为主键,来标识每条数据。那么这样就要求数据中 id 的值不能重复,不能为 null 值。
检查约束: 关键字是 CHECK
保证列中的值满足某一条件。
例如:我们可以给 age 列添加一个范围,最低年龄可以设置为 1 ,最大年龄就可以设置为 300 ,这样的数据才更合理些。
注意: MySQL 不支持检查约束。 
默认约束: 关键字是 DEFAULT
保存数据时,未指定值则采用默认值。
例如:我们在给 english 列添加该约束,指定默认值是 0 ,这样在添加数据时没有指定具体值时就会采用默认给定的 0
外键约束: 关键字是 FOREIGN KEY
外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性。

9.3 非空约束

概念
非空约束用于保证列中所有数据不能有 NULL
语法
添加约束
-- 创建表时添加非空约束
CREATE TABLE 表名 (
        列名 数据类型 NOT NULL ,
        …
) ;
-- 建完表后添加非空约束
ALTER TABLE 表名 MODIFY 字段名 数据类型 NOT NULL ;

删除约束

ALTER TABLE 表名 MODIFY 字段名 数据类型 ;

9.4 唯一约束

概念
唯一约束用于保证列中所有数据各不相同。
语法
添加约束
-- 创建表时添加唯一约束
CREATE TABLE 表名 (
列名 数据类型 UNIQUE [ AUTO_INCREMENT ] ,
-- AUTO_INCREMENT: 当不指定值时自动增长
) ;
CREATE TABLE 表名 (
列名 数据类型 ,
[ CONSTRAINT ] [ 约束名称 ] UNIQUE ( 列名 )
) ;
-- 建完表后添加唯一约束
ALTER TABLE 表名 MODIFY 字段名 数据类型 UNIQUE ;

 删除约束

ALTER TABLE 表名 DROP INDEX 字段名 ;

9.5 主键约束

概念
主键是一行数据的唯一标识,要求非空且唯一。
一张表只能有一个主键
语法
添加约束
-- 创建表时添加主键约束
CREATE TABLE 表名 (
列名 数据类型 PRIMARY KEY [ AUTO_INCREMENT ] ,
) ;
CREATE TABLE 表名 (
列名 数据类型 ,
[ CONSTRAINT ] [ 约束名称 ] PRIMARY KEY ( 列名 )
) ;
-- 建完表后添加主键约束
ALTER TABLE 表名 ADD PRIMARY KEY ( 字段名 ) ;

 ALTER TABLE 表名 DROP PRIMARY KEY;

9.6 默认约束

概念
保存数据时,未指定值则采用默认值
语法
添加约束
-- 创建表时添加默认约束
CREATE TABLE 表名 (
列名 数据类型 DEFAULT 默认值 ,
) ;
-- 建完表后添加默认约束
ALTER TABLE 表名 ALTER 列名 SET DEFAULT 默认值 ;

 删除约束

ALTER TABLE 表名 ALTER 列名 DROP DEFAULT ;

9.7 外键约束

9.8.1 概述

外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性。

9.8.2 语法

添加外键约束
-- 创建表时添加外键约束
CREATE TABLE 表名 (
列名 数据类型 ,
[ CONSTRAINT ] [ 外键名称 ] FOREIGN KEY ( 外键列名 ) REFERENCES 主表 ( 主表列名 )
) ;
-- 建完表后添加外键约束
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY ( 外键字段名称 ) REFERENCES 主表名称 ( 主表列名称 ) ;

删除外键约束

ALTER TABLE 表名 DROP FOREIGN KEY 外键名称 ;

10,数据库设计

2.1 数据库设计简介

软件的研发步骤
猿创征文 | MySQL从基础到高级_第9张图片
数据库设计概念
数据库设计就是根据业务系统的具体需求,结合我们所选用的 DBMS ,为这个业务系统构造出最优的数据存储模型。
建立数据库中的 表结构 以及 表与表之间的关联关系 的过程。
数据库设计的步骤
需求分析(数据是什么 ? 数据具有哪些属性 ? 数据与属性的特点是什么)
逻辑分析(通过 ER 图对数据库进行逻辑建模,不需要考虑我们所选用的数据库管理系统)
猿创征文 | MySQL从基础到高级_第10张图片

 

物理设计(根据数据库自身的特点把逻辑设计转换为物理设计)
维护设计( 1. 对新的需求进行建表; 2. 表优化)
表关系
一对一
如:用户 和 用户详情
一对一关系多用于表拆分,将一个实体中经常使用的字段放一张表,不经常使用的字段放另一张表,用于提升查询性能。
一对多
如:部门 和 员工
一个部门对应多个员工,一个员工对应一个部门。如下图:
猿创征文 | MySQL从基础到高级_第11张图片
多对多
如:商品 和 订单
一个商品对应多个订单,一个订单包含多个商品。如下图:
猿创征文 | MySQL从基础到高级_第12张图片

 

2.2 表关系(一对多) 

一对多
如:部门 和 员工
一个部门对应多个员工,一个员工对应一个部门。
实现方式
在多的一方建立外键,指向一的一方的主键
案例
猿创征文 | MySQL从基础到高级_第13张图片

-- 删除表 
DROP TABLE IF EXISTS tb_emp; 
DROP TABLE IF EXISTS tb_dept; 
-- 部门表 
CREATE TABLE tb_dept( 
    id int primary key auto_increment, 
    dep_name varchar(20), 
    addr varchar(20) 
);
-- 员工表 
CREATE TABLE tb_emp(     
    id int primary key auto_increment, 
    name varchar(20),     
    age int, 
    dep_id int, 

    -- 添加外键 dep_id,关联 dept 表的id主键 
    CONSTRAINT fk_emp_dept FOREIGN KEY(dep_id) REFERENCES tb_dept(id) 
);

 查看表结构模型图:

猿创征文 | MySQL从基础到高级_第14张图片

2.3 表关系(多对多)

多对多
如:商品 和 订单
一个商品对应多个订单,一个订单包含多个商品
实现方式
建立第三张中间表,中间表至少包含两个外键,分别关联两方主键
案例
猿创征文 | MySQL从基础到高级_第15张图片

 建表语句如下:

-- 删除表
DROP TABLE IF EXISTS tb_order_goods; 
DROP TABLE IF EXISTS tb_order; 
DROP TABLE IF EXISTS tb_goods; 

-- 订单表 
CREATE TABLE tb_order( 
    id int primary key auto_increment, 
    payment double(10,2),     
    payment_type TINYINT,     
    status TINYINT 
);

-- 商品表 
CREATE TABLE tb_goods( 
    id int primary key auto_increment, 
    title varchar(100), 
    price double(10,2) 
);

-- 订单商品中间表 
CREATE TABLE tb_order_goods( 
    id int primary key auto_increment, 
    order_id int, 
    goods_id int,     
    count int 
);

-- 建完表后,添加外键 
alter table tb_order_goods add CONSTRAINT fk_order_id FOREIGN key(order_id) REFERENCES tb_order(id); 
alter table tb_order_goods add CONSTRAINT fk_goods_id FOREIGN key(goods_id) REFERENCES tb_goods(id);

 查看表结构模型图:

猿创征文 | MySQL从基础到高级_第16张图片

 

2.4 表关系(一对一)

一对一
如:用户 和 用户详情
一对一关系多用于表拆分,将一个实体中经常使用的字段放一张表,不经常使用的字段放另一张表,用于提升查询性能
实现方式
在任意一方加入外键,关联另一方主键,并且设置外键为唯一 (UNIQUE)
案例
猿创征文 | MySQL从基础到高级_第17张图片
create table tb_user_desc ( 
    id int primary key auto_increment, 
    city varchar(20),     
    edu varchar(10), 
    income int, 
    status char(2), 
    des varchar(100)
);、

create table tb_user ( 
    id int primary key auto_increment, 
    photo varchar(100), 
    nickname varchar(50), 
    age int, 
    gender char(1), 
    desc_id int unique, 
    -- 添加外键 
    CONSTRAINT fk_user_desc FOREIGN KEY(desc_id) REFERENCES tb_user_desc(id) 
);

 查看表结构模型图:

猿创征文 | MySQL从基础到高级_第18张图片

11,多表查询

11.1 内连接查询

-- 隐式内连接
SELECT 字段列表 FROM 1, 2… WHERE 条件 ;
-- 显示内连接
SELECT 字段列表 FROM 1 [ INNER ] JOIN 2 ON 条件 ;

内连接相当于查询 A B 交集数据

 

 

11.2 外连接查询

-- 左外连接
SELECT 字段列表 FROM 1 LEFT [ OUTER ] JOIN 2 ON 条件 ;
-- 右外连接
SELECT 字段列表 FROM 1 RIGHT [ OUTER ] JOIN 2 ON 条件 ;
左外连接:相当于查询 A 表所有数据和交集部分数据。
右外连接:相当于查询 B 表所有数据和交集部分数据。

 

11.3 子查询

概念:查询中嵌套查询,称嵌套查询为子查询。

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