MySQL基础学习笔记:从数据模型到DDL全掌握

MySQL基础学习笔记:从数据模型到DDL全掌握

  • 一、基础概述与数据模型
    • [1.1 数据库相关概念](#1.1 数据库相关概念)
    • [1.2 MySQL数据模型](#1.2 MySQL数据模型)
  • 二、SQL通用语法及分类
    • [2.1 SQL通用语法](#2.1 SQL通用语法)
    • [2.2 SQL语句分类](#2.2 SQL语句分类)
  • [三、DDL ------数据库操作](#三、DDL ——数据库操作)
    • [3.1 查询数据库](#3.1 查询数据库)
    • [3.2 创建数据库](#3.2 创建数据库)
    • [3.3 使用数据库](#3.3 使用数据库)
    • [3.4 删除数据库](#3.4 删除数据库)
  • 四、DDL------表操作:创建&查询
    • [4.1 创建表](#4.1 创建表)
    • [4.2 查询表](#4.2 查询表)
  • 五、DDL------数据类型及案例
    • [5.1 数值类型](#5.1 数值类型)
    • [5.2 字符串类型](#5.2 字符串类型)
    • [5.3 日期时间类型](#5.3 日期时间类型)
    • [5.4 综合案例](#5.4 综合案例)
  • 六、DDL------表操作:修改&删除
    • [6.1 添加字段](#6.1 添加字段)
    • [6.2 修改字段](#6.2 修改字段)
    • [6.3 删除字段](#6.3 删除字段)
    • [6.4 修改表名](#6.4 修改表名)
    • [6.5 删除表](#6.5 删除表)

一、基础概述与数据模型

1.1 数据库相关概念

  • 数据库(DB):存储数据的仓库,按照一定数据模型组织、长期存储在计算机内,可共享。
  • 数据库管理系统(DBMS):操作数据库管理系统的标准语言,定义了对DBMS进行操作的统一标准。
  • SQL(结构化查询语言):操作数据库管理系统的标准语言,定义了对DBMS进行操作的统一标准。

常见的关系型数据管理系统:MySQL、Oracle、SQL Server、等

1.2 MySQL数据模型

关系型数据库是建立在关系模型基础上的数据库,由多张相互连接的二维表组成。核心概念:

概念 说明
数据库(Database) 存储数据的容器
表(Table) 二维表格,由行和列组成,是数据的基本组织单位
行(Row / Record) 一条记录,代表一条具体数据
列(Column / Field) 一个字段,描述数据的某个属性

数据模型的层级关系:数据库管理系统------>数据库------>表------>行/列

二、SQL通用语法及分类

2.1 SQL通用语法

  1. SQL语句可以单行或多行书写,以分号;结尾
  2. 关键字通常大写(也可以小写),数据库名、表名、列名不区分大小写
  3. 可以使用空格或缩进来增强语句的可读性
  4. 注释方式:
    单行注释:--注释内容 或 # 注释内容
    多行注释:/*注释内容 */

2.2 SQL语句分类

分类 全称 说明
DDL Data Definition Language(数据定义语言) 定义数据库结构:创建数据库、表、修改表结构等
DML Data Manipulation Language(数据操纵语言) 对表中的数据进行增、删、改
DQL Data Query Language(数据查询语言) 查询表中的数据
DCL Data Control Language(数据控制语言) 定义访问权限和安全级别(GRANT / REVOKE)

三、DDL ------数据库操作

3.1 查询数据库

sql 复制代码
-- 查询所有数据库
SHOW DATABASES;

-- 查询当前使用的数据库
SELECT DATABASE();

3.2 创建数据库

sql 复制代码
-- 方式一:直接创建
CREATE DATABASE 数据库名;

-- 方式二:指定字符集(推荐)
CREATE DATABASE 数据库名 DEFAULT CHARSET utf8mb4;

-- 方式三:如果不存在则创建(避免报错)
CREATE DATABASE IF NOT EXISTS 数据库名 DEFAULT CHARSET utf8mb4;

3.3 使用数据库

sql 复制代码
-- 切换到指定数据库
USE 数据库名;

3.4 删除数据库

sql 复制代码
-- 删除数据库
DROP DATABASE 数据库名;

-- 如果存在则删除
DROP DATABASE IF EXISTS 数据库名;

四、DDL------表操作:创建&查询

4.1 创建表

sql 复制代码
CREATE TABLE 表名 (
    字段名1  数据类型 [约束],
    字段名2  数据类型 [约束],
    字段名3  数据类型 [约束]
    -- 注意:最后一行不要加逗号
);

示例 :创建一个学生表

前提:1、先创建一个数据库

sql 复制代码
CREATE DATABASE school;

2、切换到这个数据库

sql 复制代码
USE school;

3、执行建表语句

sql 复制代码
CREATE TABLE student (
    id          INT,
    name        VARCHAR(50),
    age         INT,
    gender      VARCHAR(10),
    birthday    DATE
);

4.2 查询表

sql 复制代码
-- 查询当前数据库所有表
SHOW TABLES;

-- 查询表结构(查看表中有哪些字段、类型、约束)
DESC 表名;

-- 查询建表语句(查看创建表时的完整 SQL)
SHOW CREATE TABLE 表名;

五、DDL------数据类型及案例

MySQL常用数据类型分为三大类:数值类型、字符串类型、日期时间类型

5.1 数值类型

类型 大小 说明
TINYINT 1 字节 小整数值
SMALLINT 2 字节 大整数值
INT / INTEGER 4 字节 大整数值
BIGINT 8 字节 超大整数值
FLOAT 4 字节 单精度浮点数
DOUBLE 8 字节 双精度浮点数
DECIMAL(M, D) --- 精确小数值(常用于金额),M 总位数,D 小数位数

示例: 分数 98.5 用 DECIMAL(4, 1);金额 1999.99 用 DECIMAL(10, 2)

DECIMAL(M, D) 括号里两个数字的含义:

参数 名称 含义
M 精度(precision) 总共保留多少位数字(整数位 + 小数位加起来)
D 标度(scale) 小数点后保留几位

拆解一下:

DECIMAL(4, 1)

  • M = 4:总共 4 位数字
  • D = 1:小数点后 1 位
  • → 整数部分 = 4 - 1 = 3 位
  • → 能存的范围:-999.9 ~ 999.9
  • 98.5 存进去:整数 2 位 + 小数 1 位 = 3 位,没超过 4 位上限 ✅

DECIMAL(10, 2)

  • M = 10:总共 10 位数字
  • D = 2:小数点后 2 位
  • → 整数部分 = 10 - 2 = 8 位
  • → 能存的范围:-99999999.99 ~ 99999999.99(最大约 1 亿)
  • 1999.99 存进去:整数 4 位 + 小数 2 位 = 6 位,远小于 10 位上限 ✅

M 管总共能写几位,D 管小数点后留几位,整数位就是 M 减 D。

5.2 字符串类型

类型 大小 说明
CHAR(M) M 字节 定长字符串,M 为最大长度(0~255),性能高但可能浪费空间
VARCHAR(M) M 字节 变长字符串,M 为最大长度(0~65535),按需分配空间
TEXT --- 长文本数据
BLOB --- 二进制大对象(图片、文件等)

选择建议:

  • 长度固定(如性别、手机号)→ 用 CHAR
  • 长度不固定(如姓名、地址)→ 用 VARCHAR
  • 长文章内容 → 用 TEXT

5.3 日期时间类型

类型 格式 说明
DATE YYYY-MM-DD 日期
TIME HH:MM:SS 时间
YEAR YYYY 年份
DATETIME YYYY-MM-DD HH:MM:SS 日期 + 时间(最常用)
TIMESTAMP YYYY-MM-DD HH:MM:SS 时间戳(会自动更新)

5.4 综合案例

需求:设计一张员工表,包含以下字段:

  • 员工编号(纯数字)
  • 员工姓名(最长 50 字符)
  • 性别(男 / 女,最多 2 个字符)
  • 薪资(精确到小数点后 2 位,最高 999999.99)
  • 出生日期(年月日)
  • 入职时间(年月日时分秒)

建表SQL

sql 复制代码
CREATE TABLE emp (
    id          INT,                          -- 员工编号
    name        VARCHAR(50),                  -- 员工姓名
    gender      CHAR(2),                      -- 性别
    salary      DECIMAL(7, 2),                -- 薪资(总7位,小数2位)
    birthday    DATE,                         -- 出生日期
    entry_date  DATETIME                      -- 入职时间
);

六、DDL------表操作:修改&删除

6.1 添加字段

sql 复制代码
ALTER TABLE 表名 ADD 字段名 数据类型 [约束];

示例: 给员工表增加一个「联系方式」字段

sql 复制代码
ALTER TABLE emp ADD phone VARCHAR(20);

6.2 修改字段

sql 复制代码
-- 修改字段类型
ALTER TABLE 表名 MODIFY 字段名 新数据类型;

-- 修改字段名和字段类型
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型;

示例:

sql 复制代码
-- 将 phone 改名为 tel,并修改类型
ALTER TABLE emp CHANGE phone tel VARCHAR(15);

6.3 删除字段

sql 复制代码
ALTER TABLE 表名 DROP 字段名;

6.4 修改表名

sql 复制代码
-- 方式一
ALTER TABLE 表名 RENAME TO 新表名;

-- 方式二(MySQL 8.0+)
RENAME TABLE 表名 TO 新表名;

6.5 删除表

sql 复制代码
-- 删除表(表结构和数据都会被删除)
DROP TABLE 表名;

-- 如果存在则删除
DROP TABLE IF EXISTS 表名;

TRUNCATE 也可以删除表,但会重新创建表结构(清空数据,保留表结构):

sql 复制代码
TRUNCATE TABLE 表名;
相关推荐
l1t1 小时前
DeepSeek总结的chdb-core v26.7.3发版说明
数据库·clickhouse·oracle
江湖人称菠萝包1 小时前
【Windows】《深入浅出Windows API程序设计:核心编程篇》笔记-Chapter4-进程
windows·笔记
fanged2 小时前
Agent的Skills(TODO)
学习
是隼人2 小时前
buuctf-pwn picoctf_2018_shellcode(ret2shellcode)题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
冰暮流星2 小时前
mysql之表子查询
数据库·mysql
潜创微科技2 小时前
IT6520:USB-C 转 MIPI 高集成控制器,DP 1.4a 转 MIPI 单芯片搞定 4K120 显示
c语言·开发语言·低延迟·掌机·联阳
m4Rk_2 小时前
【论文阅读】Agent 记忆机制(69):STITCH——用上下文意图解决“语义相关但情境错误”的记忆检索
论文阅读·人工智能·学习·开源·github
2601_949950633 小时前
个人在线刷题的工具
学习·考研·小程序·刷题·小程序推荐
Escalating_xu3 小时前
【System V 信号量】从 P/V 原语到 Builder 封装:写出可控、可清理的进程互斥组件
java·linux·开发语言·jvm