【MySQL】数据库基础:数据库操作与sql中的数据类型
2026/9/20 22:21:06 网站建设 项目流程

文章目录

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

在数据驱动的时代,数据库是存储和管理数据的核心工具。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中已存在的数据库:

SHOWDATABASES;

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

2.1.2 创建数据库

语法:

CREATEDATABASE[IFNOTEXISTS]数据库名[DEFAULTCHARACTERSET字符集][DEFAULTCOLLATE校验规则];
  • IF NOT EXISTS:可选,避免“数据库已存在”报错;
  • CHARACTER SET:指定字符集(推荐utf8mb4,MySQL真正的UTF8,支持复杂中文字符);
  • COLLATE:指定校验规则(使用utf8mb4_0900_ai_ci)。

示例:

-- 创建db_test1数据库(默认字符集)CREATEDATABASEdb_test1;-- 若不存在则创建db_test2(避免报错)CREATEDATABASEIFNOTEXISTSdb_test2;-- 若不存在则创建db_test3,指定字符集为utf8mb4,CREATEDATABASEIFNOTEXISTSdb_test3CHARACTERSETutf8mb4;

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

createdatabase`database`;

2.1.3 使用数据库

  • use 数据库名操作某个数据库前,必须先“切换”到该数据库:
    示例:USE db_test3;,执行后终端会显示“Database changed”。

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

SELECTdatabase();

2.1.4 删除数据库

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

DROPDATABASE[IFEXISTS]数据库名;

示例:

-- 直接删除db_test1(若不存在会报错)DROPDATABASEdb_test1;-- 若存在则删除db_test2(安全写法)DROPDATABASEIFEXISTSdb_test2;

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

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

2.2.1 数值类型(存数字)

数据类型大小说明对应Java类型
BIT[(M)]1-8字节二进制数(M=1时存0/1,对应布尔值)Boolean
TINYINT1字节小整型(范围:-128~127)Byte
INT4字节常用整型(范围:-231~231-1)Integer
BIGINT8字节大整型(存海量数字,如订单号)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
TEXT0-65535字节长文本(存文章内容、备注)String
MEDIUMTEXT0-16777215字节中等长文本(存大段内容)String
BLOB0-65535字节二进制文本(存图片、文件)byte[]

注意

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

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

2.2.3 日期类型(存时间)

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

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

2.3 表操作:5个核心命令

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

2.3.1 查看表结构

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

DESC表名;

示例:查看users表结构:

DESCusers;

执行后会显示:

FieldTypeNullKeyDefaultExtra
idint(11)YESNULL
namevarchar(20)YESNULL
passwordchar(32)YESNULL
  • Feild:字段
  • Type:数据类型
  • Null:当前字段是否允许为空,如果置为No,那么字段中必须有值,不能为空
  • Default:当前列的默认值
  • Extra:其他拓展内容

2.3.2 创建表

语法:

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

示例:创建学生表stu_test

createtableifnotexistsstu_test(idintcomment'学生ID',namevarchar(20)comment'姓名',passwordvarchar(50)comment'密码',ageintcomment'年龄',sexvarchar(1)comment'性别(男/女)',birthdaytimestampcomment'生日',amountdecimal(13,2)comment'余额',resumetextcomment'个人简介');

2.3.3 查看数据库中的表

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

SHOWTABLES;

2.3.4 删除表

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

DROPTABLE[IFEXISTS]表名;

示例:

-- 直接删除stu_test表(若不存在会报错)DROPTABLEstu_test;-- 若存在则删除(安全写法)DROPTABLEIFEXISTSstu_test;

2.3.5 修改表属性

ALTER TABLE :修改已经建好的表的任何结构

  • 修改字段类型、长度、非空、默认值
  • 添加/删除主键、外键、唯一、CHECK 约束
  • 新增/删除/重命名字段
  • 修改表名

1. 修改字段属性(类型/非空/长度)

ALTERTABLE表名MODIFY字段名 类型[约束];

示例:

altertablestudentmodifysnamevarchar(20)notnull;

注意:必须写完整类型+约束

2. 设置/删除默认值

ALTERTABLE表名ALTER字段SETDEFAULT'值';ALTERTABLE表名ALTER字段DROPDEFAULT;

3. 添加主键

ALTERTABLE表名ADDPRIMARYKEY(字段);

4. 添加外键

ALTERTABLE从表ADDFOREIGNKEY(外键字段)REFERENCES主表(主键)ONDELETE删除规则ONUPDATE更新规则;
  • 四大规则
    • CASCADE级联删除/更新
    • SET NULL删除后主表字段设为空
    • RESTRICT禁止删除/更新(默认)
    • NO ACTION同 RESTRICT

5. 添加 CHECK 约束

ALTERTABLE表名ADDCHECK(条件);

示例:

ALTERTABLEstudentADDCHECK(sage>10ANDsage<40);

6. 添加/删除字段

-- 添加字段ALTERTABLE表名ADD字段 类型;-- 删除字段ALTERTABLE表名DROP字段;

7. 重命名字段

ALTERTABLE表名 CHANGE 旧名 新名 类型;

8. 修改表名

ALTERTABLE旧表名RENAME新表名;

注意:

  1. 外键必须字段类型完全一致
  2. 外键可以为空,可以重复
  3. 修改非空前必须确保无 NULL 值
  4. 添加约束时,现有数据必须符合规则
  5. MODIFY必须写完整字段定义

三、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(提交事务)。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询