Mysql数据库中,事务是指什么?如何使用该功能?

Mysql数据库中,事务是指什么?如何使用该功能?,第1张

什么是事务? \x0d\x0a\x0d\x0a事务是逻辑上的一组 *** 作,组成这组 *** 作的各个单元,要不全都成功要不全都失败,这个特性就是事务 \x0d\x0a\x0d\x0a注意:mysql数据支持事务,但是要求必须是innoDB存储引擎 \x0d\x0a\x0d\x0a解决这个问题: \x0d\x0a\x0d\x0amysql的事务解决这个问题,因为mysql的事务特性,要求这组 *** 作,要不全都成功,要不全都失败,这样就避免了某个 *** 作成功某个 *** 作失败。利于数据的安全 \x0d\x0a\x0d\x0a如何使用: \x0d\x0a\x0d\x0a(1)在执行sql语句之前,我们要开启事务 start transaction\x0d\x0a\x0d\x0a(2)正常执行我们的sql语句 \x0d\x0a\x0d\x0a(3)当sql语句执行完毕,存在两种情况: \x0d\x0a\x0d\x0a1,全都成功,我们要将sql语句对数据库造成的影响提交到数据库中,committ \x0d\x0a\x0d\x0a2,某些sql语句失败,我们执行rollback(回滚),将对数据库 *** 作赶紧撤销 \x0d\x0a\x0d\x0a(注意:mysql数据支持事务,但是要求必须是innoDB存储引擎) \x0d\x0amysql>create table bank(name varchar(20),money decimal(5,1))engine=innodb defau \x0d\x0alt charset=utf8\x0d\x0a\x0d\x0amysql>inset into bank values('shaotuo',1000),('laohu',5000)\x0d\x0a\x0d\x0amysql>select*from bank\x0d\x0a+---------+--------+ \x0d\x0a| name | money | \x0d\x0a+---------+--------+ \x0d\x0a| shaotuo | 1000.0 | \x0d\x0a| laohu | 5000.0 | \x0d\x0a+---------+--------+ \x0d\x0a\x0d\x0a------没有成功“回滚”执行rollback \x0d\x0amysql>start transaction//开启事务 \x0d\x0aQuery OK, 0 rows affected (0.00 sec) \x0d\x0a\x0d\x0amysql>update bank set money=money+500 where name='shaotuo'\x0d\x0aQuery OK, 1 row affected (0.00 sec) \x0d\x0aRows matched: 1 Changed: 1 Warnings: 0 \x0d\x0a\x0d\x0amysql>update bank set moey=money-500 where name='laohu'\x0d\x0aERROR 1054 (42S22): Unknown column 'moey' in 'field list' \x0d\x0amysql>rollback//只要有一个不成功,执行rollback *** 作 \x0d\x0aQuery OK, 0 rows affected (0.01 sec) \x0d\x0a\x0d\x0amysql>select*from bank\x0d\x0a+---------+--------+ \x0d\x0a| name | money | \x0d\x0a+---------+--------+ \x0d\x0a| shaotuo | 1000.0 | \x0d\x0a| laohu | 5000.0 | \x0d\x0a+---------+--------+ \x0d\x0a------成功之后 进行commit *** 作 \x0d\x0amysql>start transaction//开启事务 \x0d\x0aQuery OK, 0 rows affected (0.00 sec) \x0d\x0a\x0d\x0amysql>update bank set money=money+500 where name='shaotuo'\x0d\x0aQuery OK, 1 row affected (0.01 sec) \x0d\x0aRows matched: 1 Changed: 1 Warnings: 0 \x0d\x0a\x0d\x0amysql>update bank set money=money-500 where name='laohu'\x0d\x0aQuery OK, 1 row affected (0.00 sec) \x0d\x0aRows matched: 1 Changed: 1 Warnings: 0 \x0d\x0a\x0d\x0amysql>commit//两个都成功后执行commit(只要不执行commit,sql语句不会对真实的数据库造成影响) \x0d\x0aQuery OK, 0 rows affected (0.05 sec) \x0d\x0a\x0d\x0amysql>select*from bank\x0d\x0a+---------+--------+ \x0d\x0a| name | money | \x0d\x0a+---------+--------+ \x0d\x0a| shaotuo | 1500.0 | \x0d\x0a| laohu | 4500.0 | \x0d\x0a+---------+--------+

什么是事务?

事务是逻辑上的一组 *** 作,组成这组 *** 作的各个单元,要不全都成功要不全都失败,这个特性就是事务

注意:mysql数据支持事务,但是要求必须是innoDB存储引擎

解决这个问题:

mysql的事务解决这个问题,因为mysql的事务特性,要求这组 *** 作,要不全都成功,要不全都失败,这样就避免了某个 *** 作成功某个 *** 作失败。利于数据的安全

如何使用:

(1)在执行sql语句之前,我们要开启事务 start transaction

(2)正常执行我们的sql语句

(3)当sql语句执行完毕,存在两种情况:

1,全都成功,我们要将sql语句对数据库造成的影响提交到数据库中,committ

2,某些sql语句失败,我们执行rollback(回滚),将对数据库 *** 作赶紧撤销

(注意:mysql数据支持事务,但是要求必须是innoDB存储引擎)

mysql>create table bank(name varchar(20),money decimal(5,1))engine=innodb defau

lt charset=utf8

mysql>inset into bank values('shaotuo',1000),('laohu',5000)

mysql>select*from bank

+---------+--------+

| name | money |

+---------+--------+

| shaotuo | 1000.0 |

| laohu | 5000.0 |

+---------+--------+

------没有成功“回滚”执行rollback

mysql>start transaction//开启事务

Query OK, 0 rows affected (0.00 sec)

mysql>update bank set money=money+500 where name='shaotuo'

Query OK, 1 row affected (0.00 sec)

Rows matched: 1 Changed: 1 Warnings: 0

mysql>update bank set moey=money-500 where name='laohu'

ERROR 1054 (42S22): Unknown column 'moey' in 'field list'

mysql>rollback//只要有一个不成功,执行rollback *** 作

Query OK, 0 rows affected (0.01 sec)

mysql>select*from bank

+---------+--------+

| name | money |

+---------+--------+

| shaotuo | 1000.0 |

| laohu | 5000.0 |

+---------+--------+

------成功之后 进行commit *** 作

mysql>start transaction//开启事务

Query OK, 0 rows affected (0.00 sec)

mysql>update bank set money=money+500 where name='shaotuo'

Query OK, 1 row affected (0.01 sec)

Rows matched: 1 Changed: 1 Warnings: 0

mysql>update bank set money=money-500 where name='laohu'

Query OK, 1 row affected (0.00 sec)

Rows matched: 1 Changed: 1 Warnings: 0

mysql>commit//两个都成功后执行commit(只要不执行commit,sql语句不会对真实的数据库造成影响)

Query OK, 0 rows affected (0.05 sec)

mysql>select*from bank

+---------+--------+

| name | money |

+---------+--------+

| shaotuo | 1500.0 |

| laohu | 4500.0 |

+---------+--------+

有三种。第一种是显式声名的事务,这种事务要以BEGIN

TRANSACTION为事务的起始标志。第二种是自动提交事

务,这是SQL

Server的缺省设置。每一个T-SQL语句在执行完成后会被自动提交。第三种是隐含事务,在这种方式下,

SQL

Server会在当前事务被提交或回滚后自动启动一个新的事务,这个新事务直到用户执行COMMIT或ROLLBACK为止,这时系

统又会启动一个新事务。这样就形成了一个连续的事务链。

答:Cluster

Index和Noncluster

Index的结构都是平衡树。它们的主要区别是Cluster

Index的叶子节点是DATA

PAGE

而Noncluster

Index的叶子节点是数据在DATA

PAGE中的指针。

答:可以使用SP_RENAME来修改Table的名字。

例如:use

pubscreate

table

test(

a

char(10))

sp_rename

test,newtest

这个例子将新建的名为test的Table改为newtest。

答:在这种情况下,要运行SQL

Server7.0

Setup程序。Setup程序会根据新的机器名重新设置SQL

Server。

答:如果您没有成功的安装SQLServer7.0,有几个文件可以帮助您确定是那一步出的错。首先在Windows目录下的

SQLstp.log文件包含有setup过程的详细信息。查看这个文件可以确定Setup是在那一步出错的。

如果Setup过程是在配置的部分出错,那么查看在MSSQL7\Log目录下的错误日志和在MSSQL7\Install目录下的

Cnfgsvr.out文件。SQLServer7.0Setup运行一个名为Cnfgsvr.exe的应用程序来配置SQLServer。这个程序启动SQLServer,

连接SQLServer并运行初始安装脚本。在这一过程中出现的任何错误都会被写入Cnfgsvr.out文件。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/6777198.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-28
下一篇 2023-03-28

发表评论

登录后才能评论

评论列表(0条)

保存