目录

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隔离级别下,所有事务按照次序依次执行,因此,脏读、不可重复读、幻读都不会出现。

本文是转载文章,点击查看原文
如有侵权,请联系 xyy@jishuzhan.net 删除
相关推荐
程序猿阿伟7 分钟前
《SQL赋能人工智能:解锁特征工程的隐秘力量》
数据库·人工智能·sql
冰箱里的金鱼40 分钟前
MYSQL 存储引擎 和 日志
数据库
Yan-英杰1 小时前
【百日精通JAVA | SQL篇 | 第三篇】 MYSQL增删改查
java·数据库·sql
信徒_1 小时前
Mysql 中的 binlog、redolog、undolog
数据库·mysql
极限实验室2 小时前
代理 Elasticsearch 服务:INFINI Gateway VS Nginx
数据库·搜索引擎
三月七(爱看动漫的程序员)2 小时前
LLM面试题六
数据库·人工智能·gpt·语言模型·自然语言处理·llama·milvus
追光天使3 小时前
Mac 上使用 mysql -u root -p 命令,出现“zsh: command not found: mysql“?
数据库·mysql·macos
高铭杰3 小时前
Citus源码(2)分布式读流程分析与基础概念梳理(shardid、placementid、groupid)
数据库·分布式·postgresql·citus
_GR4 小时前
rdiff-backup备份
数据库
小小鸭程序员4 小时前
Spring Boot项目连接MySQL数据库及CRUD操作示例
java·spring boot·python·mysql·spring