当前位置: 首页 > backend >正文

MySQL 入门

本文目标:用最简单、最容易理解的方式讲清楚 mysql 里面的关键语法,特别是数据表的字段类型,比如 int、unsigned、varchar 等到底什么意思。


一、基础概念

  • 数据库(database):存放表的容器,可以理解为一个文件夹。

  • 表(table):由行(row,记录)和列(column,字段)组成的二维结构。

  • 字段(column):表中的一列,决定了存储数据的类型,比如 int 表示整数,varchar 表示字符串。

  • 记录(row):表中的一条具体数据。


二、sql 的几类

  • ddl(data definition language):定义数据库和表的结构,比如 create、alter、drop。

  • dml(data manipulation language):操作数据,比如 select、insert、update、delete。

  • dcl(data control language):权限相关,比如 grant、revoke。

  • tcl(transaction control language):事务控制,比如 start transaction、commit、rollback。


三、create 示例

创建数据库:

create database blog_db character set utf8mb4 collate utf8mb4_unicode_ci;
use blog_db;

创建数据表:

create table users (id int unsigned not null auto_increment, -- 整数,非负,自增username varchar(50) not null,           -- 可变长度字符串,最多 50 个字符email varchar(100) not null unique,      -- 唯一值password_hash varchar(255) not null,     -- 存密码的加密串is_active tinyint(1) not null default 1, -- 状态字段,1 表示启用,0 表示禁用created_at datetime default current_timestamp,primary key (id),index idx_username (username)
) engine=innodb default charset=utf8mb4;

四、常见数据类型(解释到位)

数值类型

  • int:整数类型,通常用来存放 id。范围是 -2147483648 到 2147483647。

  • int unsigned:无符号整数,范围变为 0 到 4294967295。unsigned 的意思就是不允许负数。

  • tinyint:非常小的整数,范围 -128 到 127。如果加上 unsigned,就是 0 到 255。经常用来表示布尔值或状态。

  • bigint:特别大的整数,范围比 int 大得多,适合存放大数据量的 id。

  • decimal(m,n):精确小数,常用于存金额。m 是总位数,n 是小数位数。

字符串类型

  • char(n):固定长度字符串,比如 char(2) 存省份简称 “bj”。

  • varchar(n):可变长度字符串,常见类型,比如 varchar(50) 表示最多存 50 个字符。

  • text:长文本,适合存放文章内容。不同大小有 text、mediumtext、longtext。

日期和时间

  • date:只存日期,比如 2025-08-26。

  • datetime:存日期和时间,不随时区变化。

  • timestamp:存日期和时间,会跟随时区自动转换。

布尔

  • mysql 里没有真正的 boolean 类型,通常用 tinyint(1) 表示,0 为 false,1 为 true。

其他

  • blob:二进制大对象,存文件或图片。

  • enum:枚举类型,只能选定几个固定值,比如 enum('draft','published','deleted')。


五、约束和索引

  • primary key:主键,唯一且不能为空。

  • unique:唯一约束,保证该列不能有重复。

  • not null:不能是空值。

  • default:设置默认值。

  • foreign key:外键,用来建立表与表之间的联系。

索引(index)是用来加快查询速度的,但会增加写入成本。


六、crud 示例

  • 插入:

insert into users (username, email, password_hash) 
values ('zhangsan','zhang@example.com','123456');
  • 查询:

select id, username from users where is_active = 1 order by created_at desc limit 10;
  • 更新:

update users set is_active = 0 where id = 1;
  • 删除:

delete from users where id = 1;

七、join 示例

select p.id, p.title, u.username
from posts p
inner join users u on p.user_id = u.id
where p.status = 'published';
  • inner join:两边都有才显示。

  • left join:左边一定显示,右边没有就 null。


八、事务

start transaction;
update users set is_active = 0 where id = 2;
rollback; -- 回滚
commit;   -- 提交

事务保证多条语句要么全部执行成功,要么全部不生效。


九、小结

  • int:整数,常用于主键。

  • unsigned:无符号,表示不允许负数,范围翻倍。

  • varchar:变长字符串。

  • tinyint:小整数,常当作布尔。

  • decimal:存钱最安全。

  • datetime / timestamp:时间戳字段。

http://www.xdnf.cn/news/18777.html

相关文章:

  • 虚幻5引擎:我们是在创造世界,还是重新发现世界?
  • 基于SpringBoot的摄影跟拍约拍预约系统【2026最新】
  • [CS创世SD NAND征文] CS创世CSNP1GCR01-AOW在运动控制卡中的高可靠应用
  • 神经网络参数量计算详解
  • 如何用企业微信AI解决金融运维难题,让故障响应快、客服专业度高
  • EB_NXP_K3XX_GPIO配置使用
  • 深入理解内存屏障(Memory Barrier):现代多核编程的基石
  • Java大厂面试实战:从Spring Boot到微服务架构的全链路技术拆解
  • 破解VMware迁移难题的技术
  • 给高斯DB写一个函数实现oracle中GROUPING_ID函数的功能
  • 性能瓶颈定位更快更准:ARMS 持续剖析能力升级解析
  • Docker Compose 使用指南 - 1Panel 版
  • NR --PO计算
  • nginx代理 flink Dashboard、sentinel dashboard的问题
  • 数据结构(时空复杂度)
  • 论文阅读(四)| 软件运行时配置研究综述
  • 推荐系统学习笔记(十四)-粗排三塔模型
  • iOS 审核 4.3a【二进制加固】
  • Web前端开发基础
  • sdi开发说明
  • Python在语料库建设中的应用:文本收集、数据清理与文件名管理
  • WebSocket简单了解
  • HIVE的高频面试UDTF函数
  • window电脑使用OpenSSL创建Ed25519密钥
  • 用wp_trim_words函数实现WordPress截断部分内容并保持英文单词完整性
  • docker 安装nacos(vL2.5.0)
  • 一次失败的Oracle数据库部署
  • 2025.8.26周二 在职老D渗透日记day26:pikachu文件上传漏洞 前端验证绕过
  • 解决qt5.9.4和2015配置xilinx上位机报错问题
  • Linux 详谈Ext系列⽂件系统(一)