MySQL连接类型下的事务处理(mysql不同连接的事务)
MySQL连接类型下的事务处理
在MySQL中,连接类型是指客户端应用程序和数据库服务器之间的连接方式。MySQL支持多个连接类型,包括本地连接、TCP/IP连接、Web连接和SSL连接等。根据连接类型的不同,事务处理的方式也有其特定的规则和要求。
本地连接事务处理
本地连接是指应用程序与MySQL数据库在同一台计算机上运行。在这种连接类型下,事务处理非常简单。应用程序调用MySQL的事务处理命令(BEGIN、COMMIT或ROLLBACK)即可进行事务操作。
以下是一个本地连接的示例(使用Python编程语言):
`python
import mysql.connector
# 连接到本地MySQL数据库
mydb = mysql.connector.connect(
host= localhost ,
user= root ,
password= password ,
database= mydatabase
)
# 创建游标对象
mycursor = mydb.cursor()
# 开始事务
mycursor.execute( BEGIN )
# 执行SQL语句
sql = INSERT INTO customers (name, address) VALUES (%s, %s)
val = ( John , Highway 21 )
mycursor.execute(sql, val)
# 提交事务
mydb.commit()
TCP/IP连接事务处理
在TCP/IP连接下,事务处理的过程与本地连接类似。应用程序需要调用MySQL的事务处理命令,然后利用socket建立TCP/IP连接到服务器,执行SQL语句,提交/回滚事务。
以下是一个TCP/IP连接的示例(使用Java编程语言):
```javaimport java.sql.*;
public class JdbcTest { static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost/mydatabase";
static final String USER = "root"; static final String PASS = "password";
public static void mn(String[] args) { Connection conn = null;
Statement stmt = null; try {
// 注册 JDBC 驱动 Class.forName(JDBC_DRIVER);
// 打开连接 System.out.println("连接数据库...");
conn = DriverManager.getConnection(DB_URL,USER,PASS);
// 开始事务 conn.setAutoCommit(false);
// 执行查询 System.out.println("插入数据...");
stmt = conn.createStatement(); String sql = "INSERT INTO customers (name, address) VALUES ("John", "Highway 21")";
stmt.executeUpdate(sql);
// 提交事务 conn.commit();
System.out.println("插入完成...");
// 关闭资源 stmt.close();
conn.close(); } catch(SQLException se) {
// 回滚事务 if(conn != null) {
try { System.err.print("回滚事务...");
conn.rollback(); } catch(SQLException excep) {
excep.printStackTrace(); }
}
// 处理 JDBC 错误 se.printStackTrace();
} catch(Exception e) { // 处理 Class.forName 错误
e.printStackTrace(); } finally {
// 关闭资源 try {
if(stmt!=null) stmt.close(); } catch(SQLException se2) {
} try {
if(conn!=null) conn.close(); } catch(SQLException se) {
se.printStackTrace(); }
} System.out.println("Goodbye!");
}}
Web连接事务处理
当应用程序通过Web服务器与MySQL数据库连接时,需要考虑Web服务器和MySQL服务器之间的网络通信问题。在这种情况下,应用程序通常使用MySQL提供的Java Servlet或JSP技术来访问数据库,这将导致特定的连接类型和事务处理方式。
以下是一个采用Servlet连接MySQL的示例:
`java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
public class InsertCustomer extends HttpServlet {
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType( text/html );
PrintWriter out = response.getWriter();
Connection conn = null;
PreparedStatement stmt = null;
String customerName = request.getParameter( customerName );
String customerAddress = request.getParameter( customerAddress );
try {
// 加载驱动程序
Class.forName( com.mysql.cj.jdbc.Driver );
// 建立连接
conn = DriverManager.getConnection( jdbc:mysql://localhost/mydatabase , root , password );
// 开始事务
conn.setAutoCommit(false);
// 执行插入操作
String sql = INSERT INTO customers (name, address) VALUES (?, ?)
stmt = conn.prepareStatement(sql);
stmt.setString(1, customerName);
stmt.setString(2, customerAddress);
stmt.executeUpdate();
// 提交事务
conn.commit();
out.println(
插入成功!);
} catch (SQLException e) {
// 回滚事务
if (conn != null) {
try {
System.out.println( 回滚事务 );
conn.rollback();
} catch(SQLException excep) {
excep.printStackTrace();
}
}
// 显示错误信息
out.println(
插入失败!" + e.getMessage() + "
);
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭连接和语句对象
try {
if (stmt != null) stmt.close();
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
SSL连接事务处理
当应用程序使用SSL协议来安全地访问MySQL数据库时,需要使用SSL连接。SSL连接与TCP/IP连接非常相似,但需要建立一个安全的socket连接,以保护数据传输。
以下是一个使用Java连接SSL MySQL的示例:
```javaimport java.sql.*;
import java.util.Properties;import javax.net.ssl.*;
public class SSLTest {
public static void mn(String args[]) {
Properties props = new Properties(); props.setProperty("user", "root");
props.setProperty("password", "password"); props.setProperty("useSSL", "true");
props.setProperty("sslMode", "VERIFY_IDENTITY"); props.setProperty("trustCertificateKeyStoreUrl", "file:///path/to/cacert.pem");
props.setProperty("trustCertificateKeyStorePassword", "");
String url = "jdbc:mysql://localhost:3306/mydatabase";
try { Class.forName("com.mysql.cj.jdbc.Driver").newInstance();
SSLSocketFactory socketFactory = (SSLSocketFactory) SSLSocketFactory.getDefault(); SSLSocket socket = (SSLSocket) socketFactory.createSocket("localhost", 3306);
socket.setEnabledCipherSuites(socket.getSupportedCipherSuites()); System.out.println("Connected to database via SSL...");
Connection conn = DriverManager.getConnection(url, props); conn.setAutoCommit(false);
Statement stmt = conn.createStatement(); String sql = "INSERT INTO customers (name, address) VALUES ("John", "Highway 21")";
stmt.executeUpdate(sql); conn.commit();
stmt.close(); conn.close();
} catch (ClassNotFoundException e) { e.printStackTrace();
} catch (SQLException e) { e.printStackTrace();
} catch (Exception e) { e.printStackTrace();
} }
}
参考文献:
1. MySQL Transactions w3schools.com
2. MySQL Connector/J Developer Guide Oracle.com
我想要获取技术服务或软件
服务范围:MySQL、ORACLE、SQLSERVER、MongoDB、PostgreSQL 、程序问题
服务方式:远程服务、电话支持、现场服务,沟通指定方式服务
技术标签:数据恢复、安装配置、数据迁移、集群容灾、异常处理、其它问题
本站部分文章参考或来源于网络,如有侵权请联系站长。
数据库远程运维 MySQL连接类型下的事务处理(mysql不同连接的事务)
相关文章
- MySQL Error number: MY-010228; Symbol: ER_XA_ROLLING_BACK_XID; SQLSTATE: HY000 报错 故障修复 远程处理
- MySQL排序与分页技巧研究(mysql排序分页)
- MySQL实现跨数据库全外连接查询(mysql的全外连接)
- MySQL中的谜题:一切都变成了问号(mysql都是问号)
- 数据库极速实现:XAMPP快速连接MySQL数据库(xampp连接mysql)
- 开启ssh连接MySQL 优化数据库性能(ssh连接mysql)
- JBoss与MySQL数据库连接实战(jboss连接mysql)
- 利用HTML5和MySQL实现数据交换(html5连接mysql)
- MySQL 整型转字符串的技巧(mysql整型转字符)
- Ubuntu系统如何重启MySQL服务(ubuntu重启mysql)
- MySQL 数据库映射:让数据无处不在(mysql数据库映射)
- MySQL客户端连接IP的记录与查看方法(mysql客户端ip)
- 如何连接MySQL数据库中心(中连接mysql数据库)
- MySQL连接慢:一次折磨的运行体验(mysql 连接 慢)
- 提高效率,优化MySQL:25种方法(mysql优化的方法)
- 函数探究MySQL的Concat函数:连接无限可能(mysql的concat)
- MySQL指令妙用:连接数据库的简单步骤(mysql连接数据库命令)
- MySQL缓存加速CI的开发工作(ci mysql 缓存)
- CDE连接MySQL轻松解决数据挖掘问题(cde连接mysql)
- 脚本使用CMD命令行参数调用MySQL脚本(cmd 调用mysql)
- 利用Bitand提升MySQL性能(bitand mysql)
- cmd终端连接MySQL一步步操作指南(cmd到mysql)
- MySQL去重语法大全(mysql中去重语法)
- MySQL三表关联详解实现多表查询的方法(mysql三表依次关联)
- 探索MySQL三种logbinlogslowlog和errorlog(mysql 三种log)
- 快捷方便的MySQL一键连接教程(mysql一键连接)
- MySQL中不使用事务的影响及解决方法(mysql 不加事务)
- 我在MySQL上机实验,探究数据管理的奥秘(mysql上机实验报告)
- 深入浅出Mysql三重连接查询(mysql 三重连接查询)