大家好,我是程序员小羊!
前言:
一、MySQL数据库和表的基础概念
在深入讲解如何在MySQL中创建数据库和表之前,先了解一些基础概念。
1.1 数据库和表的概念
-
数据库(Database):数据库是数据存储的容器,存储着相关数据集合。每个数据库可以包含多个表,并为这些表提供结构和组织。
-
表(Table):表是数据库中的基本存储单位。它由行和列组成,每行表示一条记录,每列表示记录的某个属性。
1.2 关系型数据库的特点
MySQL是一种关系型数据库管理系统(RDBMS),其数据存储在表中,表与表之间可以通过外键关系建立联系。以下是关系型数据库的一些主要特点:
- 结构化:数据以表格的形式存储,行表示记录,列表示属性。
- 数据一致性:通过约束条件(如主键、外键)保证数据的完整性和一致性。
- 数据独立性:逻辑结构与物理存储是分离的,可以通过不同的视图展现数据而不改变底层存储。
二、MySQL创建数据库
创建数据库是使用MySQL的第一步。以下将详细说明创建数据库的多种方式、选项和注意事项。
2.1 创建数据库的基本语法
CREATE DATABASE [IF NOT EXISTS] 数据库名
[DEFAULT CHARACTER SET 字符集]
[DEFAULT COLLATE 排序规则];
- IF NOT EXISTS:可选项,表示如果数据库不存在则创建,存在则忽略创建。
- DEFAULT CHARACTER SET:设置数据库的默认字符集,如
utf8mb4
。 - DEFAULT COLLATE:设置字符集的默认排序规则,如
utf8mb4_general_ci
。
2.2 创建数据库的进阶选项
2.2.1 字符集和排序规则
-
字符集(Character Set):字符集决定了数据库能存储的字符种类。常用的字符集有
utf8
(最多支持3个字节)和utf8mb4
(最多支持4个字节,支持表情符号等更多字符)。 -
排序规则(Collation):排序规则决定了字符集的比较和排序方式。
utf8mb4_general_ci
是一种不区分大小写的排序规则,而utf8mb4_bin
则区分大小写。
示例:
CREATE DATABASE my_database
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_general_ci;
2.2.2 数据库选项的持久化
MySQL中的数据库选项一旦设置,便会被持久化在数据库元数据中。创建数据库时的字符集和排序规则是数据库级别的配置,影响其所有表和列的默认字符集和排序规则。
2.3 数据库的管理
创建数据库后,您可以使用多种命令进行管理,如查看已有数据库、修改数据库选项、删除数据库等。
2.3.1 查看数据库
SHOW DATABASES;
该命令列出当前MySQL实例中的所有数据库。
2.3.2 查看数据库的字符集和排序规则
SHOW CREATE DATABASE my_database;
该命令显示数据库的创建语句,包括字符集和排序规则。
2.3.3 修改数据库的字符集和排序规则
ALTER DATABASE my_database
CHARACTER SET = utf8mb4
COLLATE = utf8mb4_general_ci;
该命令允许您在数据库创建后修改其字符集和排序规则。
2.3.4 删除数据库
DROP DATABASE [IF EXISTS] my_database;
此命令会删除指定数据库及其所有表和数据。IF EXISTS
选项防止因数据库不存在而报错。
三、MySQL创建表
在数据库中创建表是更为精细化的数据管理步骤。创建表时,您需要定义表的结构,包括列的名称、数据类型、约束条件等。
3.1 创建表的基本语法
CREATE TABLE 表名 (
列名 数据类型 [约束条件],
...
) [表选项];
- 列名:列表示表中数据的某一属性,如用户名、邮箱等。
- 数据类型:定义列的数据存储类型,如
INT
、VARCHAR
、DATE
等。 - 约束条件:定义列的限制条件,如
NOT NULL
、UNIQUE
、PRIMARY KEY
等。 - 表选项:包括存储引擎、字符集、注释等配置。
3.2 常见的数据类型
MySQL提供了多种数据类型,适用于不同类型的数据存储需求。
3.2.1 数值类型
-
整数类型:
TINYINT
:1字节,范围-128到127或0到255(无符号)。SMALLINT
:2字节,范围-32,768到32,767或0到65,535(无符号)。MEDIUMINT
:3字节,范围-8,388,608到8,388,607或0到16,777,215(无符号)。INT
或INTEGER
:4字节,范围-2,147,483,648到2,147,483,647或0到4,294,967,295(无符号)。BIGINT
:8字节,范围-9,223,372,036,854,775,808到9,223,372,036,854,775,807或0到18,446,744,073,709,551,615(无符号)。
-
浮点类型:
FLOAT
:4字节,单精度浮点数。DOUBLE
:8字节,双精度浮点数。DECIMAL
:定点数,用于高精度的计算,如货币计算。
3.2.2 字符串类型
CHAR(n)
:固定长度的字符串,长度为n
。VARCHAR(n)
:可变长度的字符串,最大长度为n
。TEXT
:长文本数据类型,适合存储大量字符数据。
3.2.3 日期和时间类型
DATE
:仅存储日期,格式为YYYY-MM-DD
。TIME
:仅存储时间,格式为HH:MM:SS
。DATETIME
:存储日期和时间,格式为YYYY-MM-DD HH:MM:SS
。TIMESTAMP
:存储时间戳,通常用于记录数据创建或更新的时间。
3.2.4 JSON类型
JSON
:存储JSON格式数据,允许存储结构化数据,适合动态或多样化数据场景。
3.3 常见的约束条件
3.3.1 主键(PRIMARY KEY)
主键是表中唯一标识每一行的列或组合列,不能有重复值,且不能为空。
CREATE TABLE users (
id INT PRIMARY KEY,
username VARCHAR(50)
);
3.3.2 外键(FOREIGN KEY)
外键用于建立表之间的关系,确保引用的列在父表中存在。
CREATE TABLE orders (
order_id INT PRIMARY KEY,
user_id INT,
FOREIGN KEY (user_id) REFERENCES users(id)
);
3.3.3 唯一约束(UNIQUE)
唯一约束确保列中的值是唯一的。
CREATE TABLE users (
id INT PRIMARY KEY,
email VARCHAR(100) UNIQUE
);
3.3.4 非空约束(NOT NULL)
非空约束确保列中的值不能为空。
CREATE TABLE users (
id INT PRIMARY KEY,
username VARCHAR(50) NOT NULL
);
3.3.5 默认值(DEFAULT)
默认值为列提供默认值,如果插入时未指定该列的值,则使用默认值。
CREATE TABLE users (
id INT PRIMARY KEY,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
结尾
今天这篇文章就到这里了,大厦之成,非一木之材也;大海之阔,非一流之归也。感谢大家观看本文