MySQL查询+事务

子查询

  • 子查询是在SQL语句中嵌套使用一套select语句
  • 它是先将内层的子查询语句执行完之后再执行外层的父查询语句
  • in和=:in是将子查询语句的结果整合到父查询语句中进行一一比较;=是在子查询语句只返回一个数据时可以进行比较
#删除年龄比肖梅大的学生信息
DELETE FROM student WHERE borndate<(SELECT borndate FROM student WHERE `name`='肖梅');
#查询s1的学生信息
SELECT * FROM student WHERE gradeid IN(SELECT gradeid FROM grade WHERE gradename='s1');
#查询s1和s2的学生信息
SELECT * FROM student WHERE gradeid IN(SELECT gradeid FROM grade WHERE gradename='s1' OR gradename='s2') 

模糊查询

  • 模糊查询是在不知道准确内容的情况下按照关键字进行查找:like
  • %:指任意长度
  • _:指单个字符
  • [ ]:在范围内
  • [^]:除此之外
#查询姓张的学生信息
SELECT * FROM student WHERE `name` LIKE'张%';
#查询海淀区的学生
SELECT * FROM student WHERE address LIKE '%海淀区%';
#查询除北京以外的学生
SELECT * FROM student WHERE address NOT LIKE '%北京%';
#查询手机号包含数组9的学生
SELECT * FROM student WHERE phone LIKE '%9%';

exists

  • exists在创表或删表时以防出现问题,而在子查询中,如果子查询语句有结果则执行前面的SQL语句,没有结果则不执行
SELECT * FROM student WHERE EXISTS(SELECT gradeid FROM grade WHERE gradename='s1' OR gradename='s2') 

事务

  • 是将多条SQL语句当成一个整体来看,它只能都执行或者都不执行
  • 使用事务之前得先关闭数据库的自动提交功能,否则它每执行一行SQL命令会自动提交
  • 关键字:
  1. begin/start transaction:开启事务
  2. commit:提交事务断你的SQL语句会不会有问题,它只能靠你手动执行,提交或者撤销
  • 事务的四大特性(ACID):
  1. 原子性:事务是一个整体,不可分割
  2. 一致性 :转账前后的两个账户总金额是保持恒定的
  3. 多个事务之间相互独立,互不干预
  4. 事务提交成功后结果会保存到数据库当中
  • 当事务没提交之前,它所执行的SQL命令会保存在一个缓冲区,只有提交之后才会在数据库中执行
#模拟银行转账的功能
CREATE TABLE bank(
`name` VARCHAR(20) PRIMARY KEY,
money DOUBLE NOT NULL
)
#添加测试数据
INSERT INTO bank VALUES('ww',1000),('wy',200);
UPDATE bank SET money=money-100 WHERE `name`='wy';
#转账
BEGIN;
UPDATE bank SET money=money-500 WHERE `name`='ww';
UPDATE bank SET mony=mony+200 WHERE `name`='wy';
#提交事务
COMMIT;
#撤销事务
ROLLBACK;
SHOW VARIABLES;
#关闭数据库的自动提交功能
SET autocommit=0;

SELECT * FROM bank;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值