微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MySQL自用

1.MysqL概述

  1. 数据库启动
    MysqL -u root -p 密码
  2. 关系型数据库
    概念:建立在关系模型基础上,由多张相互连接的二维表组成的数据库

2.sql

全称 Structured Query Language,结构化查询语言。操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准 。

2.1 sql通用语法

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

2.2 sql分类

  • DDL Data DeFinition Language 数据定义语言,用来定义数据库对象(数据库,表,字段)
  • DML Data Manipulation Language 数据操作语言,用来对数据库表中的数据进行增删改
  • DQL Data Query Language 数据查询语言,用来查询数据库中表的记录
  • DCL Data Control Language 数据控制语言,用来创建数据库用户、控制数据库的访问权限

2.3 DDL

Data DeFinition Language,数据定义语言,用来定义数据库对象(数据库,表,字段)

2.3.1 数据库操作

  1. 查询所有数据库
    show databases;
  2. 查询当前数据库
    select database();
  3. 创建数据库
    create database [if not exists] 数据库名 [default charst 字符集] ;
  4. 删除数据库
    drop database [if exists] 数据库名;
  5. 切换数据库
    use 数据库名 ;

2.3.2 表操作

2.3.2.1 表操作-查询创建

  1. 查询当前数据库所有表
    show tables;
  2. 查看指定表结构
    desc 表名 ;
    3.查询指定表的建表语句
    show create table 表名 ;
    4.创建表结构
    CREATE TABLE 表名(
    字段1 字段1类型 [ COMMENT 字段1注释 ],

    字段n 字段n类型 [COMMENT 字段n注释 ]
    ) [ COMMENT 表注释 ] ;

2.3.2.2 表操作-数据类型

  1. 数值类型

    在这里插入图片描述

  2. 字符串类型

    在这里插入图片描述

  3. 日期时间类型

    在这里插入图片描述

2.3.2.4 表操作-修改

  1. 添加字段
    ALTER TABLE 表名 ADD 字段名 类型 (长度) [ COMMENT 注释 ] [ 约束 ];
  2. 修改数据类型
    ALTER TABLE 表名 MODIFY 字段名 新数据类型 (长度);
  3. 修改字段名和字段类型
    ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型 (长度) [COMMENT 注释 ] [ 约束 ];
  4. 删除字段
    ALTER TABLE 表名 DROP 字段名;
  5. 修改表名
    ALTER TABLE 表名 RENAME TO 新表名;

2.3.2.5 表操作-删除

  1. 删除
    DROP TABLE [ IF EXISTS ] 表名;
  2. 删除指定表,并重新创建表
    TruncATE TABLE 表名;

2.4 DML

DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增、删、改操作。
- 添加数据(INSERT)
- 修改数据(UPDATE)
- 删除数据(DELETE)

2.4.1 添加数据

  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, …) ;

2.4.2 修改数据

UPDATE 表名 SET 字段名1 = 值1 , 字段名2 = 值2 , … [ WHERE 条件 ] ;

2.4.3 删除数据

DELETE FROM 表名 [ WHERE 条件 ] ;

2.5 DQL

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

2.5.1 基本语法

SELECT
		字段列表
FROM
		表名列表
WHERE
		条件列表
GROUP BY
		分组字段列表
HAVING
		分组后条件列表
ORDER BY
		排序字段列表
LIMIT
		分页参数

2.5.2 基础查询

  1. 查询多个字段
    SELECT * FROM 表名;
  2. 字段设置别名
    SELECT 字段1 [ AS 别名1 ] , 字段2 [ AS 别名2 ] … FROM 表名;
  3. 去除重复记录
    SELECT disTINCT 字段列表 FROM 表名;

2.5.3 条件查询

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

在这里插入图片描述


在这里插入图片描述

2.5.4 聚合函数

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

在这里插入图片描述

2.5.5 分组查询

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

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

2.5.6 排序查询

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

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

2.5.7 分页查询

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

  • 起始索引从0开始,起始索引 = (查询页码 - 1)* 每页显示记录数。
  • 如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 10。

2.6 DCL

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

2.6.1 管理用户

  1. 查询用户
    select * from MysqL.user;
  2. 创建用户
    CREATE USER ‘用户名’@‘主机名’ IDENTIFIED BY ‘密码’;
  3. 修改用户密码
    ALTER USER ‘用户名’@‘主机名’ IDENTIFIED WITH MysqL_native_password BY ‘新密码’ ;
  4. 删除用户
    DROP USER ‘用户名’@‘主机名’ ;

2.6.2 权限控制

  1. 查询权限
    SHOW GRANTS FOR ‘用户名’@‘主机名’ ;
  2. 授予权限
    GRANT 权限列表 ON 数据库名.表名 TO ‘用户名’@‘主机名’;
  3. 撤销权限
    REVOKE 权限列表 ON 数据库名.表名 FROM ‘用户名’@‘主机名’;

3.函数

3.1 字符串函数

在这里插入图片描述

3.2 数值函数

在这里插入图片描述

3.3 日期函数

在这里插入图片描述

3.4 流程函数

在这里插入图片描述

4.约束

  • 概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。
  • 目的:保证数据库中数据的正确、有效性和完整性。
  • 分类

    在这里插入图片描述

  • 外键 :用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性。

4.1 语法

  1. 添加外键
    • CREATE TABLE 表名(
      字段名 数据类型,

      [CONSTRAINT] [外键名称] FOREIGN KEY (外键字段名) REFERENCES 主表 (主表列名)
      );

    • ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名)
      REFERENCES 主表 (主表列名) ;

  2. 删除外键
    ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

4.2 删除/更新行为

添加了外键之后,再删除父表数据时产生的约束行为,我们就称为删除/更新行为。具体的删除/更新行为有以下几种:

在这里插入图片描述


具体语法为:
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段) REFERENCES 主表名 (主表字段名) ON UPDATE CASCADE ON DELETE CASCADE;

5.多表查询

5.1 多表关系

各个表之间的联系:
* 一对多(多对一)
* 多对多
* 一对一

5.1.1 一对多

  • 案例: 部门 与 员工的关系
  • 关系: 一个部门对应多个员工,一个员工对应一个部门
  • 实现: 在多的一方建立外键,指向一的一方的主键

5.1.2 多对多

  • 案例: 学生 与 课程的关系
  • 关系: 一个学生可以选修多门课程,一门课程也可以供多个学生选择
  • 实现: 建立第三张中间表,中间表至少包含两个外键,分别关联两方主键

5.1.3 一对一

  • 案例: 用户用户详情的关系
  • 关系: 一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他详情字段放在另一张表中,以提升操作效率
  • 实现: 在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE)

5.2 多表查询概述

分类
1. 连接查询
* 内连接:相当于查询A、B交集部分数据
* 外连接:
* 左外连接:查询左表所有数据,以及两张表交集部分数据
* 右外连接:查询右表所有数据,以及两张表交集部分数据
* 自连接:当前表与自身的连接查询,自连接必须使用表别名
2. 子查询

5.3 内连接

内连接查询的是两张表交集部分的数据。

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

5.4 外连接

  1. 左外连接
    左外连接相当于查询表1(左表)的所有数据,当然也包含表1和表2交集部分的数据。
    SELECT 字段列表 FROM 表1 LEFT [ OUTER ] JOIN 表2 ON 条件 … ;
  2. 右外连接
    右外连接相当于查询表2(右表)的所有数据,当然也包含表1和表2交集部分的数据。
    SELECT 字段列表 FROM 表1 RIGHT [ OUTER ] JOIN 表2 ON 条件 … ;

5.5 自连接

5.5.1 自连接查询

自己连接自己,也就是把一张表连接查询多次。
SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件 … ;

5.5.2 联合查询

对于union查询,就是把多次查询的结果合并起来,形成一个新的查询结果集。

** SELECT 字段列表 FROM 表A …
UNION [ ALL ]
SELECT 字段列表 FROM 表B …;**

  • 对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致。
  • union all 会将全部的数据直接合并在一起,union 会对合并之后的数据去重。

5.6 子查询

  1. 概念
    sql语句中嵌套SELECT语句,称为嵌套查询,又称子查询
    查询外部的语句可以是INSERT / UPDATE / DELETE / SELECT 的任何一个
  2. 分类
    根据子查询结果不同,分为:
    A. 标量子查询(子查询结果为单个值)
    B. 列子查询(子查询结果为一列)
    C. 行子查询(子查询结果为一行)
    D. 表子查询(子查询结果为多行多列)

根据子查询位置,分为:
A. WHERE之后
B. FROM之后
C. SELECT之后

5.6.1 标量子查询

查询返回的结果是单个值(数字、字符串、日期等),最简单的形式,这种子查询称为标量子查询
常用的操作符:= <> > >= < <=

5.6.2 列子查询

查询返回的结果是一列(可以是多行),这种子查询称为列子查询

在这里插入图片描述

5.6.3 行子查询

查询返回的结果是一行(可以是多列),这种子查询称为行子查询
常用的操作符:= 、<> 、IN 、NOT IN

5.6.4 表子查询

查询返回的结果是多行多列,这种子查询称为表子查询
常用的操作符:IN

6.事务

6.1 事务简介

事务 是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。

6.2 事务操作

6.2.1 控制事务1

  1. 查看/设置事务提交方式
    SELECT @@autocommit ;
    SET @@autocommit = 0 ;
  2. 提交事务
    COMMIT;
  3. 回滚事务
    ROLLBACK;

注意:上述的这种方式,我们是修改了事务的自动提交行为, 把认的自动提交修改为了手动提交, 此时我们执行的DML语句都不会提交, 需要手动的执行commit进行提交。

6.2.2 控制事务2

  1. 开启事务
    START TRANSACTION 或 BEGIN ;
  2. 提交事务
    COMMIT;
  3. 回滚事务
    ROLLBACK;

6.3 事务四大特征

  • 原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
  • 一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。
  • 隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
  • 持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。

6.4 并发事务问题

  1. 赃读:一个事务读到另外一个事务还没有提交的数据。

  2. 不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读。

  3. 幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了 “幻影”。

6.5 事务隔离级别

在这里插入图片描述

  1. 查看事务隔离级别
    SELECT @@TRANSACTION_ISOLATION;
  2. 设置事务隔离级别
    SET [ SESSION | GLOBAL ] TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE }

注意:事务隔离级别越高,数据越安全,但是性能越低。

原文地址:https://www.jb51.cc/wenti/3279959.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐