mysql事务、视图

like:用来模糊查询

#查询姓'王'的学生信息 like%:代表一个或多个任意字符(通配符)

select * from 表名 where 字段  like '王%'

#_:只匹配一个通配符(字符)

select * from 表名 where 字段 like'小_';

#%5%:只要包含5关键字符即可

select *from 表名 where 字段 like '%5%';

注意:%在后,就是以这个属性结尾。%在前,就是以这个属性开头,两个%就是包含这个属性

|------mysql 没有检查约束

create database mydata3;

 

use mydata3;

 

create table bank

(

    username varchar(20),

    bmoney float

)

--添加约束  作用:模拟一些故障(机器或人为)

alter table bank add constraint ck_bank_bmoney check(bmoney>=1);

 

insert into bank values('张三',1000);

 

insert into bank values('李四',1);

 

select * from bank;

 

--转账:把张三转到李四账户,转块

update bank set bmoney=bmoney-1000 where username='张三';

update bank set bmoney=bmoney+1000 where username='李四';

转账问题,常见的一种事务问题如何解决?

它需要两条update语句来完成,这两条语句是一个整体

如果其中任意一条出现错误,则整个转账业务也取消,这两个账户中的余额恢复到原来的数据,从而确保转账前与转账后的余额不变。

解决方式:用sqlserver的方式

--解决方式

/*

     declare:定义变量

     @@ERROR:跟踪sql语句如果sql语句有异常(问题),@@error自动计数

*/

declare

     @sumError int

begin

     begin transaction;--开启事务

     --赋值

     set @sumError=0;

     update bank set bmoney=bmoney-1000 where username='张三';

     set @sumError=@sumError+@@ERROR;

     update bank set bmoney=bmoney+1000 where username='李四';

     set @sumError=@sumError+@@ERROR;

     if(@sumError<>0)

     begin

         print 'sql语句执行有误!回滚中.....';

         rollback transaction;--事务回滚(后悔药)

     end

     else

     begin

         print '执行无误,事务提交中...........';

         commit transaction;--提交事务

     end

end;

|-----在mysql中事务是自动提交的

 

SET autocommit=0;

UPDATE info SET NAME='小明' WHERE id=3;

UPDATE info SET NAME='大明' WHERE id=4;

COMMIT;

DELETE FROM info WHERE id=8;

ROLLBACK;

SET autocommit=1;

|-----视图是一张虚拟数据表

#创建视图

create view 视图名称

as

  查询语句

#查看视图

select * from 视图名称;

#对视图进行修改,添加,删除

update 视图名称 set 字段=指定条件

delete from 视图名称

|-----多表的情况,能否用视图进行封装?

DELIMITER $$

 

USE `mydata`$$

 

DROP VIEW IF EXISTS `vw_subject_01`$$

 

CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `vw_subject_01` AS

SELECT

  `a`.`sid`         AS `sid`,

  `a`.`sexam`       AS `sexam`,

  `a`.`sdate`       AS `sdate`,

  `b`.`SubjectName` AS `subjectname`

FROM (`score` `a`

   JOIN `subject` `b`)

WHERE (`a`.`subjectno` = `b`.`SubjectNo`)$$

 

DELIMITER ;

注意:

|-----索引可以相对提高查询的性能,但不是绝对的!

----索引注意事项

查询时减少使用*返回全部列,不要返回不需要的列

索引应该尽量小,在字节数小的列上建立索引

WHERE子句中有多个条件表达式时,包含索引列的表达式应置于其他条件表达式之前

避免在ORDER BY子句中使用表达式

-------数据库的三范式:

1:保证每列的原子性   每列尽量不要再分割!

 

2:每张表只描述一件事情

 

3:如果一个关系满足2NF,并且除了主键以外的其他列都不传递依赖于主键列,则满足第三范式(3NF)

3.1:后面的主键列,指的不是当前数据表中的主键!

3.2:指的是其它数据表中的主键列

多表的情况,尽量不要设置主外键(不是说不设主键,主键要设,不设外键!!!)







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

brid_fly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值