mysql创建数据库和表

大家好,我是程序员小羊!

前言:

一、MySQL数据库和表的基础概念

在深入讲解如何在MySQL中创建数据库和表之前,先了解一些基础概念。

1.1 数据库和表的概念
  • 数据库(Database):数据库是数据存储的容器,存储着相关数据集合。每个数据库可以包含多个表,并为这些表提供结构和组织。

  • 表(Table):表是数据库中的基本存储单位。它由行和列组成,每行表示一条记录,每列表示记录的某个属性。

1.2 关系型数据库的特点

MySQL是一种关系型数据库管理系统(RDBMS),其数据存储在表中,表与表之间可以通过外键关系建立联系。以下是关系型数据库的一些主要特点:

  • 结构化:数据以表格的形式存储,行表示记录,列表示属性。
  • 数据一致性:通过约束条件(如主键、外键)保证数据的完整性和一致性。
  • 数据独立性:逻辑结构与物理存储是分离的,可以通过不同的视图展现数据而不改变底层存储。

二、MySQL创建数据库

创建数据库是使用MySQL的第一步。以下将详细说明创建数据库的多种方式、选项和注意事项。

2.1 创建数据库的基本语法
sql 复制代码
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则区分大小写。

示例

sql 复制代码
CREATE DATABASE my_database
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_general_ci;
2.2.2 数据库选项的持久化

MySQL中的数据库选项一旦设置,便会被持久化在数据库元数据中。创建数据库时的字符集和排序规则是数据库级别的配置,影响其所有表和列的默认字符集和排序规则。

2.3 数据库的管理

创建数据库后,您可以使用多种命令进行管理,如查看已有数据库、修改数据库选项、删除数据库等。

2.3.1 查看数据库
sql 复制代码
SHOW DATABASES;

该命令列出当前MySQL实例中的所有数据库。

2.3.2 查看数据库的字符集和排序规则
sql 复制代码
SHOW CREATE DATABASE my_database;

该命令显示数据库的创建语句,包括字符集和排序规则。

2.3.3 修改数据库的字符集和排序规则
sql 复制代码
ALTER DATABASE my_database
CHARACTER SET = utf8mb4
COLLATE = utf8mb4_general_ci;

该命令允许您在数据库创建后修改其字符集和排序规则。

2.3.4 删除数据库
sql 复制代码
DROP DATABASE [IF EXISTS] my_database;

此命令会删除指定数据库及其所有表和数据。IF EXISTS选项防止因数据库不存在而报错。

三、MySQL创建表

在数据库中创建表是更为精细化的数据管理步骤。创建表时,您需要定义表的结构,包括列的名称、数据类型、约束条件等。

3.1 创建表的基本语法
sql 复制代码
CREATE TABLE 表名 (
    列名 数据类型 [约束条件],
    ...
) [表选项];
  • 列名:列表示表中数据的某一属性,如用户名、邮箱等。
  • 数据类型 :定义列的数据存储类型,如INTVARCHARDATE等。
  • 约束条件 :定义列的限制条件,如NOT NULLUNIQUEPRIMARY 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(无符号)。
    • INTINTEGER: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)

主键是表中唯一标识每一行的列或组合列,不能有重复值,且不能为空。

sql 复制代码
CREATE TABLE users (
    id INT PRIMARY KEY,
    username VARCHAR(50)
);
3.3.2 外键(FOREIGN KEY)

外键用于建立表之间的关系,确保引用的列在父表中存在。

sql 复制代码
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    user_id INT,
    FOREIGN KEY (user_id) REFERENCES users(id)
);
3.3.3 唯一约束(UNIQUE)

唯一约束确保列中的值是唯一的。

sql 复制代码
CREATE TABLE users (
    id INT PRIMARY KEY,
    email VARCHAR(100) UNIQUE
);
3.3.4 非空约束(NOT NULL)

非空约束确保列中的值不能为空。

sql 复制代码
CREATE TABLE users (
    id INT PRIMARY KEY,
    username VARCHAR(50) NOT NULL
);
3.3.5 默认值(DEFAULT)

默认值为列提供默认值,如果插入时未指定该列的值,则使用默认值。

sql 复制代码
CREATE TABLE users (
    id INT PRIMARY KEY,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

结尾

csharp 复制代码
今天这篇文章就到这里了,大厦之成,非一木之材也;大海之阔,非一流之归也。感谢大家观看本文
相关推荐
麦聪聊数据31 分钟前
MySQL并发与锁:从“防止超卖”到排查“死锁”
数据库·sql·mysql
AC赳赳老秦1 小时前
DeepSeek 私有化部署避坑指南:敏感数据本地化处理与合规性检测详解
大数据·开发语言·数据库·人工智能·自动化·php·deepseek
myzshare2 小时前
实战分享:我是如何用SSM框架开发出一个完整项目的
java·mysql·spring cloud·微信小程序
YMatrix 官方技术社区2 小时前
YMatrix 存储引擎解密:MARS3 存储引擎如何超越传统行存、列存实现“时序+分析“场景性能大幅提升?
开发语言·数据库·时序数据库·数据库架构·智慧工厂·存储引擎·ymatrix
辞砚技术录3 小时前
MySQL面试题——索引2nd
数据库·mysql·面试
linweidong3 小时前
C++thread pool(线程池)设计应关注哪些扩展性问题?
java·数据库·c++
墨笔之风4 小时前
java后端根据双数据源进行不同的接口查询
java·开发语言·mysql·postgres
欧亚学术4 小时前
突发!刚刚新增17本期刊被剔除!
数据库·论文·sci·期刊·博士·scopus·发表
oMcLin4 小时前
如何在Oracle Linux 8.4上搭建并优化Kafka集群,确保高吞吐量的实时数据流处理与消息传递?
linux·oracle·kafka
黑白极客4 小时前
怎么给字符串字段加索引?日志系统 一条更新语句是怎么执行的
java·数据库·sql·mysql·引擎