初学MySQL整理的一些语句
一、创建
1.创建数据库
create database mydatabase;
2.创建表
create table db1(
id INT not null auto_increment,
grade INT not null ,
date DATE,
primary key (id) #主键设置
)ENGINE = InnoDB DEFAULT charset = utf8;
二、插入/修改
- 插入数据
INSERT into db2 values (3,'阿朱',11000);
- 插入字段
alter table db2 add age int not null ;
- 修改数据
指定字段插入数据用update
主键不可修改!
UPDATE db2 SET age =19 WHERE id=3;
UPDATE db1 SET class ='数学' WHERE id=6;
UPDATE db1
SET salary = salary - 100
WHERE id=6;
4 修改字段名称
alter table 表名称 change 字段原名称 字段新名称 字段类型 [是否允许非空
alter table db1 change name id_name varchar(9) not null ;
三、查询
1 查看表
select * from db1;
2 查看表结构
DESC db2;
3 查询 asc升序 desc降序
select * from db1 order by id desc;
4 集合内的查询
select * from db1 where id in (1,3,5);
5 日期范围查询(and/or--->不包含)
select * from db1 where date>'2018-10-01' and date<'2018-10-15';
6 日期范围查询(between--->包含)
select * from db1 where date between '2018-10-01' and date<'2018-10-15';
7 显示3-5条数
select * from db1 limit 2,5;
8 分组查询 聚合函数
select max(grade),id,sex,id_name,class from db1 group by id;
select min(date) from db1;
select avg(grade) as '求平均' from db1;
select count(id) from db1 where db1.class='语文'; #统计表中总数
9
(9-1)Union 选取同一数据库中不同表中的同字段数据(不重复)
select id_name from db1 union select id_name from db2 order by id_name;
(9-2)Union ALL(重复)
select id_name from db1 union all select id_name from db2 order by id_name;
10
(10-1) WITH ROLLUP 分组统计(可用SUM/AVG/COUNT...)
select id_name,SUM(grade) as grade_count FROM db1 GROUP BY id_name WITH ROLLUP ;
(10-2) coalesce来设置一个可以取代null的名称
select coalesce(class,'总数'),SUM(grade) as '狗子的总成绩' From db1 where id_name = '狗子' GROUP BY class with rollup ;
11 INNER JOIN连接两张表的数据
SELECT a.id,a.id_name,b.age FROM db1 a INNER JOIN db2 b ON a.id_name = b.id_name;
12 LEFT JOIN 读取左边(a)全部数据,右边可为NULL
RIGHT JOIN 同上(右边全读取)
SELECT a.id,a.id_name,b.age FROM db1 a LEFT JOIN db2 b ON a.id_name = b.id_name;
13 LIKE
可以在 WHERE 子句中使用LIKE,通常与%同用,可代替 = ,
SELECT * FROM db1 WHERE grade LIKE 80 OR id_name LIKE 'Iris';
14 NULL (= NULL 和 !=NULL不起作用,正确语句为IS NULL 和 IS NOT NULL)
select * from db2 where salary is null ;
select * from db2 where salary is not null ;
15 正则
^ 匹配字符串的开始位置
SELECT id_name FROM db1 WHERE id_name REGEXP '^I';
$ 匹配字符串的结束位置
SELECT id_name FROM db1 WHERE id_name REGEXP 's$';
SELECT id_name FROM db1 WHERE id_name REGEXP '.in';
[...] 字符集合。可以匹配所包含的任意一个字符。
SELECT id_name FROM db1 WHERE id_name REGEXP '[i然]';
16 多表查询
SELECT date,salary from db1,db2 WHERE db1.id_name = db2.id_name;
MySQL事务
一、事务的四个条件
一般来说,事务是必须满足4个条件(ACID):原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。
- 原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
- 一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
- 隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
- 持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
二、事务的控制语句
MySQL中,事务操作包括4个:
-
START TRANSACTION
:开始一个新的事务 -
COMMIT
:提交当前事务,做出永久改变 -
ROLLBACK
:回滚当前事务,放弃修改 -
SET autocommit = {0 | 1}
:对当前会话禁用(0)或启用(1)自动提交模式 -
SAVEPOINT aaa
:在事务中创建一个保存点 “aaa” -
RELEASE SAVEPOINT aaa
:删除事务保存点“aaa” -
SET TRASACTION
:设置事务的隔离级别
网友评论