1 数据库的概述
数据库是一个按照数据结构来组织、存储和管理数据的系统。它可以让用户创建、读取、更新和删除数据的记录。
数据库管理系统(DBMS)是用来管理数据库的计算机系统。DBMS 主要通过数据的保存格式(数据库的种类)来进行分类现阶段主要有以下 5 种类型:
- 层次数据库(Hierarchical Database,HDB)
最古老的数据库之一,它把数据通过层次结构(树形结构)的方式表现出来。层次数据库曾经是数据库的主流,但随着关系数据库的出现和普及,现在已经很少使用了。 - 关系数据库(Relational Database,RDB)
关系数据库是现在应用最广泛的数据库。关系数据库在 1969 年诞生,可谓历史悠久。和 Excel 工作表一样,它也采用由行和列组成的二维表来管理数据。同时,它还使用专门SQL(StructuredQuery Language,结构化查询语言)对数据进行操作。这种类型的 DBMS 称为关系数据库管理系统。比较具有代表性的 RDBMS 有如下 5 种:- Oracle Database:甲骨文公司的RDBMS
- SQL Server:微软公司的RDBMS
- DB2:IBM公司的RDBMS
- PostgreSQL:开源RDBMS
- MySQL:开源的RDBMS
- 面向对象数据库(Object Oriented Database,OODB)
编程语言当中有一种被称为面向对象语言的语言 。把数据以及对数据的操作集合起来以对象为单位进行管理,因此得名。面向对象数据库就是用来保存这些对象的数据库。 - XML数据库(XML Database,XMLDB)
最近几年,XML作为在网络上进行交互的数据的形式逐渐普及起来。XML 数据库可以对 XML 形式的大量数据进行高速处理。 - 键值存储系统(Key-Value Store,KVS)
这是一种单纯用来保存查询所使用的主键(Key)和值(Value)的组合的数据库。具有编程语言知识的读者可以把它想象成关联数组或者散列(hash)。
接下来要的案例和讲解均以 MySQL 为例。
2 表的创建
2.1 数据库的创建
在创建表之前,一定要先创建存储表的数据库。
创建数据库的语法如下:
CREATE DATABASE 数据库名;
其中需要注意的是:
1.SQL 语句以分号( ; )结尾。
2.关键字不区分大小写。
3.单词之间需要用半角空格或者换行进行分割。
这里我们将数据库的名字命名为 school
CREATE DATABASE school;
2.2 表的创建
在创建表之前要切换到需要创建表的数据库中。
切换数据库的语法如下:
USE 数据库名;
创建表的语法如下:
CREATE TABLE 数据库名 (
<列名1> <数据类型> <约束条件>,
<列名2> <数据类型> <约束条件>,
...
);
这里我们将表的名字命名为 students
CREATE TABLE students (
student_id INT NOT NULL PRIMARY KEY,
name VARCHAR(100),
age INT,
gender ENUM('Male', 'Female'),
email VARCHAR(100),
address VARCHAR(255)
);
在这个示例中:
students
是表的名称。student_id
是学生表的主键,使用INT
类型。name
,age
,gender
,email
,address
是其他列,分别存储学生的姓名、年龄、性别、邮箱和地址。NOT NULL
约束确保学号列不为空。PRIMARY KEY
约束将student_id
列指定为主键。ENUM('Male', 'Female')
定义了gender
列的枚举类型,只能存储 ‘Male’ 或 ‘Female’ 中的一个值。
2.3 数据类型
数据类型就是用来定义表中列,常见的有如下几个类型:
数据类型 | 描述 |
---|---|
INT或INTEGER | 4字节整数,范围为-2147483648到2147483647(有符号),0到4294967295(无符号) |
FLOAT | 单精度浮点数 |
DOUBLE | 双精度浮点数 |
CHAR | 固定长度字符串,最多255个字符 |
VARCHAR | 可变长度字符串,最多65535个字符 |
TEXT | 长文本字符串,最多65535个字符 |
ENUM | 枚举类型,用于存储枚举值列表中的一个值 |
DATE | 日期值,格式为YYYY-MM-DD |
TIME | 时间值,格式为HH:MM:SS |
DATETIME | 日期和时间值,格式为YYYY-MM-DD HH:MM:SS |
TIMESTAMP | 时间戳值,存储从1970年1月1日起的秒数 |
YEAR | 年份值,范围为1901到2155 |
BOOLEAN | 布尔值类型,MySQL中没有直接的BOOLEAN类型,通常使用TINYINT(1)来表示 |
2.4 约束条件
各种约束条件来确保数据的完整性、一致性和安全性。常见的有如下几个约束条件:
列级约束:
约束 | 描述 |
---|---|
NOT NULL | 确保列中的值不为空 |
DEFAULT | 为列指定默认值 |
UNIQUE | 确保列中的值唯一 |
AUTO_INCREMENT | 自动增加列的值(自增) |
表级约束:
约束 | 描述 |
---|---|
PRIMARY KEY | 定义表的主键 |
FOREIGN KEY | 定义表的外键 |
这些约束条件可以组合使用,以确保数据的完整性和一致性。例如,可以将 NOT NULL
和 UNIQUE
约束组合使用,以确保列中的值既不为空,又唯一。或者,可以使用 FOREIGN KEY
约束建立表之间的关联关系,以维护数据的引用完整性。