mysql简单操作

1分组操作

用途:主要是用来做统计的
实现过程:把相同属性的事物放在一起,作为一组,使用的关键字为GROUP BY
例:统计每种分类下有多少商品

SELECT category_name,COUNT(*) FROM `product` GROUP BY category_name

如果需要添加过滤条件则使用关键词:HAVING
统计数量大于2的商品

SELECT category_name,COUNT(*) FROM `product` GROUP BY category_name HAVING COUNT(*)>2

如果需要排序则使用关键词:ORDER BY

SELECT category_name,COUNT(*) FROM `product` GROUP BY category_name HAVING COUNT(*)>2 ORDER BY COUNT(*)

2、排序

语法select * from 表名 order by 列1 asc|desc,列2 asc|desc,.......;,可以是一个排序条件,也可以是多个排序条件,多个排序条件是,按顺序在上一个基础上进行排序
例:

SELECT * FROM `product` ORDER BY price DESC,pid DESC

3、分页

对数据进行进行分页使用关键词limit
语法:limit 起始位置,长度

SELECT * FROM `product` ORDER BY price DESC,pid DESC limit 1,2

4查询

4.1 条件查询
select * from 表名 where 条件

SELECT * FROM `product` WHERE pid=1

4.2模糊查询
使用关键词like ,%任意字符任意多个;_一个字符

SELECT * FROM `product` WHERE pname LIKE '%想%';
SELECT * FROM `product` WHERE pname LIKE '_想%';

4.3范围查询
in 在一个非连续的范围内 between在一个连续的范围内

SELECT * FROM `product` WHERE pid in (1,3);
SELECT * FROM `product` WHERE pid BETWEEN 1 AND 3;

5、事务

事务是一个由一条或多条SQL组成的一个整体,事务中的操作要么全部成功,要么全部失败。


事务

使用事务是为了防止数据出现混乱,如转账,如果不使用事务会出现错误

UPDATE `product` SET price = price+500 WHERE pid=1;
d
UPDATE `product` SET price = price-500 WHERE pid=3;

事务操作
手动提交事务:
1开启事务 START TRANSACTION 或者 BEGIN
2提交事务 COMMIT;
3回滚 ROLLBACK;
自动提交:
默认自动提交
查看是否自动提交,进入到当前数据库执行

SHOW VARIABLES LIKE 'autocommit';

修改

SET @@autocommit=off;

5.1事务的四大特性 ACID

5.1.1原子性

每个事务都是一个整体,不可再拆分,事务中所有的 SQL 语句要么都执行成功, 要么都失败。

5.1.2一致性

事务在执行前数据库的状态与执行后数据库的状态保持一致。如:转账前2个人的 总金额是 2000,转账后 2 个人总金额也是 2000.

5.1.3隔离性

事务与事务之间不应该相互影响,执行时保持隔离的状态.

5.1.4持久性

一旦事务执行成功,对数据库的修改是持久的。就算关机,数据也是要保存下来的

6、数据库的并发

一个数据库可能拥有多个访问客户端,这些客户端都可以并发方式访问数据库. 数据库的相同数据可能
被多个事务同时访问,如果不采取隔离措施,就会导致各种问题, 破坏数据的完整性

6.1并发访问会产生的问题

事务在操作时的理想状态: 所有的事务之间保持隔离,互不影响。因为并发操作,多个用户同时访问
同一个 数据。可能引发并发访问的问题

6.1.1脏读

一个事务读取到了另一个事务中尚未提交的数据

6.1.2不可重复读

一个事务中两次读取的数据内容不一致, 要求的是在一个事务中多次读取时数据是一致的. 这是进行 update 操作时引发的问题

6.1.3幻读

一个事务中,某一次的 select 操作得到的结果所表征的数据状态, 无法支撑后续的业务操作. 查询得到的数据状态不准确,导致幻读

6.2数据库的隔离级别

隔离级别
6.2.1查看隔离级别

mysql80查看使用select @@transaction_isolation;
mysql8以前的查看使用select @@tx_isolation;

6.2.2修改隔离级别

设置事务隔离级别,需要退出 MySQL 再重新登录才能看到隔离级别的变化

set global transaction isolation level 级别名称; 
read uncommitted 读未提交 
read committed 读已提交 
repeatable read 可重复读 
serializable 串行化
set global transaction isolation level read uncommitted;

6.3演示

6.3.1脏读

1、设置隔离级别

set global transaction isolation level read uncommitted;

2、打开两个窗口选择数据库
use lianxi01
3、窗口A执行语句查询当前的数值

SELECT * FROM `product` WHERE pid =1;

窗口B执行开启事务语句

begin;

然后执行修改

UPDATE product SET price = price +5000;

4、窗口A在执行查询语句,发现数值已经改变

SELECT * FROM `product` WHERE pid =1;

5、窗口B执行回滚

ROLLBACK;

6、A在进行查询发现数值有变回去了。
7、问题场景
脏读非常危险的,比如张三向李四购买商品,张三开启事务,向李四账号转入 500 块,然后打电话给李四说钱 已经转了。李四一查询钱到账了,发货给张三。张三收到货后回滚事务,李四的再查看钱没了。

6.3.2不可重复读

1、打开两个 窗口A 和 窗口B,选择数据库后 开启事务
2、B 窗口开启事务后, 先进行一次数据查询
3、 在 A 窗口开启事务后进行数据更新
4、 B 窗口再次查询数据,发现两次查的数据不一致
5、问题场景
比如银行程序需要将查询结果分别输出到电脑屏幕和发短信给客 户,结果在一个事务中针对不同的输出目的地进行的两次查询不一致,导致文件和屏幕中的结果不一致,银行工作 人员就不知道以哪个为准了

6.3.3幻读

幻读: select 某记录是否存在,不存在,准备插入此记录,但执行 insert 时发现此记录已存在,无法插入,此时就发生了幻读。
1、打开 A B 窗口, 选择数据库 开启事务
2、A 窗口 先执行一次查询操作
3、B 窗口 插入一条数据 提交事务
4、 A 窗口执行 插入操作, 发现报错. 出现幻读

如果一个事务,使用了SERIALIZABLE——可串行化隔离级别时,在这个事务没有被提交之前 , 其他的线程,只能等到当前操作完成之后,才能进行操作,这样会非常耗时,而且,影响数据库的性能,数据库不会使用这种隔离级别。
serializable 串行化可以彻底解决幻读,但是 事务只能排队执行,严重影响效率,数据库不会使用这种隔离级别。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容