跳至主要內容

数据库与SQL基础

bsfc.tech大约 4 分钟MySQL

数据库与SQL基础是学习数据管理和分析的重要起点。下面我将为您详细解释数据库的基本概念,并通过示例展示SQL语言的基础应用。

数据库基础

数据库是一个长期存储在计算机内,以一定方式组织的、可共享的、具有尽可能小的冗余度、与应用程序彼此独立的大量数据的集合。关系型数据库是最常见的类型,它以表格的形式存储数据,通过关系(即外键)链接不同的表。

MySQL 支持多种数据类型,这些类型可以分为以下几大类,以适应不同种类的数据存储和处理需求:

1. 整数类型 (Integer)

  • TINYINT: 占1字节,带符号范围是-128到127,无符号是0到255。
  • SMALLINT: 占2字节,带符号范围大约-32,768到32,767,无符号是0到65,535。
  • MEDIUMINT: 占3字节,通常等同于INT。
  • INTINTEGER: 占4字节,带符号范围大约-2亿到2亿,无符号是0到42亿。
  • BIGINT: 占8字节,带符号范围极大,无符号更是如此。

2. 浮点数类型 (Floating-Point)

  • FLOAT: 单精度浮点数,占4字节,精度较低,尾数部分可以存储大约6-7位有效数字。
  • DOUBLE: 双精度浮点数,占8字节,精度较高,尾数部分可以存储约15-16位有效数字。
  • 这两类数据类型可以使用(M,D)的形式定义,其中M是总位数(包括整数和小数部分),D是小数点后的位数,但是实际存储的值仍受到精度限制,可能会有舍入误差。

3. 定点数类型 (Fixed-Point)

  • DECIMAL: 存储精确的数值,不会发生浮点运算中的舍入误差。同样可以用(M,D)形式定义精度和标度,非常适合财务系统等对精度要求高的场景。

4. 字符串类型 (String)

  • CHAR: 固定长度字符串,根据定义的长度分配空间,未使用的空间会用空格填充。
  • VARCHAR: 可变长度字符串,只使用实际需要的空间加上一定的开销(1-2个字节存储长度信息)。
  • TEXT: 包括TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT,用于存储大量的文本数据,存储空间需求更大,查询性能通常低于CHAR和VARCHAR。

5. 日期和时间类型 (Date and Time)

  • DATE: 存储日期(年月日)。
  • DATETIME: 存储日期和时间(年月日时分秒)。
  • TIMESTAMP: 类似DATETIME,但是会自动根据时区调整,并且有特殊的自动更新功能。
  • TIME: 存储时间(时分秒)。
  • YEAR: 存储年份。

6. 枚举类型 (Enum)

  • ENUM: 允许你定义一个预设的值列表,列中的值只能是这些预设值之一。

7. 集合类型 (Set)

  • SET: 类似ENUM,但是SET允许选择列表中的多个值。

8. 二进制类型 (Binary)

  • BLOB, TEXT, VARBINARY, BINARY, BIT: 用于存储二进制数据或大文本数据,如图片、文档等。

选择合适的数据类型对于优化存储空间、提升查询性能以及确保数据准确性至关重要。在设计数据库时,应当基于数据的实际需求和预期用途来决定每列的数据类型。

SQL(Structured Query Language)基础

SQL是一种用于管理关系数据库的标准语言,它包括以下几个主要部分:

1. DDL (Data Definition Language) - 数据定义语言

  • CREATE:用于创建数据库和表。
    CREATE DATABASE myDatabase;
    CREATE TABLE Students (
        id INT PRIMARY KEY,
        name VARCHAR(100),
        age INT
    );
    
  • ALTER:修改现有数据库或表的结构。
    ALTER TABLE Students ADD COLUMN email VARCHAR(50);
    
  • DROP:删除数据库或表。
    DROP TABLE Students;
    DROP DATABASE myDatabase;
    

2. DML (Data Manipulation Language) - 数据操作语言

  • INSERT:向表中插入新记录。
    INSERT INTO Students (id, name, age) VALUES (1, 'Alice', 20);
    
  • UPDATE:更新表中的记录。
    UPDATE Students SET age = 21 WHERE id = 1;
    
  • DELETE:从表中删除记录。
    DELETE FROM Students WHERE id = 1;
    

3. DQL (Data Query Language) - 数据查询语言

  • SELECT:从表中检索数据。
    SELECT * FROM Students;  -- 查询所有学生信息
    SELECT name, age FROM Students WHERE age > 18;  -- 查询年龄大于18的学生姓名和年龄
    

4. DCL (Data Control Language) - 数据控制语言

虽然不是所有数据库系统都严格区分这部分,但通常涉及权限管理。

  • GRANTREVOKE:分配或撤销用户对数据库对象的访问权限。
    GRANT ALL PRIVILEGES ON Students TO 'username'@'localhost';
    REVOKE SELECT ON Students FROM 'username'@'localhost';
    

示例

假设我们有一个Students表,包含学生的ID、姓名和年龄。下面是一些基本操作的SQL示例:

  • 创建表:
    CREATE TABLE Students (
        id INT AUTO_INCREMENT PRIMARY KEY,
        name VARCHAR(100) NOT NULL,
        age INT
    );
    
  • 插入数据:
    INSERT INTO Students (name, age) VALUES ('Bob', 22), ('Charlie', 21);
    
  • 查询数据:
    SELECT * FROM Students WHERE age BETWEEN 20 AND 25;
    
  • 更新数据:
    UPDATE Students SET age = age + 1 WHERE name = 'Bob';
    
  • 删除数据:
    DELETE FROM Students WHERE age > 30;
    

通过这些基础操作,您可以开始管理和查询关系数据库中的数据。随着实践的深入,您将逐渐掌握更复杂的SQL技巧和高级特性。