早上好, 如果有一些问题,我需要一个交易原因,我希望什么也不要创建,不要计划,什么也不做。 但是它总是写在我的数据库上,例如,在我的代码中,我没有将名称字段放在Insert中,但是它创建了方案和表,因此之前是2条命令。 我哪里错了? 谢谢
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="MySql.Data" %>
<%@ Import Namespace="MySql.Data.MySqlClient" %>
<%RunTransaction("server=localhost;user id=root;password=xxx$;Database=ooo")%>
<script runat="server">
Public Sub RunTransaction(myConnString As String)
Dim myConnection As New MySqlConnection(myConnString)
myConnection.Open()
Dim myCommand As MySqlCommand = myConnection.CreateCommand()
Dim myTrans As MySqlTransaction
myTrans = myConnection.BeginTransaction()
myCommand.Connection = myConnection
myCommand.Transaction = myTrans
Try
myCommand.CommandText = "CREATE SCHEMA xxx DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_cs;"
myCommand.ExecuteNonQuery()
myCommand.CommandText = "CREATE TABLE xxx.ITEMIMG (IDITE VARCHAR(36) NOT NULL, IDIMG VARCHAR(36) NOT NULL, IMG VARCHAR(255) NULL, COVER INT NULL, DATINS DATE NULL, PRIMARY KEY (IDITE, IDIMG))"
myCommand.ExecuteNonQuery()
myCommand.CommandText = "INSERT INTO xxx.ITEMIMG (IDITE, , IMG, DATINS) VALUES ('maquillaje-1','maquillaje-1-img-1', '/maquillaje-1.jpg', NOW())"
myCommand.ExecuteNonQuery()
myTrans.Commit()
response.write("Both records are written to database.")
Catch e As Exception
myTrans.Rollback()
response.write("rollaback")
Finally
myConnection.Close()
response.write("chidi connessione")
End Try
End Sub
</script>
答案 0 :(得分:1)
DDL 语句导致隐式提交;不受交易控制。
除SELECT之外,SQL语句还属于以下两大类之一: DML (数据操作语言)和 DDL (数据定义语言)
将 DML 语句视为按行操作。 INSERT
,UPDATE
和DELETE
语句对行进行操作。这些操作可以在事务内执行,并且受ROLLBACK
和COMMIT
的约束。
将 DDL 语句视为按列操作。 CREATE TABLE
,ALTER TABLE
语句创建,修改或删除列。 (DDL语句不仅对表和列进行操作,但是出于讨论的目的,我们将重点关注按列操作与按行操作。DDL操作会导致隐式提交,因此不受事务ROLLBACK约束。 / p>
此行为并非MySQL独有。
请注意,MySQL 8.0中引入的“ atomic DDL”并没有真正改变这一点。 CREATE TABLE语句要么成功并被自动提交,要么失败。