MySQL数据库编程总结

MySQL数据库编程总结


一、数据库概述
  1. 数据库定义

    • 数据库是管理数据的软件系统,用于高效存储、管理和检索数据,减少冗余。

    核心功能:通过SQL语言定义、操作数据,维护完整性和安全性。

  2. 常见数据库

    • MySQL、Oracle、SQL Server、PostgreSQL等。

  3. SQL分类

    | 类别 | 全称 | 功能 | 常用命令 |

    | DDL | 数据定义语言 | 管理数据对象(库、表) | CREATE, DROP, ALTER |

    | DML | 数据操作语言 | 操作数据记录 | INSERT, UPDATE, DELETE |

    | DQL | 数据查询语言 | 查询数据 | SELECT |

    | DCL | 数据控制语言 | 权限管理 | GRANT, COMMIT, ROLLBACK |


二、环境搭建
  1. 安装MySQL

    bash 复制代码
    # Ubuntu安装服务端和客户端
    sudo apt-get install mysql-server mysql-client
    # 安装开发库(编程依赖)
    sudo apt-get install libmysqlclient-dev

    注意:安装时需为root用户设置密码。


三、MySQL基础操作
  1. 数据库操作

    sql 复制代码
    -- 登录
    mysql -h主机名 -u用户 -p密码  
    -- 显示所有库
    SHOW DATABASES;
    -- 创建库
    CREATE DATABASE IF NOT EXISTS 库名;
    -- 删除库
    DROP DATABASE IF EXISTS 库名;
    -- 选择库
    USE 库名;
  2. 数据类型

    数值型INT, FLOAT, DOUBLE, TINYINT

    字符串型CHAR(定长), VARCHAR(变长), TEXT

    时间型DATE, TIME, DATETIME, TIMESTAMP

  3. 表约束

    约束 作用 示例
    PRIMARY KEY 唯一标识记录 id INT PRIMARY KEY
    AUTO_INCREMENT 自增字段 id INT AUTO_INCREMENT
    UNIQUE 字段值唯一 email VARCHAR(50) UNIQUE
    FOREIGN KEY 外键约束 FOREIGN KEY (dpt_id) REFERENCES tb_dept(id)
    NOT NULL 非空约束 name VARCHAR(20) NOT NULL
    DEFAULT 默认值 gender ENUM('M','F') DEFAULT 'M'
  4. 表操作

    sql 复制代码
    -- 创建表
    CREATE TABLE 表名 (
      id INT PRIMARY KEY AUTO_INCREMENT,
      name VARCHAR(20) NOT NULL,
      dpt_id INT,
      FOREIGN KEY (dpt_id) REFERENCES dept(id) ON DELETE CASCADE
    );
    -- 修改表
    ALTER TABLE 表名 ADD COLUMN 字段名 类型;  -- 添加字段
    ALTER TABLE 表名 DROP COLUMN 字段名;     -- 删除字段
    ALTER TABLE 表名 MODIFY 字段名 新类型;   -- 修改字段类型
  5. 数据操作

    sql 复制代码
    -- 插入
    INSERT INTO 表名 (字段1, 字段2) VALUES (值1, 值2), (值3, 值4);
    -- 更新
    UPDATE 表名 SET 字段=值 WHERE 条件;
    -- 删除
    DELETE FROM 表名 WHERE 条件;

四、查询操作
  1. 单表查询

    sql 复制代码
    -- 基础查询
    SELECT * FROM 表名;
    SELECT name, age FROM 表名 WHERE age > 18;
    -- 去重

DISTINCT dept FROM employee;

-- 聚合函数

SELECT COUNT(), AVG(salary), MAX(age) FROM employee;
-- 分组
SELECT dept, COUNT(
) FROM employee GROUP BY dept HAVING COUNT(*) > 5;

复制代码
2. **多表连接**  
• **内连接**(仅匹配记录)  
  ```sql
  SELECT a.name, b.dept_name 
  FROM employee a 
  INNER JOIN dept b ON a.dpt_id = b.id;
  ```
左外连接**(左表全部+右表匹配)  
  ```sql
  SELECT a.name, b.dept_name 
  FROM employee a 
  LEFT JOIN dept b ON a.dpt_id = b.id;
  ```
• **右外连接**(右表全部+左表匹配)  
  ```sql
  SELECT a.name, b.dept_name 
  FROM employee a 
  RIGHT JOIN dept b ON a.dpt_id = b.id;
  ```

3. **子查询**  
```sql
-- IN子查询
SELECT name FROM employee 
WHERE dpt_id IN (SELECT id FROM dept WHERE locate = '上海');
-- EXISTS子查询
SELECT name FROM employee a 
WHERE EXISTS (SELECT 1 FROM dept b WHERE a.dpt_id = b.id);

五、C API编程接口
  1. 核心函数

    函数 作用
    mysql_init() 初始化连接对象
    mysql_real_connect() 连接数据库
    mysql_query() 执行SQL语句
    mysql_store_result() 获取结果集
    mysql_fetch_row() 逐行读取数据
    mysql_free_result() 释放结果集内存
    mysql_close() 关闭连接
  2. 示例代码

    c 复制代码
    #include <mysql/mysql.h>
    #include <stdio.h>
    
    int main() {
        MYSQL *conn = mysql_init(NULL);
        if (!mysql_real_connect(conn, "localhost", "root", "password", "testdb", 0, NULL, 0)) {
            fprintf(stderr, "连接失败: %s\n", mysql_error(conn));
            return 1;
        }
        // 设置字符集
        mysql_set_character_set(conn, "utf8");
        // 执行查询
        if (mysql_query(conn, "SELECT * FROM employee")) {
            fprintf(stderr, "查询失败: %s\n", mysql_error(conn));
            return 1;
        }
        // 处理结果集
        MYSQL_RES *result = mysql_store_result(conn);
        MYSQL_ROW row;
        while ((row = mysql_fetch_row(result))) {
            printf("ID: %s, Name: %s\n", row[0], row[1]);
        }
        // 释放资源
        mysql_free_result(result);
        mysql_close(conn);
        return 0;
    }

六、数据库备份与恢复
  1. 备份数据库

    bash 复制代码
    mysqldump -u root -p 数据库名 > backup.sql
  2. 恢复数据库

    bash 复制代码
    mysql -u root -p 新数据库名 < backup.sql

七、注意事项
  1. 外键约束

    • 需使用InnoDB引擎,设置ON DELETEON UPDATE行为(如CASCADESET NULL)。

  2. 字符集

    • 推荐使用utf8mb4以支持Emoji等特殊字符,建表时指定:

    sql 复制代码
    CREATE TABLE 表名 (...) DEFAULT CHARSET=utf8mb4;
  3. 性能优化

    • 避免SELECT *,索引关键字段,合理使用事务。


通过以上内容,可全面掌握MySQL数据库的核心操作、SQL语法及C语言接口编程。

相关推荐
五颜六色的池31 分钟前
my sql 常用函数及语句的执行顺序
数据库·sql
Gold Steps.40 分钟前
从 “T+1” 到 “秒级”:MySQL+Flink+Doris 构建实时数据分析全链路
大数据·数据库·数据分析
花北城1 小时前
【MySQL】Oracle与MySQL,跨库数据转储
数据库·mysql·oracle
一條狗1 小时前
学习日报 20250929|数据库与缓存一致性策略的选择
redis·mysql·kafka
没有bug.的程序员1 小时前
MySQL 配置调优参数:从基础到生产级优化指南
java·数据库·mysql·优化·mysql配置调优
optimistic_chen2 小时前
【Java EE进阶 --- SpringBoot】Mybatis操作数据库(基础)
数据库·经验分享·spring boot·笔记·spring·java-ee·mybatis
支付宝小程序云2 小时前
百宝箱开放平台 ✖️ 查询信息列表
数据库
对着晚风做鬼脸2 小时前
MySQL进阶知识点(六)---- 存储引擎
数据库·mysql
百锦再2 小时前
从 .NET 到 Java 的转型指南:详细学习路线与实践建议
android·java·前端·数据库·学习·.net·数据库架构
卷Java2 小时前
uni-app 模板语法修复说明
java·数据库·spring boot·uni-app·mybatis