SQL常用语句与事务介绍

文章目录

基本语法

  1. SELECT :用于从数据库表中检索数据。
    语法:SELECT column1, column2, ... FROM table_name;
  2. INSERT INTO :用于向数据库表中插入新行。
    语法:INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);
  3. UPDATE :用于更新数据库表中的现有数据。
    语法:UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;
  4. DELETE :用于从数据库表中删除数据。
    语法:DELETE FROM table_name WHERE condition;
  5. WHERE :用于限定查询、更新或删除操作的条件。
    语法:SELECT column1, column2, ... FROM table_name WHERE condition;
  6. AND/OR :用于组合多个条件。
    语法:SELECT column1, column2, ... FROM table_name WHERE condition1 AND/OR condition2;
  7. ORDER BY :用于对查询结果进行排序。
    语法:SELECT column1, column2, ... FROM table_name ORDER BY column1, column2, ... ASC/DESC;
  8. GROUP BY :用于将查询结果集中的多行数据根据一个或多个列进行分组。
    语法:SELECT column_name, AGGREGATE_FUNCTION(column_name) FROM table_name WHERE condition GROUP BY column_name;
  9. HAVING :用于对分组后的结果进行条件筛选。
    语法:SELECT column_name, AGGREGATE_FUNCTION(column_name) FROM table_name WHERE condition GROUP BY column_name HAVING condition;

常见用法

  1. 查询表中所有的信息:SELECT * FROM <表名>
  2. 条件查询 :Select * from students where score >= 80
  3. 投影查询(返回指定的列):SELECT score分数, name姓名 FROM students
  4. 按score从低到高:SELECT id, name, gender, score FROM students ORDER BY score
  5. 按score从高到低 :SELECT id, name, gender, score FROM students ORDER BY score DESC
  6. 先按score排,相同后按gender排:SELECT id, name, gender, score FROM students ORDER BY score DESC, gender
  7. 分页查询(每页3条,从零开始):limit 3 offset 0 下一页即为 .........limit 3 offset 3 以此类推
  8. 聚合查询(得到行数,并命名为num):SELECT COUNT(*) num FROM students
  9. 按 class_id分组查询得到的结果:SELECT class_id, COUNT(*) num FROM students GROUP BY class_id
  10. 多表查询 SELECT s.id sid,s.name,s.gender,c.id cid, c.name cname FROM students s, classes c
  11. 连接查询(内连接):SELECT s.id, s.class_id, c.name , s.score FROM students s INNER JOIN classes c ON s.class_id = c.id
  12. 连接查询(外连接): 百度去....

实用语句

  • 插入或替换(有则替换,无则插入)

    REPLACE INTO students (id, class_id, name, gender, score) VALUES (1, 1, '小明', 'F', 99)

  • 插入或忽略(有则不插,无则插入)

    INSERT IGNORE INTO students (id, class_id, name, gender, score) VALUES(1, 1, '小明', 'F', 99)

  • 插入或更新(有则更新,无则插入)

    NSERT INTO students (id, class_id, name, gender, score) VALUES(1, 1, '小明', 'F', 99) ON DUPLICATE KEY UPDATE name='小明', gender='F', score=99;

  • 快照--复制表的一些数据到另一份表

    CREATE TABLE students_of_class1 SELECT * FROM students WHERE class_id=1


事务

  • 事务是数据库管理系统中的一个重要概念,它是一个操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务具有以下四个特性,通常被称为ACID特性:
  1. 原子性:事务是一个不可分割的工作单位,事务中的所有操作要么全部执行成功,要么全部失败回滚,不会处于中间状态。
  2. 一致性:事务必须使数据库从一个一致性状态转移到另一个一致性状态。事务执行的结果必须是数据库状态的合法状态,即数据不会因为事务的执行而遭到破坏。
  3. 隔离性:多个事务并发执行时,每个事务都感觉不到系统中有其他事务在执行,多个事务的执行互不干扰。不同的隔离级别可以解决不同的问题,如脏读、不可重复读和幻读等。
  4. 持久性:一个事务一旦提交,它对数据库中数据的改变就是永久性的。即使系统发生故障,这些改变也不会丢失。

Read Uncommitted是隔离级别最低 的一种事务级别。在这种隔离级别下,一个事务会读到另一个事务更新后但未提交的数据,如果另一个事务回滚,那么当前事务读到的数据就是脏数据,这就是脏读(Dirty Read)

Read Committed隔离级别下,一个事务可能会遇到不可重复读的问题。
不可重复读是指:在一个事务内,多次读同一数据,在这个事务还没有结束时,如果另一个事务恰好修改了这个数据,那么,在第一个事务中,两次读取的数据就可能不一致

Repeatable Read(默认)隔离级别下,一个事务可能会遇到幻读的问题。
幻读是指:在一个事务中,第一次查询某条记录,发现没有,但是,当试图更新这条不存在的记录时,竟然能成功,并且,再次读取同一条记录,它就神奇地出现了。

Serializable是最严格的隔离级别。在Serializable隔离级别下,所有事务按照次序依次执行,因此,脏读、不可重复读、幻读都不会出现。

相关推荐
齐 飞15 分钟前
MongoDB笔记01-概念与安装
前端·数据库·笔记·后端·mongodb
云空16 分钟前
《Python 与 SQLite:强大的数据库组合》
数据库·python·sqlite
暮毅20 分钟前
10.Node.js连接MongoDb
数据库·mongodb·node.js
wowocpp23 分钟前
ubuntu 22.04 server 格式化 磁盘 为 ext4 并 自动挂载 LTS
服务器·数据库·ubuntu
成富1 小时前
文本转SQL(Text-to-SQL),场景介绍与 Spring AI 实现
数据库·人工智能·sql·spring·oracle
songqq271 小时前
SQL题:使用hive查询各类型专利top 10申请人,以及对应的专利申请数
数据库·sql
计算机学长felix1 小时前
基于SpringBoot的“校园交友网站”的设计与实现(源码+数据库+文档+PPT)
数据库·spring boot·毕业设计·交友
小码的头发丝、2 小时前
Django中ListView 和 DetailView类的区别
数据库·python·django
小兜全糖(xdqt)2 小时前
mysql数据同步到sql server
mysql·adb
Karoku0662 小时前
【企业级分布式系统】Zabbix监控系统与部署安装
运维·服务器·数据库·redis·mysql·zabbix