C++ MySQL (初识)

什么是数据库?

  • 定义: 数据库是一个结构化的数据集合,用于存储、管理和检索数据。它可以看作是一个电子存储的容器,里面包含了多个表、视图、存储过程和其他对象。数据库通常用于组织和保存大量的信息,以便快速高效地访问。

  • 特点:

    • 数据结构: 数据以表格的形式存储,表由行和列组成。
    • 数据管理: 数据库提供了一种机制来插入、更新、删除和查询数据。
    • 关系性: 在关系型数据库中,数据表之间可以通过外键建立关系,从而形成更复杂的数据结构。
  • 类型: 数据库可以分为多种类型,主要包括:

    • 关系型数据库(RDBMS): 使用表格来存储数据(如 MySQL、PostgreSQL、Oracle)。
    • 非关系型数据库(NoSQL): 以不同的方式存储数据(如 MongoDB、Cassandra)。

什么是 MySQL?

  • 定义: MySQL 是一个开源的关系型数据库管理系统(RDBMS),它使用结构化查询语言(SQL)来管理和操作数据库。MySQL 是目前使用最广泛的数据库之一,适用于各种应用场景,从小型网站到大型企业系统。

  • 特点:

    • 开源: MySQL 是一个开源项目,意味着任何人都可以免费下载、使用和修改它的源代码。
    • 高性能: MySQL 设计为高效和快速,能够处理大量的并发查询。
    • 可扩展性: MySQL 可以处理从小型到大型的数据库需求,支持分布式和集群配置。
    • 支持多种平台: MySQL 可以在不同操作系统上运行,包括 Windows、Linux 和 macOS。
  • 应用: MySQL 被广泛用于 Web 开发、数据分析、企业应用和其他需要数据存储的场景。许多知名的网站和应用(如 WordPress、Facebook、Twitter 等)都使用 MySQL 作为其数据库解决方案。

总结

  • 数据库 是一种数据存储和管理的工具,可以是多种类型,而 MySQL 是一种特定的关系型数据库管理系统,使用 SQL 来管理和操作数据库中的数据。简单来说,数据库是数据的容器,而 MySQL 是实现数据库功能的一种具体工具。

RDBMS术语及表现形式总结表:

术语

定义

在表格中的表现形式

注释

数据库 (Database)一组关联表的集合表集合,通常一个数据库由多个表构成数据库名用于连接或访问时指定,如USE my_db;
表 (Table)数据的矩阵,由行和列组成每个表表示为数据库的一部分,包含多个列和行表名定义结构和数据,如CREATE TABLE employees...
列 (Column)表的字段,每列存储同类数据表头部分为列名,列名表示字段,如nameage定义数据类型和约束条件,如VARCHAR(100)
行 (Row)表中的一条记录,每行包含一个元组的数据表中的每行代表一条数据记录行内数据按照列定义的字段依次填充,如('John', 30)
冗余 (Redundancy)数据重复存储,通常用于提高数据的安全性表的多个行或多个表之间的数据重复在设计时应避免无意义的冗余
主键 (Primary Key)唯一标识每一行的列,确保每一条记录都是唯一的表的一列或多列,如id,标记为PRIMARY KEY不能重复且不能为NULL,如PRIMARY KEY(id)
外键 (Foreign Key)用于在两个表之间建立关联表中的某一列引用另一个表的主键外键约束通过FOREIGN KEY定义,如REFERENCES
复合键 (Composite Key)由多列组成的主键或索引,确保数据唯一性多个列组合为一个主键或索引,如PRIMARY KEY (id, name)用于多个列共同确定唯一值
索引 (Index)加速数据查询的结构,类似于书的目录特定列上创建索引,如CREATE INDEX idx_name ON employees(name)提高查询效率,但可能降低写入速度
参照完整性 (Referential Integrity)保证外键引用的有效性,不允许引用不存在的实体外键约束在表结构中定义,如FOREIGN KEY(customer_id)保证表之间数据的完整性
视图 (View)虚拟表,从一个或多个表中生成的结果集如同表一样,可以查询,但不存储实际数据,如CREATE VIEW...用于简化复杂查询或限制特定数据访问
触发器 (Trigger)当表发生特定事件时执行的程序,如插入或删除操作时触发定义在表上,监控操作,如CREATE TRIGGER...可用于自动化任务,如日志记录或数据检查
事务 (Transaction)一组原子性操作,确保数据一致性一系列SQL操作,使用BEGIN, COMMIT, ROLLBACK控制确保多个操作要么全部执行,要么全部不执行
锁 (Lock)防止多个事务同时修改同一资源,确保一致性行级锁、表级锁等,使用LOCK TABLES或自动控制防止并发修改带来的冲突
规范化 (Normalization)数据库设计方法,减少冗余,保证数据一致性通过设计和分解表结构,减少重复数据常用的范式有第一、第二、第三范式(1NF, 2NF, 3NF)
去规范化 (Denormalization)为了提高查询效率,故意增加数据冗余适当的冗余,如将查询频繁的字段合并到一个表中常用于分布式系统,降低查询成本
存储过程 (Stored Procedure)在数据库中定义的可重复使用的SQL程序通过SQL定义,使用时直接调用,如CALL proc_name()可用于复杂的逻辑处理,避免频繁的网络交互
游标 (Cursor)用于遍历查询结果的数据库对象定义和使用游标来逐行处理查询结果,如DECLARE CURSOR...用于处理大规模数据集,逐行操作
联合 (Join)通过相关列将多张表中的数据组合为一个结果集SQL中使用JOIN语句,如INNER JOIN, LEFT JOIN用于表之间的关联查询
分区 (Partitioning)将表的数据分成多个部分,通常用于提高性能或管理SQL中使用PARTITION BY语句定义分区表常用于大数据表的管理和优化性能
聚合函数 (Aggregate Function)对一组数据进行计算,返回单一值COUNT(), SUM(), AVG()等,用于统计和计算常用于报表、统计和分析

术语的位置和表现形式:

  • 列 (Column): 每个表的顶端表示表的列名,每个列表示某种数据属性,如姓名、年龄、ID 等。
  • 行 (Row): 每个表的一行是具体的数据记录,行与行之间通常通过主键进行区分。
  • 主键、外键、复合键: 主键是唯一标识每一行的列,外键是一个列或多个列,引用另一个表的主键以建立表之间的关系。复合键则是由多个列联合作为主键。
  • 视图、触发器、存储过程: 这些是数据库中的虚拟表、自动化程序或可复用的逻辑块,用户通过调用它们来执行特定任务,而不直接操作表。

数据表示例:employees

假设我们有一个名为 employees 的员工表,结构如下:

employee_id (主键)first_name (列)last_name (列)age (列)department_id (外键)
1JohnDoe30101
2JaneSmith25102
3BobJohnson35101
4AliceWilliams28103

表格标记和解释

  1. 表 (Table):

    • 表名:employees
    • 整个表就是一个存储数据的结构,包含列和行。
  2. 列 (Column):

    • employee_idfirst_namelast_nameagedepartment_id 都是表中的列,每列存储特定类型的数据,例如 first_name 列存储员工的名字,age 列存储员工的年龄。
    • 每列的顶部是列名,列名用于描述这一列的数据含义。
  3. 行 (Row):

    • 表中的每一行都是一条记录,例如:
      • 第一行:(1, John, Doe, 30, 101),表示 John Doe 的信息。
      • 第二行:(2, Jane, Smith, 25, 102),表示 Jane Smith 的信息。
    • 行是表中的一条完整记录,包含所有列的对应值。
  4. 主键 (Primary Key):

    • 在此表中,employee_id 是主键,它唯一标识表中的每一行数据。
    • 主键的值必须唯一,不能重复,也不能为 NULL
    • 在这个表中,employee_id 1, 2, 3, 4 是唯一的。
  5. 外键 (Foreign Key):

    • department_id 是外键,它引用另一个表(比如 departments 表)的主键,以实现表之间的关联。
    • 在本例中,department_id 引用了部门表的主键,用于将员工分配到不同的部门。
  6. 复合键 (Composite Key):

    • 复合键是由多个列组合成的键,在这个表中没有使用复合键,但它通常用于更复杂的场景,例如当 employee_iddepartment_id 组合唯一标识一行时。
  7. 索引 (Index):

    • 索引并不会直接出现在表中,而是在表的列上应用。比如,可以为 last_name 列创建一个索引来加速搜索操作。
    • 索引类似于书的目录,可以加速数据的查询。
  8. 冗余 (Redundancy):

    • 冗余是指重复存储的数据,例如在多个表中重复存储员工的名字和地址等信息。这个表本身没有冗余,但在设计多个表时应注意避免不必要的数据重复。
  9. 视图 (View):

    • 视图是基于一张或多张表生成的虚拟表,不存储实际数据。视图可以从 employees 表中筛选某些列或行。比如,创建一个只显示 first_namelast_name 的视图
  10. 触发器 (Trigger):

    • 触发器是定义在表上的程序,当表发生某些事件时自动执行。例如,当 employees 表中插入一条记录时,触发器可以自动更新其他相关表的数据。
  11. 事务 (Transaction):

    • 事务是一组操作,要么全部执行成功,要么全部失败。事务通常涉及多次表操作,如插入、更新、删除。事务管理确保数据一致性。可以通过 BEGIN, COMMIT, ROLLBACK 来控制。

   SQL语句

1. 数据库 (Database)
  • 定义: 数据库是数据的存储集合,通常由多张表组成,每张表存储相关的、结构化的数据。
  • C++ 结合 MySQL 示例: 在 C++ 中,你可以使用 CREATE DATABASE 语句来创建一个新的数据库,并通过 mysqlcppconn 库连接和操作数据库。例如,创建数据库的 SQL 语句为:
  • CREATE DATABASE test_db;
     
2. 数据表 (Table)
  • 定义: 数据表是数据库中的一个结构化的数据集,它包含了多行和多列,类似于电子表格。
  • C++ 示例: 创建表的 SQL 语句:
  • CREATE TABLE employees (
        id INT PRIMARY KEY,
        name VARCHAR(50),
        age INT
    );
     
3. 列 (Column)
  • 定义: 列表示表中的字段,每列存储相同类型的数据,例如姓名或地址。
  • C++ 示例: 在 SQL 中可以使用 ALTER TABLE 添加或修改列,例如:
  • ALTER TABLE employees ADD salary DECIMAL(10, 2);
4. 行 (Row)
  • 定义: 行是一组相关的字段数据(也称为记录),例如一个雇员的完整信息。
  • C++ 示例: 向表中插入一行数据的 SQL 语句:
  • INSERT INTO employees (id, name, age) VALUES (1, 'John Doe', 30);
     
5. 冗余 (Redundancy)
  • 定义: 冗余是指存储重复的数据。尽管会降低性能,但冗余可提高数据的安全性,例如使用多份备份来防止数据丢失。
  • 应用: 在设计数据库时,应尽量避免不必要的冗余,以提高性能和数据一致性。
6. 主键 (Primary Key)
  • 定义: 主键是表中唯一标识每一行的列,不能重复,也不能为 NULL。
  • C++ 示例: 定义主键:
  • CREATE TABLE products (
        product_id INT PRIMARY KEY,
        product_name VARCHAR(100)
    );
     
7. 外键 (Foreign Key)
  • 定义: 外键用于在两张表之间建立关联。它引用另一个表的主键。
  • C++ 示例: 定义外键:
  • CREATE TABLE orders (
        order_id INT PRIMARY KEY,
        customer_id INT,
        FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
    );
     
8. 复合键 (Composite Key)
  • 定义: 复合键是由多个列组成的主键或索引,通常用于需要多列组合来唯一标识一行的情况。
  • C++ 示例: 定义复合键:
  • CREATE TABLE order_items (
        order_id INT,
        product_id INT,
        PRIMARY KEY (order_id, product_id)
    );
     
9. 索引 (Index)
  • 定义: 索引是一种用于加快数据查询速度的数据结构,类似于书籍的目录。
  • C++ 示例: 创建索引的 SQL 语句:
  • CREATE INDEX idx_name ON employees (name);
     
10. 参照完整性 (Referential Integrity)
  • 定义: 参照完整性是指外键引用必须存在于被引用的表中,用于保证数据的一致性。
  • 应用: 保证外键约束可以防止插入无效的引用,确保数据库的完整性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值