手机扫码查看
2020Javaweb教程之mysql数据库事务以及视图
事务概述
一组要么同时执行成功,要么同时失败的SQL语句。是数据库操作的一个不能分割执行单元。
数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。
事务开始于
– 连接到数据库上,并执行一条DML语句insert、update或delete
– 前一个事务结束后,又输入了另一条DML语句
事务结束于
– 执行commit或rollback语句。
– 执行一条DDL语句,例如create table语句,在这种情况下,会自动执行commit语句。
– 执行一条DDL语句,例如grant语句,在这种情况下,会自动执行commit。
– 断开与数据库的连接
– 执行了一条DML语句,该语句却失败了,在这种情况中,会为这个无效的DML语句执行rollback语句。
事务四大特性ACID
– Atomicity(原子性)
表示一个事务内的所有操作是一个整体,要么全部成功,要么全部失败
– Consistency(一致性)
表示一个事务内有一个操作失败时,所有的更改过的数据都必须回滚到修改前状态
– Isolation(隔离性)
事务查看数据操作时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。
– Durability(持久性)
持久性事务完成之后,它对于系统的影响是永久性的。
开启事务
START TRANSACTION;
事务内数据操作语句
UPDATE account SET money=money-1000 WHERE id=1;
UPDATE account SET money=money+1000 WHERE id=2;
提交事务
COMMIT;
回滚
ROLLBACK;
时间处理
CURDATE():SELECT CURDATE()#获取当前日期
CURTIME():SELECT CURTIME()#获取当前时间
NOW():SELECT NOW()#当前日期和时间
WEEK(date):SELECT WEEK(NOW())#第几周,从1月开始计算
YEAR(date):SELECT YEAR(NOW())#获取年份
HOUR(time):SELECT HOUR(NOW())#获取小时
MINUTE(time):SELECT MINUTE(NOW())#获取分钟
DATEDIFF(date1,date2):SELECT DATEDIFF(NOW(),’2010-6-6′)#返回之间相隔的天数
ADDDATE(date,n):SELECT ADDDATE(NOW(),7)#日期加n天后的日期
字符串处理
concat():SELECT CONCAT(‘my’,’s’,’q’,’l’) #字符串连接
insert():SELECT INSERT(‘boss’,2,1,’i’) #字符串替换
lower(str):SELECT LOWER(‘APPLE’)#将字符串转小写
upper(str):SELECT UPPER(‘apple’) #将字符串转大写
substring(str,pos,num):SELECT SUBSTRING(‘appole’,1,4) #字符串截取
导出/导入数据库
导出数据库:
mysqldump -uroot -p demos >目标路径
导入数据库:
mysql -uroot -p
切换数据库,source 数据库文件地址
创建用户和授权
创建用户:
CREATE USER ‘用户名’ IDENTIFIED BY ‘密码’
授权:
GRANT ALL ON 库名 TO ‘用户名’
撤销授权:
REVOKE ALL ON 库名 FROM ‘用户名’
删除用户:
DROP USER ‘admin’
视图
什么是视图?
视图,虚拟表,从一个表或多个表中导出来的表,作用和真实表一样,包含一系列带有行和列的数据 视图中,用户可以使用SELECT语句查询数据,也可以使用INSERT,UPDATE,DELETE修改记录,视图可以使用户操作方便,并保障数据库系统安全。
视图的优点和缺点
优点
简单化,数据所见即所得
安全性,用户只能查询或修改他们所能见到得到的数据
逻辑独立性,可以屏蔽真实表结构变化带来的影响
缺点
性能相对较差,简单的查询也会变得稍显复杂
修改不方便,特变是复杂的聚合视图基本无法修改
创建视图:
CREATE VIEW 视图名 AS SELECT*FROM emp
使用视图:SELECT*FROM 视图名
注意:如果视图包含以下结构中的任何一种,则该视图不可更新:
聚合函数、DISTINCT、 GROUP BY、HAVING、UNION、 UNION ALL、FROM子句中的不可更新的多个表、WHERE子句中的子查询,引用FROM子句中的表
视图的修改
#如果存在执行replace
#如果不存在执行create
CREATE OR REPLACE VIEW demo
AS
SELECT*FROM emp
#纯修改
ALTER VIEW demo AS SELECT*FROM dept
#删除视图
DROP VIEW demo,test
- 本页地址 https://www.9713job.com/?p=2359
- 上一篇 <<2020Javaweb教程之MySQL约束和多表查询
- 下一篇 >>2020Javaweb教程之JDBC



发表回复