當前位置:首頁 » 編程語言 » sql開啟事務代碼
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql開啟事務代碼

發布時間: 2023-01-30 12:21:07

sql Server啟動事務有幾種方式

有三種。第一種是顯式聲名的事務,這種事務要以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文件。

⑵ 我是一個初學者,SQL怎麼寫事務請高手幫幫忙!!!!

事務控制語句 (transaction)
事務就是一系列的操作,要麼同時完成,要麼不完成
都是由一個dml語句開始的

updata emp2 set sal=sal*2;
delete from dept2;
insert into salgrade values (6,10000,20000);
//這樣是一個transaction語句,如果使用rollback;返回,則上面三條語句將不起任何作用
transaction語句的結束為 1.rollback transaction語句結束.
2.commit;提交完成,transaction語句結束
3.執行ddl,或則dcl語句事務自動提交.
4.當用戶正常斷開連接時,transcation自動提交
5.當用戶非正常斷開連接時,Oracle自動執行rollback;語句
如:select * from dept2; //transcation開始
create table t (a varchar2(20));//執行了ddl語句,則transcation語句自動提交

⑶ ASP.NET ADO.NET 求通用C#事務代碼, 基於Sql

petshop裡面就有哈,很經典。
/// <summary>
/// 執行多條SQL語句,實現資料庫事務。
/// </summary>
/// <param name="SQLStringList">多條SQL語句</param>
public static void ExecuteSqlTran(ArrayList SQLStringList)
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection=conn;
SqlTransaction tx=conn.BeginTransaction();
cmd.Transaction=tx;
try
{
for(int n=0;n<SQLStringList.Count;n++)
{
string strsql=SQLStringList[n].ToString();
if (strsql.Trim().Length>1)
{
cmd.CommandText=strsql;
cmd.ExecuteNonQuery();
}
}
tx.Commit();
}
catch(System.Data.SqlClient.SqlException E)
{
tx.Rollback();
throw new Exception(E.Message);
}
}
}

⑷ SQL語言中,用於事務回開始的語句是什麼

--開啟事務
begin tran
--執行操作
update Accounts_UsersExp set TelPhone=123456 where userid=14
--執行錯誤事務回滾
rollback
--如果正確進行事務提交
commit

⑸ 如何開啟mysql的事務支持

看你是什麼事務,jdbc事務,還是分布式事務,還是容器事務

1,編程式事務管理(jdbc的事務是綁定在connection上的)

Connection conn = null;
try
{
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@host:1521:SID","username","password");
conn.setAutoCommit(false); //取消自動提交
PreparedStatement ps = conn.prepareCall("update something");
ResultSet rs = ps.executeQuery();
conn.commit(); //手動提交

}
catch (Exception e)
{
conn.rollback();
e.printStackTrace();
}
finally
{
conn.close();
}

2,聲明式事務
先在工程的application.xml配置文件中添加如下代碼,開啟事務

<!-- 聲明式事務控制配置 -->
<tx:annotation-driven transaction-manager="txManager"/>

<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="datasource" ref="bassDataSource"></property>
</bean>
然後在你需要開啟事務的介面前面添加註解
@Transactional(rollbackFor = IOException.class)
public void add(String name) throws IOException
{
System.out.println("可以再類里和方法裡面添加事務註解0~0");
throw new IOException();
}
直接調用介面方法就好

分布式事務處理(mysql貌似在5.X之後才支持) 的話,
1.可以直接使用spring+atomikos框架進行管理
參考:http://blog.chinaunix.net/uid-21162795-id-3424973.html
就不貼測試代碼了,自己看著配置吧

2,使用JTA(Java Transaction API)進行分布式事務管理(測試代碼如下)
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import javax.naming.InitialContext;
import javax.sql.DataSource;
import javax.transaction.SystemException;
import javax.transaction.UserTransaction;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

//分布式事務處理
public class transferAccount
{
@SuppressWarnings("null")
public void testTransferAccount()
{
UserTransaction userts = null;
Connection connA = null;
PreparedStatement psA = null;
InitialContext context = null;
Connection connB = null;
PreparedStatement psB = null;

try
{
//獲得事務管理對象
userts = (UserTransaction) context.lookup("java:comp/UserTransaction");
//獲取兩個資料庫
connA = getDataSourceA().getConnection();
connB = getDataSourceB().getConnection();
//開啟事務
userts.begin();
//sql語句
psA = connA.prepareStatement("我加1");
psB = connB.prepareStatement("我減1");
//執行sql
psA.executeUpdate();
psB.executeUpdate();
//事務提交
userts.commit();

} catch (Exception e)
{
try
{
userts.rollback();
} catch (IllegalStateException | SecurityException
| SystemException e1)
{
e1.printStackTrace();
}
e.printStackTrace();
}
finally
{
try
{
psA.close();
psB.close();
connA.close();
connB.close();
} catch (SQLException e)
{
e.printStackTrace();
}
}
}

public DataSource getDataSourceA()
{
MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setDatabaseName("mysql");
dataSource.setServerName("server");
dataSource.setPortNumber(1433);
dataSource.setUser("test");
dataSource.setPassword("test");
return dataSource;
}

public DataSource getDataSourceB()
{
MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setDatabaseName("mysql");
dataSource.setServerName("server");
dataSource.setPortNumber(1435);
dataSource.setUser("test1");
dataSource.setPassword("test1");
return dataSource;
}
}