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语言接口编程。

相关推荐
码出财富34 分钟前
SQL语法大全指南
数据库·mysql·oracle
异世界贤狼转生码农2 小时前
MongoDB Windows 系统实战手册:从配置到数据处理入门
数据库·mongodb
QuZhengRong3 小时前
【数据库】Navicat 导入 Excel 数据乱码问题的解决方法
android·数据库·excel
码农阿豪3 小时前
Windows从零到一安装KingbaseES数据库及使用ksql工具连接全指南
数据库·windows
冷崖8 小时前
MySQL异步连接池的学习(五)
学习·mysql
时序数据说8 小时前
时序数据库市场前景分析
大数据·数据库·物联网·开源·时序数据库
听雪楼主.12 小时前
Oracle Undo Tablespace 使用率暴涨案例分析
数据库·oracle·架构
我科绝伦(Huanhuan Zhou)12 小时前
KINGBASE集群日常维护管理命令总结
数据库·database
妖灵翎幺12 小时前
Java应届生求职八股(2)---Mysql篇
数据库·mysql
HMBBLOVEPDX12 小时前
MySQL的事务日志:
数据库·mysql