MySQL学习

Posted 菜鸟-肥龙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL学习相关的知识,希望对你有一定的参考价值。

一、MySQL 概述 / 安装

1.1、MySQL 阐述

  • MySQL 是一种 DBMS,而且是一种一个小型的开源的关系型数据管理系统。

    • 轻量级、小型的数据库

    • 开源免费(6版本之前免费)

    • 所属于Oracle公司

1.2 、MySQL 安装

1、MySQL 下载地址

2、Windows 下安装 MySQL

  • 将下载文件安装到电脑中,打开安装程序。按照提示依次执行下一步,注意一下信息:

    1)Choosing a setup type:选择安装类型,安装类型共有5种,我们选择“Developer Default”即可。

    2)Type and Networking:选择运行方式,共有2种,我们选择标准类型“Standalone…”即可,第二种是沙盒运行。

    3)Type and Networking:选择服务器配置,“Developer Machine”选项代表典型个人桌面工作站,在3种类型中,占用最少的内存,一般选择此选项。

    4)Accounts and Roles:设置账户,在这里设置root密码,不要忘记了哦。

    5)一路Next,即可安装成功。

    详细教程:https://www.shulanxt.com/doc/dbdoc/mysql-install-2

    视频连接:https://www.shulanxt.com/database/mysqlvideo/p4

3、Linux 下安装 MySQL

  • 通过secureCRT工具连接Linux系统

  • 上传 mysql 的安装包

alt + p -------> put d:/setup/mysql-5.7.27-1.el7.x86_64.rpm-bundle.tar
  • 解压 mysql 的安装包

mkdir mysql
tar -xvf mysql-5.7.27-1.el7.x86_64.rpm-bundle.tar -C mysql/
  • 安装客户端

cd mysql/
rpm -ivh mysql-community-client-5.7.27-1.el7.x86_64.rpm --force --nodeps
  • 安装服务端

rpm -ivh mysql-community-server-5.7.27-1.el7.x86_64.rpm --force --nodeps
  • 修改mysql默认字符集

vi /etc/my.cnf

添加如下内容:
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

-- 需要在最下方填写
[client]
default-character-set=utf8
  • 启动mysql服务

service mysqld start
  • 登录mysql

mysql -u root -p  敲回车,输入密码
初始密码查看:cat /var/log/mysqld.log
在root@localhost:   后面的就是初始密码
  • 修改mysql登录密码

set global validate_password_policy=0;

set global validate_password_length=1;

set password=password(\'密码\');
  • 授予远程连接权限

//授权
grant all privileges on *.* to \'root\' @\'%\' identified by \'密码\';
//刷新
flush privileges;
  • 关闭Linux系统防火墙

systemctl stop firewalld.service

MySQL 学习链接 :https://www.shulanxt.com/database/mysql/mysql-ms

1.3、MySQL 登录

1、Windows 下启动 MySQL

  • 下载安装包,解压到指定目录

  • 配置环境变量

  • 配置文件

  • 初始化:

    • 以管理员身份打开 CMD ,切换到 MySQL 的 bin 路线下 输入mysqld initialize insecure

  • mysql服务添加到windows服务中

  • 开启mysql客户端

  • window下mysql修改root密码

详细操作链接:https://www.cnblogs.com/facestore/p/9167716.html

2、管理工具连接

  • sqlyog工具登录mysql

二、DCL 数据控制语言

2.1、概述

  • DCL(Data Control Language):数据控制语句,用于控制不同数据段直接的许可和访问级别的语句。这些语句定义了数据库、表、字段、用户的访问权限和安全级别。

  • 常用关键字:GRANT, REVOKE 等

2.2、操作语句

详细操作语句请参考以下地址:https://www.cnblogs.com/Rohn/p/11722515.html

三、DDL 数据定义语言

3.1、概述

  • DDL (Data Definition Languages):数据定义语言,这些语句定义了不同的数据段、数据库、表、列、索引等数据库对象的定义。

  • 常用关键字:create(创建)、drop(删除)、alter(修改)、retrieve(查询)等。

3.2、操作语句

1、Retrieve:查询

库 :操作

  • 查询所有数据库:SHOW DATABASES

  • 查询某个数据库的创建:SHOW CREATE DATABASES 数据 库名称

  • 查询 mysql 数据库的创建格式:SHOW CREATE DATABASES mysql

表 :操作

  • 查询某库下所有的表:SHOW TABLES

  • 查询表结构:DESC 表名

  • 查询某表字符集:SHOW TABLE STATUS FEOM 库名 like ‘ 表名 ’

2、Create:创建

库 :操作

  • 创建数据库(判断,如果不存在则创建):CREATE DATABASE 【 IF NOT EXISTS】 数据库名称

  • 创建数据库,并指定字符集:CREATE DATEBASE 数据库名称 CHARACTER SET 字符集名称

表 :操作

  • 创建表:

  • CREATE TABLE 表名(
    列名1 数据类型1 约束,
    列名2 数据类型2 约束,
    列名3 数据类型3 约束
    );
    -- 注意:最后一列,不需要加逗号
  • 复制表:CREATE TABLE 表名 LIKE 被复制的表名 (只复制数据结构,不会复制内容)

3、Alter:修改

库 : 操作

  • 不能直接修改 库 名称

  • 修改数据库的字符集:ALTER DATABASE 数据库名称 CHARACTER SET 字符集名称

表 : 操作

  • 修改字段名:ALTER TABLE 表名 CHANGE COLUMN 旧字段 新字段 数据类型

  • 修改表名:ALTER TABLE 表名 RENAME 【TO】 新的表名

  • 修改字段类型和列级约束:ALTER TABLE 表名 MODIFY COLUMN 字段名 约束

  • 添加字段: ALTER TABLE 表名 ADD COLUMN 字段名 数据类型

  • 删除字段:ALTER TABlE 表名 DROP COLUMN 字段名

4、Deop:删除

库 : 操作

  • 删除数据库:DROP DATABASE 数据库名称

  • 删除数据库(判断,如果存在则删除):DROP DATABASE IF EXISTS 数据库名称

表 : 操作

  • 删除表:DROP TABLE 【IF EXISTS】表名

四、DML 数据操作语言

4.1、概述

  • DML(Data Manipulation Language):数据操纵语言,主要用于实现对数据库中的数据进行操作。

  • 常用关键字:INSERT 、UPDATE、DELETE

4.2、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,.......);

4、注意事项

  • 列名和值得数量以及数据类型要对应

  • 除了数字类型,其他数据类型的数据都需要加单引号(单引导和双引号都可以,推荐单引号)

4.3、UPDATE 语句

1、修改单表数据

  • 标准语法:UPDATE 表名 SET 列名1 = 值1,列名2 = 值2,......WHERE 条件

2、修改多表数据

  • 标准语法:UPDATE 表名1 别名1,表名2 别名2 SET 列名1 = 值1,列名2 = 值2 WHERT 连接条件 AND 筛选条件

3、注意事项

  • 修改语句必须添加条件,如果不加条件,则所有数据都会被修改。

4.4、DELETE 语法

1、删除方式一:DELETE 语句

  • 单表删除标准语法:DELETE FROM 表名 【WHERE 条件】

  • 多表删除标准语法:DELETE 表名1 别名1,表名2 别名2 FROM 列名1 = 值1,列名2 = 值2 WHERT 连接条件 AND 筛选条件

2、删除方式二:TRUNCATE 语句

  • 标准语法:TRUNCATE TABLE 表名

3、DELETE 和 TRUNCATE 两种删除方式的区别

  • truncate 不能添加 where 条件,而 delete 可以添加 where 条件

  • truncate 的效率高一点点

  • truncate 删除带自增长的列表后,如果在插入数据,数据从1开始。而 delete 删除带自增长列的表后,如果在插入数据,数据从上一次的断点开始。

  • truncate 删除不能回滚,delete 删除可以回滚。

4、注意事项

  • 删除语句中必须包含条件,如果不加条件,则会将所有数据删除。

五、DQL 数据查询语言

5.1、概述

  • DQL(Data Query Lanuage):数据库查询语言,主要用于数据库中数据的查询。

  • 基本结构:SELECT<字段名>FROM<表或视图名>WHERE<查询条件>

5.2、基础查询

1、语法

  • 标准语法:SELECT <arg> 【REOM 表名】

2、查询全部字段

  • 标准语法:SELECT *(所有列名) FROM 表名;

3、查询部分字段

  • 标准语法:SELECT 列名1,列名2,...... FROM 表名;

4、查询‘去重’

  • 标准语法:SELECT DISTINCT 列名1,列名2,...... FROM 表名;

    • 注意:只有全部重复的才能去除。

5、起别名

  • 标准语法:SELECT 列名1 【AS】 别名,列名2 【AS】 别名2 FROM 表名;

6、" + " 号作用:只作为运算符

  • SELECT 列名 + 10 ;

    • 两个操作数都为数值型,则做加法运算

    • 其中一方为字符型,视图将字符型转数值转换成数值型。如果转换成功继续做加法运算,转换失败字符型数值转换成“ 0 ”。并且只要其中一方为 null,则结果肯定为 null 。

7、CONCAT 关键字拼接两个列

  • 标准语法:SELECT CONCAT(\'列名1\',\'列名2\',......) FROM 表名;

8、计算列的值(四则运算)

  • 标准语法:SELECT 列名1 运算符(+、-、*、/) 数值 FROM 表名

  • 注意:如果某一列为 null ,可以通过 IFNULL(表达式1--想替换的列,表达式2--想替换的值)函数进行替换。

9、注意

  • <arg>:可以是常量、表达式、字段、函数

  • 通过 select 查询的结果,是一个虚拟的表格,并不是真实存在的。

5.3、条件查询

1、条件运算符查询

  • 条件运算符:>、<、>=、<=、=、<>/!=

2、逻辑运算符查询

  • 逻辑运算符:

    • AND 或 && :并且

    • OR 或 ||:或者

    • NOT 或 !:非

3、模糊查询

  • 模糊查询运算符:

    • Between......and......:在某个范围之内(都包含)

    • IN(......):多选一

    • LIKE:占位符:模糊查询,_ 单个任意字符, % 多个任意字符

    • IS NULL:是 null

    • IS NOT NULL:不是 null

4、条件查询语法 & 示例

-- 标准语法
SELECT 列名 FROM 表名 WHERE 条件;

-- 查询库存大于20的商品信息
SELECT * FROM product WHERE stock > 20;

-- 查询品牌为华为的商品信息
SELECT * FROM product WHERE brand=\'华为\';

-- 查询金额在4000 ~ 6000之间的商品信息
SELECT * FROM product WHERE price >= 4000 AND price <= 6000;
SELECT * FROM product WHERE price BETWEEN 4000 AND 6000;

-- 查询库存为14、30、23的商品信息
SELECT * FROM product WHERE stock=14 OR stock=30 OR stock=23;
SELECT * FROM product WHERE stock IN(14,30,23);

-- 查询库存为null的商品信息
SELECT * FROM product WHERE stock IS NULL;
-- 查询库存不为null的商品信息
SELECT * FROM product WHERE stock IS NOT NULL;

-- 查询名称以小米为开头的商品信息
SELECT * FROM product WHERE NAME LIKE \'小米%\';

-- 查询名称第二个字是为的商品信息
SELECT * FROM product WHERE NAME LIKE \'_为%\';

-- 查询名称为四个字符的商品信息
SELECT * FROM product WHERE NAME LIKE \'____\';

-- 查询名称中包含电脑的商品信息
SELECT * FROM product WHERE NAME LIKE \'%电脑%\';

5.4、排序查询

1、排序查询语法 & 示例

-- 标准语法
SELECT 列名 FROM 表名 [WHERE 条件] ORDER BY 排序的字段|表达式|函数|别名 排序方式1,列名2 排序方式2;

-- 按照库存升序排序
SELECT * FROM product ORDER BY stock ASC;

-- 查询名称中包含手机的商品信息。按照金额降序排序
SELECT * FROM product WHERE NAME LIKE \'%手机%\' ORDER BY price DESC;

-- 按照金额升序排序,如果金额相同,按照库存降序排列
SELECT * FROM product ORDER BY price ASC,stock DESC;

2、注意事项

  • 关键字:ORDER BY

  • ASC 升序(默认),DESC 降序

  • 多个排序条件时,只有当前边的条件值一样时,才会判断第二条件

  • order by :一般在最后才会执行,limit除外!

5.5 、常见函数

5.5.1、函数概述

  • 类似于 java 中的方法,将一组逻辑语句封装在方法体中,对外暴露方法名。

  • 好处:隐藏了实现细节,提高代码的重用性

  • 调用:select 函数名(实参列表) 【from 表名】

5.5.2、单行函数

1、字符函数

  • concat():拼接

  • substr():截取子串

  • upper():转换成大写

  • lower():转换成小写

  • trim():去除前后指定的空格和字符

  • ltrim():去除左边空格

  • rtrim():去除右边空格

  • replace():替换

  • lpad():左填充

  • rpad():右填充

  • length():获取字节个数

  • instr():返回子串第一次出现的索引

2、数学函数

  • round():四舍五入

  • rand():随机数

  • floor():向下取整

  • ceil():向上取整

  • mod():取余

  • truncate():截断

3、日期函数

  • now():当前系统日期 + 时间

  • curdate():当前系统日期

  • curtime():当前系统时间

  • str_to_date():将字符转换成日期

  • date_format():将日期转换成字符

4、流程控制函数

  • if():处理双分支

  • case():处理多个分支

5、其他函数

  • version():获取版本信息

  • database():获取当前库信息

  • user():获取当前连接用户

5.5.3、分组 / 聚合函数

1、函数名

  • count(列名):统计数量(一般选用不为 null 的列)

  • max(列名):最大值

  • min(列名):最小值

  • sum(列名):求和

  • avg(列名):平均值

2、聚合函数语法

-- 标准语法
SELECT 函数名(列名) FROM 表名 【WHERE 条件】;

-- 计算product表中总记录条数
SELECT COUNT(*) FROM product;

-- 获取最高价格
SELECT MAX(price) FROM product;
-- 获取最高价格的商品名称
SELECT NAME,price FROM product WHERE price = (SELECT MAX(price) FROM product);

-- 获取最低库存
SELECT MIN(stock) FROM product;
-- 获取最低库存的商品名称
SELECT NAME,stock FROM product WHERE stock = (SELECT MIN(stock) FROM product);

-- 获取总库存数量
SELECT SUM(stock) FROM product;
-- 获取品牌为苹果的总库存数量
SELECT SUM(stock) FROM product WHERE brand=\'苹果\';

-- 获取品牌为小米的平均商品价格
SELECT AVG(price) FROM product WHERE brand=\'小米\';

3、注意事项

  • 以上五个聚合函数都忽略 null 值,出了 count(*)

  • sum 和 avg 一般用于处理数值型,max、min、count 可以处理任何数据类型

  • 都可以搭配 distinct 使用,用于统计去重后的结果

  • count()的参数可以为字段、、常量值(一般为 1 ),建议使用 count(*)

5.6、分组查询

1、分组查询语法

-- 标准语法
SELECT 列名 FROM 表名 [WHERE 条件] GROUP BY 分组列名 [HAVING 分组后条件过滤] [ORDER BY 排序列名 排序方式];

-- 按照品牌分组,获取每组商品的总金额
SELECT brand,SUM(price) FROM product GROUP BY brand;

-- 对金额大于4000元的商品,按照品牌分组,获取每组商品的总金额
SELECT brand,SUM(price) FROM product WHERE price > 4000 GROUP BY brand;

-- 对金额大于4000元的商品,按照品牌分组,获取每组商品的总金额,只显示总金额大于7000元的
SELECT brand,SUM(price) AS getSum FROM product WHERE price > 4000 GROUP BY brand HAVING getSum > 7000;

-- 对金额大于4000元的商品,按照品牌分组,获取每组商品的总金额,只显示总金额大于7000元的、并按照总金额的降序排列
SELECT brand,SUM(price) AS getSum FROM product WHERE price > 4000 GROUP BY brand HAVING getSum > 7000 ORDER BY getSum DESC;

2、注意事项

  • 可以按多个字段分组,字段之间用逗号隔开

  • having 后可以支持别名

  • 可以支持排序

5.7、多表查询-笛卡尔积查询

1、笛卡尔积查询概述

  • 如果有同时查询两张或两张以上的表,则会将获取这两 / 多 张表的所有组合情况。

  • 要完成多表查询,需要消除这些无效数据的影响

2、笛卡尔积查询语法

  • 标准语法:SELECT 列名 FROM 表名1,表名2......;

5.8、多表查询-内连接

1、查询原理

  • 内连接查询的是两张表有交集那部分数据(有主外键关联的数据)

2、显示内连接

  • 标准语法:SELEECT 列名 FROM 表名1 【INNER】 JOIN 表名2 ON 条件;

3、隐式内连接

  • 标准语法:SELECT 列名 FROM 表名1,表名2 WHERE 条件;

5.9、多表查询-左外连接

1、查询原理

  • 查询左表的全部数据,和左右两张表有交集部分的数据。

2、查询语法

  • 标准语法:SELECT 列名 FROM 表名1 LEFT 【OUTER】 JOIN 表名2 ON 条件;

5.10、多表查询-右外连接

1、查询原理

  • 查询右表的全部数据,和左右两张表有交集部分的数据

2、查询语法

  • 标准语法:SELECT 列名 FROM 表名1 RIGHT 【OUTER】 JOIN 表名2 ON 条件;

5.11、多表查询-自连接

1、查询原理

  • 同一张表中有数据关联,可以多次查询这同一个表

2、查询语法

  • SELECT
    t1.name, -- 员工姓名
    t1.mgr, -- 上级编号
    t2.id, -- 员工编号
    t2.name     -- 员工姓名
    FROM
    employee t1  -- 员工表
    LEFT OUTER JOIN
    employee t2  -- 员工表
    ON
    t1.mgr = t2.id;

5.12、多表查询-全外连接

1、查询原理

  • 查询左右两张表中的所有数据,包括相交和不相交的部分。

2、查询语法

  • 标准语法:SELECT 列名 FROM 表名1 FULL OUTER JOIN 表名2 ON 条件;

  • 注意:mysql 不支持全外连接查询,orcal 才会支持。

5.13、多表查询-子查询

1、子查询定义

  • 子查询允许把一个查询嵌套在另一个查询当中。

  • 子查询,又叫内部查询,相对于内部查询,包含内部查询的就称为外部查询。

  • 子查询可以包含普通 select 可以包含的任何子句,如:distinct 、group by、order by 、limit、join 和 union等;但是对应的外部查询必须是以下语句之一:select、insert、update、delete、set、do

  • 子查询的位置:select 中、from 后、 where 后、having 后,放在 group by 和 order by 中无实际意义。

2、子查询分类

标量子查询

  • 返回单一值得标量,最简单形式。可以作为条件,使用运算符进行判断!

  • 基本演示

-- 标准语法
SELECT 列名 FROM 表名 WHERE 列名=(SELECT 聚合函数(列名) FROM 表名 [WHERE 条件]);

-- 查询年龄最高的用户姓名
SELECT MAX(age) FROM USER;              -- 查询出最高年龄
SELECT NAME,age FROM USER WHERE age=26; -- 根据查询出来的最高年龄,查询姓名和年龄
SELECT NAME,age FROM USER WHERE age = (SELECT MAX(age) FROM USER);

列子查询

  • 返回的结果集是 N 行一列,可以作为条件,使用运算符 in 或 not in 进行判断!

  • 基本演示

-- 标准语法
SELECT 列名 FROM 表名 WHERE 列名 [NOT] IN (SELECT 列名 FROM 表名 [WHERE 条件]);

-- 查询张三和李四的订单信息
SELECT id FROM USER WHERE NAME=\'张三\' OR NAME=\'李四\';   -- 查询张三和李四用户的id
SELECT number,uid FROM orderlist WHERE uid=1 OR uid=2; -- 根据id查询订单
SELECT number,uid IOS开发-OC学习-常用功能代码片段整理

java SpringRetry学习的代码片段

python 机器学习有用的代码片段

从mysql的片段中加载ListView

学习笔记:python3,代码片段(2017)

连接MySQL出现错误:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)(代码片段