数据库与SQL基础
大约 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。
- INT 或 INTEGER: 占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) - 数据控制语言
虽然不是所有数据库系统都严格区分这部分,但通常涉及权限管理。
- GRANT 和 REVOKE:分配或撤销用户对数据库对象的访问权限。
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技巧和高级特性。