您现在的位置是:首页 >技术杂谈 >学习sql,你需要知道这些网站首页技术杂谈

学习sql,你需要知道这些

小怡同学. 2024-07-11 08:06:33
简介学习sql,你需要知道这些

数据库的分类

开发式数据库

MySql
Oracle
PostgreSql

非开发式数据库

MogoDB
Redis
DynamoDB
Elaticsearch

事务

什么是事务

事务就是由单独单元的一个或多个sql语句组成,在这个单元中,每个sql语句都是相互依赖的。而整个单独单元是作为一个不可分割的整体存在,类似于物理当中的原子(一种不可分割的最小单位)。

往通俗的讲就是,事务就是一个整体,里面的内容要么都执行成功,要么都不成功。不可能存在部分执行成功而部分执行不成功的情况。

事务的四种特性

  • 原子性:事务是一个不可分割的最小工作单位。所有操作要不全部成功要不全部失败。
  • 一致性:执行前后的状态要保持一致。
  • 隔离性:并发的状况下,事务直接是相互隔离的,一个事务的执行不能受其他事务的干扰。
  • 持久性:事务一旦提交后,数据库中的数据永久保存。接下来的操作或故障对其没有影响。

死锁

什么是死锁

多个进程运行时争夺资源造成的僵局

死锁的四个条件

  • 互斥:进程要求对所占用资源进行排他性控制。
  • 请求和保持:当进程因请求资源而阻塞时,对已获得的资源保持不放。
  • 不剥夺:进程获得的资源在未使用完之前,不能剥夺
  • 循环等待:在发生死锁时,必然形成一个进程-资源环型链

如何处理死锁

预防死锁

破坏死锁的四个条件任意

避免死锁

银行家算法

检测死锁

设置检测机构,发现后里面清除。

解除死锁

资源剥夺
进程回退
撤销进程

什么是navicat

是一套可以建立多个数据库连接的数据库管理工具,支持创建管理维护数据库。

SQL语句

对数据库的操作

  • 查询所有数据库

      show databases
    
  • 创建数据库

      create database 数据库名称
    
  • 删除数据库

      drop database 数据库名称
    

对表的操作

  • 查看表

      show tables
    
  • 创建表

      create table 表名
    
  • 删除表

      drop table 表名
    
  • 查看表结构

      desc表名
    
  • 修改表名

      alter table 表名 rename to 新表名
    
  • 修改数据类型

      alter table 表名 modify 列名 新数据类型
    
  • 修改列名和数据类型

      alter table 表名 change 列名 新列名 新数据类型
    
  • 删除列名

      alter table 表名 drop 列名
    
  • 添加一列

      alter table 表名 add 列名 数据类型
    

对表里数据进行增删改查

  • 增加数据

      insert into 表名(列名,列名)values(列表数据,列表数据)
    
  • 修改数据

      update 表名 set 列名=列名的值 where 条件
    
  • 删除某条数据

      delete from 表名 where 条件
    
  • 基础查询

      selete 字段 from 表名
    
  • 模糊查询

      select from 表名 where 'name' like='_'     #  _任意单个字符   %任意多个字符
    
  • 条件查询

      select from 表名 where 条件
    
  • 排序查询

      select 字段 表名 order by  asc/desc (升序/降序)
    
  • 聚合函数

      select 聚合函数 from 表名 where 
      # 平均数 avg              总和 sum       统计个数 count   最大数 max  最小值 min
    
  • 分组查询

      selete 字段 from 表名 group by 分组条件
    
  • 分页查询

      select * from 表名 limit 1,2(开始索引,查询条数)
    

数据库的内外连接

内连接

inner join on 返回两个表的交集

	select * from 表名 表别名 inner join 表名 表别名 on 表别名.列名=表别名.列名

左外连接

left join on 左表全显示,右表显示交集部分,不足地方显示null

	select *from a_table a left jion b_table b on a.name=b.name

右外连接

right join on
select *from a_table a right jion b_table b on a.name=b.name

表拼接

拼接两个表的数据

  • union 重复去重

      select class from table_a union select class from table_b
    
  • union all 不去重

      select class from table_a union all select class from table_b
    

where 和 having的区别

  • where用于过滤数据行,查询条件中不可以使用聚合函数,分组前过滤数据。
  • having用于过滤分组数据,查询可以使用聚合函数,分组后过滤数据。
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。