大家好,我是程序员小羊!
在深入讲解如何在MySQL中创建数据库和表之前,先了解一些基础概念。
数据库(Database):数据库是数据存储的容器,存储着相关数据集合。每个数据库可以包含多个表,并为这些表提供结构和组织。
表(Table):表是数据库中的基本存储单位。它由行和列组成,每行表示一条记录,每列表示记录的某个属性。
MySQL是一种关系型数据库管理系统(RDBMS),其数据存储在表中,表与表之间可以通过外键关系建立联系。以下是关系型数据库的一些主要特点:
创建数据库是使用MySQL的第一步。以下将详细说明创建数据库的多种方式、选项和注意事项。
CREATE DATABASE [IF NOT EXISTS] 数据库名
[DEFAULT CHARACTER SET 字符集]
[DEFAULT COLLATE 排序规则];
utf8mb4
。utf8mb4_general_ci
。字符集(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;
MySQL中的数据库选项一旦设置,便会被持久化在数据库元数据中。创建数据库时的字符集和排序规则是数据库级别的配置,影响其所有表和列的默认字符集和排序规则。
创建数据库后,您可以使用多种命令进行管理,如查看已有数据库、修改数据库选项、删除数据库等。
SHOW DATABASES;
该命令列出当前MySQL实例中的所有数据库。
SHOW CREATE DATABASE my_database;
该命令显示数据库的创建语句,包括字符集和排序规则。
ALTER DATABASE my_database
CHARACTER SET = utf8mb4
COLLATE = utf8mb4_general_ci;
该命令允许您在数据库创建后修改其字符集和排序规则。
DROP DATABASE [IF EXISTS] my_database;
此命令会删除指定数据库及其所有表和数据。IF EXISTS
选项防止因数据库不存在而报错。
在数据库中创建表是更为精细化的数据管理步骤。创建表时,您需要定义表的结构,包括列的名称、数据类型、约束条件等。
CREATE TABLE 表名 (
列名 数据类型 [约束条件],
...
) [表选项];
INT
、VARCHAR
、DATE
等。NOT NULL
、UNIQUE
、PRIMARY KEY
等。MySQL提供了多种数据类型,适用于不同类型的数据存储需求。
整数类型:
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
:定点数,用于高精度的计算,如货币计算。CHAR(n)
:固定长度的字符串,长度为n
。VARCHAR(n)
:可变长度的字符串,最大长度为n
。TEXT
:长文本数据类型,适合存储大量字符数据。DATE
:仅存储日期,格式为YYYY-MM-DD
。TIME
:仅存储时间,格式为HH:MM:SS
。DATETIME
:存储日期和时间,格式为YYYY-MM-DD HH:MM:SS
。TIMESTAMP
:存储时间戳,通常用于记录数据创建或更新的时间。JSON
:存储JSON格式数据,允许存储结构化数据,适合动态或多样化数据场景。主键是表中唯一标识每一行的列或组合列,不能有重复值,且不能为空。
CREATE TABLE users (
id INT PRIMARY KEY,
username VARCHAR(50)
);
外键用于建立表之间的关系,确保引用的列在父表中存在。
CREATE TABLE orders (
order_id INT PRIMARY KEY,
user_id INT,
FOREIGN KEY (user_id) REFERENCES users(id)
);
唯一约束确保列中的值是唯一的。
CREATE TABLE users (
id INT PRIMARY KEY,
email VARCHAR(100) UNIQUE
);
非空约束确保列中的值不能为空。
CREATE TABLE users (
id INT PRIMARY KEY,
username VARCHAR(50) NOT NULL
);
默认值为列提供默认值,如果插入时未指定该列的值,则使用默认值。
CREATE TABLE users (
id INT PRIMARY KEY,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
今天这篇文章就到这里了,大厦之成,非一木之材也;大海之阔,非一流之归也。感谢大家观看本文