文章目录
基本语法
- SELECT :用于从数据库表中检索数据。
语法:SELECT column1, column2, ... FROM table_name;
- INSERT INTO :用于向数据库表中插入新行。
语法:INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);
- UPDATE :用于更新数据库表中的现有数据。
语法:UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;
- DELETE :用于从数据库表中删除数据。
语法:DELETE FROM table_name WHERE condition;
- WHERE :用于限定查询、更新或删除操作的条件。
语法:SELECT column1, column2, ... FROM table_name WHERE condition;
- AND/OR :用于组合多个条件。
语法:SELECT column1, column2, ... FROM table_name WHERE condition1 AND/OR condition2;
- ORDER BY :用于对查询结果进行排序。
语法:SELECT column1, column2, ... FROM table_name ORDER BY column1, column2, ... ASC/DESC;
- GROUP BY :用于将查询结果集中的多行数据根据一个或多个列进行分组。
语法:SELECT column_name, AGGREGATE_FUNCTION(column_name) FROM table_name WHERE condition GROUP BY column_name;
- HAVING :用于对分组后的结果进行条件筛选。
语法:SELECT column_name, AGGREGATE_FUNCTION(column_name) FROM table_name WHERE condition GROUP BY column_name HAVING condition;
常见用法
- 查询表中所有的信息:SELECT * FROM <表名>
- 条件查询 :Select * from students where score >= 80
- 投影查询(返回指定的列):SELECT score
分数
, name姓名
FROM students - 按score从低到高:SELECT id, name, gender, score FROM students ORDER BY score
- 按score从高到低 :SELECT id, name, gender, score FROM students ORDER BY score DESC
- 先按score排,相同后按gender排:SELECT id, name, gender, score FROM students ORDER BY score DESC, gender
- 分页查询(每页3条,从零开始):limit 3 offset 0 下一页即为 .........limit 3 offset 3 以此类推
- 聚合查询(得到行数,并命名为num):SELECT COUNT(*) num FROM students
- 按 class_id分组查询得到的结果:SELECT class_id, COUNT(*) num FROM students GROUP BY class_id
- 多表查询 SELECT s.id sid,s.name,s.gender,c.id cid, c.name cname FROM students s, classes c
- 连接查询(内连接):SELECT s.id, s.class_id, c.name , s.score FROM students s INNER JOIN classes c ON s.class_id = c.id
- 连接查询(外连接): 百度去....
实用语句
-
插入或替换(有则替换,无则插入)
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特性:
- 原子性:事务是一个不可分割的工作单位,事务中的所有操作要么全部执行成功,要么全部失败回滚,不会处于中间状态。
- 一致性:事务必须使数据库从一个一致性状态转移到另一个一致性状态。事务执行的结果必须是数据库状态的合法状态,即数据不会因为事务的执行而遭到破坏。
- 隔离性:多个事务并发执行时,每个事务都感觉不到系统中有其他事务在执行,多个事务的执行互不干扰。不同的隔离级别可以解决不同的问题,如脏读、不可重复读和幻读等。
- 持久性:一个事务一旦提交,它对数据库中数据的改变就是永久性的。即使系统发生故障,这些改变也不会丢失。
• Read Uncommitted
是隔离级别最低 的一种事务级别。在这种隔离级别下,一个事务会读到另一个事务更新后但未提交的数据,如果另一个事务回滚,那么当前事务读到的数据就是脏数据,这就是脏读(Dirty Read)。
• Read Committed
隔离级别下,一个事务可能会遇到不可重复读的问题。
不可重复读是指:在一个事务内,多次读同一数据,在这个事务还没有结束时,如果另一个事务恰好修改了这个数据,那么,在第一个事务中,两次读取的数据就可能不一致。
• Repeatable Read
(默认)隔离级别下,一个事务可能会遇到幻读的问题。
幻读是指:在一个事务中,第一次查询某条记录,发现没有,但是,当试图更新这条不存在的记录时,竟然能成功,并且,再次读取同一条记录,它就神奇地出现了。
Serializable是
最严格的隔离级别。在Serializable隔离级别下,所有事务按照次序依次执行,因此,脏读、不可重复读、幻读都不会出现。