当前位置: 首页 > news >正文

mysql的基础操作语句

SQL分类

  1. DDL 数据定义语言
  2. DML 数据操作语言
  3. DQL 数据查询语言
  4. DCL 数据控制语言

DDL 数据库操作

  1. 查询

    1. 1. 查询所有数据库 SHOW DATABASE;
      2. 查询当前数据库 SELECT DATABASE();
      3. 创建 CREATE DABABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];
      4. 删除 DROP DATABASE [IF EXISTS] 数据库名;
      5. 使用 USE 数据库名;
      
  2. 表操作 查询

    1. 1. 查询当前数据库所有表 SHOW TABLES;
      2. 查询表结构 DESC 表名;
      3. 查询指定表的建表语句 SHOW CREATE TABLE 表名;
      
  3. 表操作 创建

    	CREATE TABLE 表名(
    		字段1 字段1类型 [COMMENT 字段1注释],
    		.......
    		字段n 字段n类型 [COMMENT 字段n注释]
    	) [COMMENT 表注释];
    	-- 最后一个字段后没有逗号
    
  4. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I5BXqTSX-1662118242239)(C:\Users\fanvil\AppData\Roaming\Typora\typora-user-images\1661949715898.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BUByDNkn-1662118242240)(C:\Users\fanvil\AppData\Roaming\Typora\typora-user-images\1661949756632.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8DbJacXx-1662118242241)(C:\Users\fanvil\AppData\Roaming\Typora\typora-user-images\1661949805528.png)]

  5. 表操作 修改

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

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

DML

  1. 1. 添加数据
       1. 给指定字段添加数据 INSERT INTO 表名(字段名1, 字段名2,...) VALUES(值1, 值2,...);
       2. 给全部字段添加数据 INSERT INTO 表名 VALUES(值1, 值2,...);
       3. 批量添加数据
          1. INSERT INTO 表名 (字段名1, 字段名2,...) VALUES(值1, 值2,...), (值1, 值2,...), (值1, 值2,...);
          2. INSERT INTO 表名 VALUES(值1, 值2,...), (值1, 值2,...), (值1, 值2,...);
       4. **字符串和日期类型数据应包含在引号中**
    
    2. 修改数据
       	UPDATE 表名 SET 字段名1=值1, 字段名2=值2,...[WHERE 	条件];
    
    3. 删除数据
       1. DELETE FROM 表名 [WHERE 条件]
       2. **不能删除某一个字段的值,可以使用UPDATE**
    

2022.9.1

黑马mysql

DQL

SELECT
	字段列表
FROM
	表名列名
WHERE
	条件类表
GROUP BY
	分组字段列表
HAVING
	分组后条件列表
ORDER BY
	排序字段列表
LIMIT
	分页参数
  1. 基本查询

    1. 查询多个字段

      1. 1. SELECT 字段1, 字段2,...FROM 表名;
        2. SELECT * FROM 表名;
        3. 设置别名 SELECT 字段1 [AS 别名], 字段2[AS 别名2] ... FROM 表名;
        4. 去除重复记录 SELECT DISTINCT 字段列表 FROM 表名;
        
  2. 条件查询

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

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F6kQeuHy-1662118242241)(C:\Users\fanvil\AppData\Roaming\Typora\typora-user-images\1661997897878.png)]

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U3HHTSu1-1662118242241)(C:\Users\fanvil\AppData\Roaming\Typora\typora-user-images\1661997924226.png)]

  3. 聚合函数

    1. 将一列作为一个整体,进行纵向计算

    2. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nFcKh0hd-1662118242242)(C:\Users\fanvil\AppData\Roaming\Typora\typora-user-images\1661998468873.png)]

    3. SELECT 聚合函数(字段列表) FROM 表名;
      -- NULL值不参与聚合运算 
      
  4. 分组查询

    1. SELECT 字段列名 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后过滤条件]
      
      根据性别分组,统计男性员工 和 女性员工的数量
         SELECT 性别字段名, COUNT(*) FROM 表名 GROUP BY 性别字段名;
      
         查询年龄小于45的员工,并根据工作地址分组,获取员工数量大于等于3的工作地址
      SELECT 工作地址字段名, COUNT(*) FROM 表名 WHERE 年龄字段名<45 GROUP BY 工作地址字段名 HAVING COUNT( *) >= 3;
      
      

    /*
    WHERE与HAVING区别
    1.执行时机不同:WHERE是分组之间进行过滤,不满足WHERE条件,不参与分组;而HAVING是分组之后对结果进行过滤
    2.判断条件不同:WHERE不能对聚合函数进行判断,而HAVING可以
    *
    /*
    执行顺序:WHERE > 聚合函数 > HAVING
    分组后之后,查询字段一般为聚合函数和分组字段,查询其他字段无意义
    */

    
    
  5. 分组查询

    1. 1. SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1, 字段2 排序方式2;
      
      2. 排序方式
         1. ASC 升序(默认)
         2. DESC 降序
         
      -- 若为多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序
      
  6. 分页查询

    SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数;
    
    /*
    1.起始索引从0开始,起始索引 = (查询页码-1) *  每页显示记录数
    2.分页查询是数据方言,不同数据库有不同的实现,MySQL中是LIMIT
    3.如果查询的是第一页数据,起始索引可以省略,直接简写为LIMIT 10
    */
    
  7. 执行顺序

    SELECT			4
    	字段列表
    FROM			1
    	表名列表
    WHERE			2
    	条件类表
    GROUP BY		3-1
    	分组字段列表
    HAVING			3-2
    	分组后条件列表
    ORDER BY		5
    	排序字段列表
    LIMIT			6
    	分页参数
    
  8. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kN7tgpvV-1662118242242)(C:\Users\fanvil\AppData\Roaming\Typora\typora-user-images\1662004481608.png)]

DCL

  1. 管理用户

    1. 1. 查询用户
            USE mysql;
            SELECT * FROM user;
      2. 创建用户 CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
      3. 修改用户密码 ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码'
      4. 删除用户 DROP USER '用户名'@'主机名';
        -- 主机名可以使用%通配
      
  2. 权限控制

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d0Tncljp-1662118242242)(C:\Users\fanvil\AppData\Roaming\Typora\typora-user-images\1662005446061.png)]

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

函数

  1. 字符串函数

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qiaiwn2S-1662118242243)(C:\Users\fanvil\AppData\Roaming\Typora\typora-user-images\1662010756906.png)]

  2. 数值函数

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TayYK4Qg-1662118242243)(C:\Users\fanvil\AppData\Roaming\Typora\typora-user-images\1662010980440.png)]

  3. 日期函数

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4r3SdDsk-1662118242243)(C:\Users\fanvil\AppData\Roaming\Typora\typora-user-images\1662011108736.png)]

  4. 流程函数

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7PQLKGbs-1662118242244)(C:\Users\fanvil\AppData\Roaming\Typora\typora-user-images\1662011267481.png)]

约束

  1. 用户显示存储数据

  2. 保证数据库中数据的正确性、有效性和完整性

  3. 分类

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ztjNIDR0-1662118242244)(C:\Users\fanvil\AppData\Roaming\Typora\typora-user-images\1662011632449.png)]

    主键约束自增:AUTO_INCREMENT

  4. 可在创建表/修改表时添加约束

  5. 外键约束

    1. 1. 添加外键
         1. CREATE TABLE 表名(
            	字段名 数据类型,
      		...
            [CONSTRAINT] [外键名称] FOREING KEY(外键字段名) REFERENCES 主表 (主表列名));
         2. ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表 (主表列名);
      
      2. 删除外键 ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
      
  6. 外键删除、更新行为

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O3WN45ca-1662118242244)(C:\Users\fanvil\AppData\Roaming\Typora\typora-user-images\1662012566037.png)]

    -- 在更新的时候级联,在删除的时候级联
    ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段) REFERENCES 主表名(主表字段名) ON UPDATE CASCADE ON DELETE CASCADE
    

多表查询

  1. 多表关系

    1. 一对多或多对一

      实现:在多的一方建立外键,指向一的一方的主键

    2. 多对多

      实现:建立中间表,中间表至少包含两个外键,分别关联两方主键

    3. 一对一

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

    1. 连接查询

      1. 1. 内连接
           1. 隐式连接 SELECT 字段列表 FROM 表1, 表2 WHERE 连接条件 ...;
           2. 显示连接 SELECT 字段列表 表1 [INNER] JOIN 表2 ON 连接条件... WHERE 查询条件...;
           -- 内连接查询的是两张表的交集部分
        
        2. 外连接
           1. 左外连接 SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件...;
           -- 相当于查询表1(左表)的所有数据包含表1和表2交集部分的数据
           2. 右外连接 SELECT 字段列表 FROM 表1 RIGNT [OUTER] JOIN 表2 ON 条件...;
            -- 相当于查询表2(右表)的所有数据包含表1和表2交集部分的数据
        
        3. 自连接 SELECT 字段列表 FROM 表名 别名A JOIN 表名 别名B ON 条件...;
           -- 自连接查询,可以是内连接查询,也可以是外连接查询
        
    2. 联合查询

      1. 1. UNION, UNION ALL
        
        2. 对于UNION查询,就是把多次查询的结果合并起来,形成一个新的查询结果集
        
        3. SELECT 字段列表 FROM 表A...
           UNION [ALL]
           SELECT 字段列表 FROM 表B...; 
        
        -- 对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致
        -- UNION ALL 会将全部的数据直接合并在一起,UNION会对合并之后的数据去重
        
    3. 子查询

      1. SQL语句找那个嵌套SELECT语句,称为嵌套查询,又称子查询

        SELECT * FROM T1 WHERE column1 = (SELECT column1 FROM t2)
        
        -- 子查询外部的语句可以是INSERT/UPDATE/DELETE/SELECT的任何一个
        
      2. 根据子查询的结果,分为

        1. 标量子查询:子查询的结果为单个值

          常用操作符:= <> > >= < <=

        2. 列子查询:子查询结果为一列

          常用操作符:IN NOT IN ANY SOME ALL

          [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k9T4Fk9S-1662118242244)(C:\Users\fanvil\AppData\Roaming\Typora\typora-user-images\1662017258903.png)]

        3. 行子查询:子查询的结果为一行,可以为多列

          常用操作符: = <> IN NOT IN

        4. 表子查询:子查询结果为多行多列

          常用操作符:IN

      3. 根据子查询的位置,分为:WHERE之后、FROM之后、SELECT之后

事务

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

    1. 开启事务
    2. 抛异常,回滚事务
    3. 提交事务
  2. 默认MySQL的事务是自动提交的,也及时说,当执行一条DML语句,MySQL会理解隐式提交事务

  3. 事务操作

    1. 1. 查看/设置事务提交方式
         1. SELECT @@autocommit;
         2. SET @@autocmmit = 0; -- 手动提交
      2. 提交事务 COMMIT;
      3. 回滚事务 ROLLBACK;
      
  4. 事务四大特性

    1. 原子性:事务是不可分割的最小单元,要么全成功,要么全失败
    2. 一致性:事务完成时,必须使所有数据都保持一致状态
    3. 隔离性:数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立换进下运行
    4. 持久性:事务一旦提交或回滚,它对数据库中的数据的该表是永久的
  5. 并发事务问题

    1. 脏读:一个事务读到另外一个事务还没有提交的数据
    2. 不可重复度:一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读
    3. 幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现了这行数据已经存在,好像出现了“幻影”
  6. 事务隔离级别

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vJeBNQ6d-1662118242245)(C:\Users\fanvil\AppData\Roaming\Typora\typora-user-images\1662022478913.png)]

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

相关文章:

  • Cookie/Session
  • java抽象类和接口(Comparator和Conparable的使用)
  • 百度首个江苏智算中心落地 携手盐城共建200P算力规模
  • 并发编程(四)---设计模式
  • GitHub:建立仓库,本地上传与更新内容
  • Linux EXPORT_SYMBOL宏详解
  • 猿创征文丨赶紧进来!!!带你0距离全面接触 变量和常量
  • Unirech腾讯云代充-通过VNC 登录腾讯云国际版Windows云服务器实例教程
  • 深入剖析foreach底层原理以及并发修改异常
  • 神经网络在通信中的应用,神经网络技术及其应用
  • Redis的缓存穿透、缓存击穿、缓存雪崩
  • 卷积神经网络的算法过程,卷积神经网络算法实现
  • ARM64 linux -- 软中断
  • Vue项目初始化搭建JDK+Node.js+npm+vue-cli+创建Vue项目
  • chrome调试秘籍,让你的开发速度飞起来
  • ----------
  • JS 中的深拷贝与浅拷贝
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • HTML5新特性总结
  • JavaScript实现分页效果
  • JS实现简单的MVC模式开发小游戏
  • JWT究竟是什么呢?
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • magento 货币换算
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • pdf文件如何在线转换为jpg图片
  • Spring Cloud中负载均衡器概览
  • windows下使用nginx调试简介
  • 分类模型——Logistics Regression
  • 聊聊redis的数据结构的应用
  • 每天10道Java面试题,跟我走,offer有!
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 写代码的正确姿势
  • 学习Vue.js的五个小例子
  • 用element的upload组件实现多图片上传和压缩
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • ​【已解决】npm install​卡主不动的情况
  • ​低代码平台的核心价值与优势
  • #1014 : Trie树
  • #git 撤消对文件的更改
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (1)Android开发优化---------UI优化
  • (4)logging(日志模块)
  • (C++17) optional的使用
  • (Git) gitignore基础使用
  • (第27天)Oracle 数据泵转换分区表
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (三)模仿学习-Action数据的模仿
  • (图)IntelliTrace Tools 跟踪云端程序
  • (一) springboot详细介绍
  • .NET 4.0中使用内存映射文件实现进程通讯