上一篇
MySQL数据库需先安装驱动,通过编程语言(如Java/Python)建立连接,配置URL、用户名及密码,执行SQL
是关于如何调用MySQL数据库的详细介绍,涵盖多种编程语言、工具及操作场景:
通过编程语言连接MySQL
(一)PHP实现方式
-
MySQLi扩展
- 连接数据库:使用
mysqli_connect()函数,传入服务器地址、用户名、密码和数据库名。$conn = mysqli_connect($servername, $username, $password, $dbname);,若连接失败,可通过mysqli_connect_error()获取错误信息]。 - 执行SQL与获取结果:用
mysqli_query()执行查询语句,再以mysqli_fetch_assoc()逐行读取结果集,示例代码如下:$sql = "SELECT id, name FROM users"; $result = mysqli_query($conn, $sql); while ($row = mysqli_fetch_assoc($result)) { echo "ID: " . $row["id"] . " Name: " . $row["name"]; } - 关闭连接:完成操作后调用
mysqli_close($conn)释放资源。
- 连接数据库:使用
-
PDO(PHP Data Objects)
- 创建对象并设置异常模式:推荐使用面向对象的PDO接口,因其支持预处理语句防SQL注入,初始化示例如下:
try { $pdo = new PDO("mysql:host=$host;dbname=$db", $user, $pass); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { die("Connection failed: " . $e->getMessage()); } - 执行查询与遍历数据:通过
query()方法执行SQL,结合fetch()或fetchAll()处理结果。$stmt = $pdo->query("SELECT FROM products"); foreach ($stmt as $row) { print_r($row); } - 释放资源:将PDO对象设为
null即可自动断开连接。
- 创建对象并设置异常模式:推荐使用面向对象的PDO接口,因其支持预处理语句防SQL注入,初始化示例如下:
(二)Python实现方式(pymysql库)
- 安装依赖库:需先安装第三方库
pymysql,可通过pip install pymysql完成。 - 建立连接与游标操作:核心流程包括创建连接、获取游标、执行语句和提交事务,典型代码结构如下:
import pymysql conn = pymysql.connect(host='localhost', port=3306, user='root', password='your_pass', db='test_db') cur = conn.cursor() cur.execute("INSERT INTO employees (name, department) VALUES (%s, %s)", ('Alice', 'HR')) conn.commit() # 确保写入生效 cur.close() conn.close() - 参数化查询优势:使用占位符(如
%s)替代直接拼接字符串,可有效防止SQL注入攻击。
(三)Java实现方式(JDBC驱动)
- 加载驱动类:需在项目中引入MySQL Connector/J的JAR包,并在代码中通过反射注册驱动:
Class.forName("com.mysql.cj.jdbc.Driver")。 - 构建连接URL格式:标准格式为
jdbc:mysql://hostname:port/database?useSSL=false&serverTimezone=UTC,其中参数可根据需求调整。 - 完整交互示例:从建立连接到处理结果集的全过程如下:
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "user", "pass"); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT email FROM clients"); while (rs.next()) { System.out.println(rs.getString("email")); } rs.close(); stmt.close(); conn.close(); - 异常处理机制:建议使用try-catch块捕获
SQLException,确保程序健壮性。
(四)C#实现方式(MySql.Data组件)
- 引用DLL文件:项目需添加对
MySql.Data.dll的程序集引用,可通过NuGet包管理器安装对应版本。 - 连接字符串配置:支持灵活的键值对形式,
string connectionString = "Server=192.168.1.100;Database=inventory;UID=sa;PWD=securePass123;"; using (MySqlConnection conn = new MySqlConnection(connectionString)) { conn.Open(); MySqlCommand cmd = new MySqlCommand("UPDATE stock SET quantity=quantity-1 WHERE product_id=@pid", conn); cmd.Parameters.AddWithValue("@pid", 1001); int affectedRows = cmd.ExecuteNonQuery(); } - ADO.NET集成特性:充分利用.NET平台的DataReader、DataAdapter等组件实现高效数据绑定。
命令行工具直连(CMD方式)
| 操作步骤 | 对应命令示例 | 功能说明 |
|---|---|---|
| 启动客户端 | mysql -u root -p |
以管理员身份登录本地MySQL服务 |
| 查看所有数据库列表 | SHOW DATABASES; |
列出当前可访问的全部数据库 |
| 切换目标数据库 | USE sales_system; |
选择要操作的具体数据库 |
| 显示数据表结构 | DESCRIBE orders; |
查看指定表的字段定义及索引信息 |
| 导入备份文件 | source backup.sql |
执行SQL脚本恢复数据 |
| 退出系统 | exit;或按Ctrl+C组合键 |
安全终止会话 |
常见问题排查指南
- 连接拒绝错误:检查IP白名单设置、防火墙规则是否阻止了3306端口通信。
- 字符编码乱码:统一采用UTF8mb4字符集,并在连接参数中显式指定
charset=utf8mb4。 - 权限不足提示:确认用户已被授予对应数据库的读写权限,必要时执行
GRANT ALL ON database. TO 'user'@'host'; FLUSH PRIVILEGES;。 - 性能优化建议:定期分析慢查询日志,为高频访问字段建立索引,避免全表扫描。
相关问答FAQs
Q1:如何在PHP中选择MySQLi还是PDO?
A:若项目仅使用MySQL且追求简单直接,可选MySQLi;若考虑跨数据库兼容性或需要预处理防注入功能,则优先选择PDO,两者均支持面向对象和过程式编程,但PDO提供更统一的API设计模式。
Q2:为什么Python连接时出现“Access denied for user”?
A:该错误通常由以下原因导致:①输入的用户密码不正确;②该用户未被授权访问指定的数据库;③MySQL服务未正常启动,解决方法包括重置密码、执行授权命令(如GRANT ALL PRIVILEGES ON dbname. TO 'user'@'host';)以及
