【MySQL】数据库基础

文章目录

  • 一、数据库基础:理解数据管理的核心工具
    • [1.1 为什么需要数据库?文件存储的局限性](#1.1 为什么需要数据库?文件存储的局限性)
    • [1.2 数据库分类:关系型与非关系型的核心区别](#1.2 数据库分类:关系型与非关系型的核心区别)
  • 二、MySQL基础操作:数据库与表的核心命令
    • [2.1 数据库操作:4个核心命令](#2.1 数据库操作:4个核心命令)
      • [2.1.1 显示所有数据库](#2.1.1 显示所有数据库)
      • [2.1.2 创建数据库](#2.1.2 创建数据库)
      • [2.1.3 使用数据库](#2.1.3 使用数据库)
      • [2.1.4 删除数据库](#2.1.4 删除数据库)
    • [2.2 常用数据类型:选择合适的"容器"](#2.2 常用数据类型:选择合适的“容器”)
      • [2.2.1 数值类型(存数字)](#2.2.1 数值类型(存数字))
      • [2.2.2 字符串类型(存文本)](#2.2.2 字符串类型(存文本))
      • [2.2.3 日期类型(存时间)](#2.2.3 日期类型(存时间))
    • [2.3 表操作:5个核心命令](#2.3 表操作:5个核心命令)
      • [2.3.1 查看表结构](#2.3.1 查看表结构)
      • [2.3.2 创建表](#2.3.2 创建表)
      • [2.3.3 查看数据库中的表](#2.3.3 查看数据库中的表)
      • [2.3.4 删除表](#2.3.4 删除表)
    • [2.4 实战案例:创建商店数据库](#2.4 实战案例:创建商店数据库)
  • 三、SQL分类:理解命令的"身份"

在数据驱动的时代,数据库是存储和管理数据的核心工具。MySQL作为开源且功能强大的关系型数据库,被广泛应用于各类项目。

一、数据库基础:理解数据管理的核心工具

在学习MySQL之前,我们首先要明确"为什么需要数据库"以及"数据库有哪些类型",这是后续操作的理论基础。

1.1 为什么需要数据库?文件存储的局限性

很多人会疑惑:"用文件就能存数据,为什么还要数据库?"其实文件存储存在4个关键问题,而数据库恰好能解决这些痛点:

  • 安全性差:文件可直接被修改或删除,缺乏权限控制和数据保护机制;
  • 查询管理难:若要从大量文件中筛选特定数据(如"查询2023年所有订单"),需手动编写复杂逻辑,效率极低;
  • 海量数据支撑弱:文件系统难以高效存储和读取百万级、千万级数据;
  • 程序控制不便:在代码中操作文件需处理IO流、格式解析等问题,且不支持多程序并发访问。

数据库本质是"更高效管理数据的软件",不仅能解决上述问题,还支持远程连接(因此也叫"数据库服务器"),存储介质可灵活选择磁盘(持久化)或内存(临时缓存)。

1.2 数据库分类:关系型与非关系型的核心区别

数据库主要分为关系型数据库(RDBMS)非关系型数据库(NoSQL),二者适用场景差异极大,需根据业务需求选择:

对比维度 关系型数据库 非关系型数据库
是否支持SQL 是(基于标准SQL,仅实现细节有差异) 不强制,多数不基于SQL
事务支持 支持(ACID特性,确保数据一致性) 不支持(适合对一致性要求低的场景)
复杂操作 支持(如多表关联、子查询) 不支持(仅适合简单数据操作)
海量读写效率 低(结构固定,读写需解析表关系) 高(灵活存储,专为高并发设计)
基本结构 基于二维表(行+列),结构固定 灵活(键值对、文档、图等)
适用场景 业务系统(如电商订单、OA系统,OLTP联机事务处理) 数据缓存、统计分析(如用户行为分析,OLAP联机分析处理)

MySQL是一个关系型数据库,简单来说,关系型数据库就是二位表格以及他们之间的联系组成的数据组织。

主流数据库举例

  • 关系型
    • Oracle:收费,适合大型复杂项目(如ERP系统);
    • MySQL:开源免费,轻量易用,适合中小型项目(重点);
    • SQL Server:微软产品,需部署在Windows Server,中大型项目常用。
  • 非关系型
    • 键值对:Redis(缓存常用)、Memcached;
    • 文档型:MongoDB(存储JSON格式数据);
    • 列族:HBase(大数据场景);
    • 图型:Neo4j(社交网络关系分析)。

二、MySQL基础操作:数据库与表的核心命令

掌握 "数据库创建/删除""表创建/删除" 是MySQL实战的第一步,以下命令需在MySQL命令行(mysql -u root -p登录后)执行。

2.1 数据库操作:4个核心命令

2.1.1 显示所有数据库

查看当前MySQL中已存在的数据库:

sql 复制代码
SHOW DATABASES;

执行后会显示系统默认数据库自定义数据库。系统默认数据库记录关于MySQL自身的配置,性能,系统变量信息

2.1.2 创建数据库

语法:

sql 复制代码
CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARACTER SET 字符集]  [DEFAULT COLLATE 校验规则];
  • IF NOT EXISTS:可选,避免"数据库已存在"报错;
  • CHARACTER SET:指定字符集(推荐utf8mb4,MySQL真正的UTF8,支持复杂中文字符);
  • COLLATE:指定校验规则(使用utf8mb4_0900_ai_ci)。

示例:

sql 复制代码
-- 创建db_test1数据库(默认字符集)
CREATE DATABASE db_test1;

-- 若不存在则创建db_test2(避免报错)
CREATE DATABASE IF NOT EXISTS db_test2;

-- 若不存在则创建db_test3,指定字符集为utf8mb4,
CREATE DATABASE IF NOT EXISTS db_test3 CHARACTER SET utf8mb4;

注意: MySQL允许使用关键字命名数据库名,但是必须用反引号``引起来

sql 复制代码
create database `database`;

2.1.3 使用数据库

  • use 数据库名 操作某个数据库前,必须先"切换"到该数据库:

    示例:USE db_test3;,执行后终端会显示"Database changed"。

  • select database() 显示当前选择或操作的是哪个数据库

sql 复制代码
SELECT database();

2.1.4 删除数据库

警告:删除数据库会清空所有表和数据,且无法恢复!

语法:

sql 复制代码
DROP DATABASE [IF EXISTS] 数据库名;

示例:

sql 复制代码
-- 直接删除db_test1(若不存在会报错)
DROP DATABASE db_test1;

-- 若存在则删除db_test2(安全写法)
DROP DATABASE IF EXISTS db_test2;

2.2 常用数据类型:选择合适的"容器"

创建表时,需为每个字段指定"数据类型",以下是MySQL中最常用的类型,对应Java类型也已标注,方便开发对接:

2.2.1 数值类型(存数字)

数据类型 大小 说明 对应Java类型
BIT[(M)] 1-8字节 二进制数(M=1时存0/1,对应布尔值) Boolean
TINYINT 1字节 小整型(范围:-128~127) Byte
INT 4字节 常用整型(范围:-231~231-1) Integer
BIGINT 8字节 大整型(存海量数字,如订单号) Long
FLOAT(M,D) 4字节 单精度浮点(会丢失精度,不推荐) Float
DOUBLE(M,D) 8字节 双精度浮点(精度比FLOAT高,但仍有误差) Double
DECIMAL(M,D) 可变 精确浮点(适合金额、汇率,无精度丢失) BigDecimal

注意

  • 数值类型可加unsigned(无符号,仅存正数),但不推荐------若int存不下,直接用BIGINT更稳妥;
  • 金额类字段必须用DECIMAL(M,D)(如DECIMAL(13,2)表示最大13位数字,2位小数),避免精度丢失。

2.2.2 字符串类型(存文本)

数据类型 大小范围 说明 对应Java类型
VARCHAR(SIZE) 0-65535字节 可变长度字符串(存短文本,如姓名、手机号) String
TEXT 0-65535字节 长文本(存文章内容、备注) String
MEDIUMTEXT 0-16777215字节 中等长文本(存大段内容) String
BLOB 0-65535字节 二进制文本(存图片、文件) byte[]

注意

  • size表示字符串长度,不是字节大小。也就是说,定义varchar(10),最多可以存放10个字符,多了就会报错。
  • utf8mb4编码集,1个字符最多占4个字节,根据具体使用情况用1-4字节表示1个字符。一个varchar最多可以存放 16383 (65535/4)个字符

推荐用法 :短文本用VARCHAR(如姓名用VARCHAR(20)),长文本用TEXT,文件优先存在服务器磁盘,数据库只存文件路径(避免数据库过大)。

2.2.3 日期类型(存时间)

数据类型 大小 说明 对应Java类型
DATETIME 8字节 范围1000-9999年,不随时区变化(常用) java.sql.Timestamp / java.util.Date
TIMESTAMP 4字节 范围1970-2038年,自动转换时区 java.sql.Timestamp / java.util.Date

选择建议 :若业务涉及多时区(如跨国项目),用TIMESTAMP;否则用DATETIME(范围更广,无2038年限制)。

2.3 表操作:5个核心命令

表是数据库中"存储数据的基本单元",操作前需先通过USE 数据库名切换到目标数据库。

2.3.1 查看表结构

查看表的字段名、类型、是否允许为空等信息:

sql 复制代码
DESC 表名;

示例:查看users表结构:

sql 复制代码
DESC users;

执行后会显示:

Field Type Null Key Default Extra
id int(11) YES NULL
name varchar(20) YES NULL
password char(32) YES NULL
  • Feild:字段
  • Type:数据类型
  • Null:当前字段是否允许为空,如果置为No,那么字段中必须有值,不能为空
  • Default:当前列的默认值
  • Extra:其他拓展内容

2.3.2 创建表

语法:

sql 复制代码
CREATE TABLE [IF NOT EXISTS] 表名 (
    字段1 数据类型 [COMMENT '字段说明'],
    字段2 数据类型 [COMMENT '字段说明'],
    ...
);
  • IF NOT EXISTS:可选,避免"表已存在"报错;
  • COMMENT:可选,添加字段说明(方便后期维护)只是描述性的内容,对表结构没有影响。

示例:创建学生表stu_test

sql 复制代码
CREATE TABLE IF NOT EXISTS stu_test (
    id INT COMMENT '学生ID',
    name VARCHAR(20) COMMENT '姓名',
    password VARCHAR(50) COMMENT '密码',
    age INT COMMENT '年龄',
    sex VARCHAR(1) COMMENT '性别(男/女)',
    birthday TIMESTAMP COMMENT '生日',
    amount DECIMAL(13,2) COMMENT '余额',
    resume TEXT COMMENT '个人简介'
);

2.3.3 查看数据库中的表

查看当前数据库下所有表:

sql 复制代码
SHOW TABLES;

2.3.4 删除表

警告:删除表会清空表中所有数据,且无法恢复!

语法:

sql 复制代码
DROP TABLE [IF EXISTS] 表名;

示例:

sql 复制代码
-- 直接删除stu_test表(若不存在会报错)
DROP TABLE stu_test;

-- 若存在则删除(安全写法)
DROP TABLE IF EXISTS stu_test;

2.4 实战案例:创建商店数据库

为帮助大家巩固操作,这里以"商店购物系统"为例,创建包含"商品、客户、购买订单"三个表的数据库:

sql 复制代码
-- 1. 创建数据库bit32mall(指定utf8字符集)
CREATE DATABASE IF NOT EXISTS bit32mall DEFAULT CHARACTER SET utf8;

-- 2. 切换到bit32mall数据库
USE bit32mall;

-- 3. 创建商品表goods
CREATE TABLE IF NOT EXISTS goods (
    goods_id INT COMMENT '商品编号',
    goods_name VARCHAR(32) COMMENT '商品名称',
    unitprice INT COMMENT '单价(单位:分)',
    category VARCHAR(12) COMMENT '商品分类',
    provider VARCHAR(64) COMMENT '供应商名称'
);

-- 4. 创建客户表customer
CREATE TABLE IF NOT EXISTS customer (
    customer_id INT COMMENT '客户编号',
    name VARCHAR(32) COMMENT '客户姓名',
    address VARCHAR(256) COMMENT '客户地址',
    email VARCHAR(64) COMMENT '电子邮箱',
    sex BIT COMMENT '性别(0=女,1=男)',
    card_id VARCHAR(18) COMMENT '身份证号'
);

-- 5. 创建购买表purchase
CREATE TABLE IF NOT EXISTS purchase (
    order_id INT COMMENT '订单号',
    customer_id INT COMMENT '客户编号(关联customer表)',
    goods_id INT COMMENT '商品编号(关联goods表)',
    nums INT COMMENT '购买数量'
);

三、SQL分类:理解命令的"身份"

操作数据库要使用SQL,这即使一个标准,也是一门语言。

  • DDL(data definition language, 数据定义语言) :维护数据结构(创建/删除数据库、表),代表命令:CREATEDROPALTER
  • DML(data manipulation language, 数据操纵语言) :操作表中数据(新增/修改/删除数据),代表命令:INSERTUPDATEDELETE
  • DQL(data query language, 数据查询语言) :查询表中数据(最常用),代表命令:SELECT(单独从DML中拆分出来);
  • DCL(data control language, 数据控制语言) :权限管理和事务控制,代表命令:GRANT(授权)、REVOKE(回收权限)、COMMIT(提交事务)。
相关推荐
ChuHsiang2 小时前
【剑指MySQL】数据库基础(1)
数据库·mysql
九皇叔叔3 小时前
Docker 镜像维护指南:从配置优化到 MySQL 实战运行
mysql·adb·docker
muxin-始终如一3 小时前
MySQL分区分表实现方法详解
数据库·mysql·adb
奥尔特星云大使3 小时前
mysql高可用架构之MHA部署(三)——故障转移后邮件告警配置(保姆级)
mysql·dba·高可用·mha·邮件告警
Tomorrow'sThinker3 小时前
第三章 · 数据库管理与视频路径获取
数据库·oracle
IndulgeCui3 小时前
【金仓数据库产品体验官】Mycat适配KES分库分表体验
数据库
长安城没有风3 小时前
从入门到精通【Redis】初识Redis哨兵机制(Sentinel)
java·数据库·redis·后端
玉面小白龍(peng)4 小时前
sql优化进阶
数据库
Adorable老犀牛4 小时前
Linux-db2look创建表结构详细参数
linux·数据库·db2