Python数据分析与统计分析(MySQL)—DAY6
1. 查看(已创建的)所有数据库.# 2. 创建数据库.# 以默认码表(这里是: UTF8),没有s# 以GBK码表, 创建数据表.# 会报错, 因为数据库存在.# 数据库day01不存在, 就创建, 存在就: 什么都不做.# 完整建库格式.# 采用utf8码表, 创建day03数据库, 如果存在就什么都不做.# 3. 修改数据库 -> 码表, 把day02数据库的码表从 gbk -> utf8#
·
⭐这是黑马Python数据分析笔记
补充:DataGrip软件中查询控制台和“.sql脚本文件”的区别
| 功能 | 查询控制台 | SQL 脚本文件 |
|---|---|---|
| 是否持久化 | ❌ 临时,关闭后可能丢失 | ✅ 保存在磁盘,可长期保留 |
| 是否支持多语句 | ✅ 支持 | ✅ 支持 |
| 是否支持版本控制 | ❌ 不支持 | ✅ 支持(Git 等) |
| 是否适合复杂逻辑 | ⚠️ 适合简单测试 | ✅ 适合完整流程 |
| 是否可重复执行 | ✅ 可快速重试 | ✅ 可批量运行 |
⭐SQL语言不区分大小写
⭐/**/多行注释、--单行注释,#单行注释
一、DDL语句(数据定义语言)
1、操作数据库(database)
# 1. 查看(已创建的)所有数据库.
show databases ;
# 2. 创建数据库.
create database day01; # 以默认码表(这里是: UTF8),没有s
create database day02 character set 'gbk'; # 以GBK码表, 创建数据表.
# create database day01; # 会报错, 因为数据库存在.
create database if not exists day01; # 数据库day01不存在, 就创建, 存在就: 什么都不做.
# 完整建库格式.
create database if not exists day03 charset 'utf8'; # 采用utf8码表, 创建day03数据库, 如果存在就什么都不做.
# 3. 修改数据库 -> 码表, 把day02数据库的码表从 gbk -> utf8
alter database day02 charset 'utf8';
# 4. 删除数据库.
drop database day01;
drop database day02;
drop database day03;
# 5. 查看当前用的是哪个数据库.
select database();
# 6. 切换数据库.
use day02;
# 7. 查看某个指定数据库的数据库的码表.
show create database day01; # 默认: utf-8码表
show create database day02; # 默认: gbk码表
2、操作数据表(table)
# 1. 切库,只有切进去了,后面的表才都是这里面的
use day01;
# 2. 查看(当前数据库中)所有的数据表.
show tables;
# 3. 创建数据表, 学生表: student, 字段为: sid, 学生id name, 学生姓名, age, 学生年龄
/*
[]是可选项
格式:
create table [if not exists] 数据表名(
字段名 数据类型 [约束],
字段名 数据类型 [约束],
字段名 数据类型 [约束],
......
);
*/
create table if not exists student(
sid int, # 学生学号,别忘了逗号!
name varchar(20), # 学生姓名,varchar和string差不多
age int # 学生年龄
);
# 4.修改数据表(名), 从 student -> stu
# 格式: rename table 旧表名 to 新表名;
rename table student to stu;
# 5. 删除数据表.
# 格式: drop table [if exists] 数据表名;
drop table if exists stu;
# 6. 如何查看表结构.
# 格式: desc 数据表名
# show create table student;
desc student;
#desc有查看表结构,也有降序排列
常见的数据类型
🧱 1、数值类型(Numeric)
| 类型 | 说明 | 常见用途 |
|---|---|---|
INT / INTEGER |
整数,通常 4 字节(-21 亿 ~ +21 亿) | 用户 ID、订单数量、计数器 |
BIGINT |
大整数,8 字节(范围极大) | 高并发 ID、时间戳(毫秒)、大金额计数 |
SMALLINT |
小整数,2 字节(-32,768 ~ 32,767) | 状态码、评分(1~5)、年龄 |
TINYINT |
微小整数,1 字节(0~255 或 -128~127) | 布尔标志(0/1)、性别(0=女,1=男) |
DECIMAL(M,D) / NUMERIC |
精确小数,M=总位数,D=小数位数 | 金额、利率、科学计算(不会丢失精度) |
FLOAT / REAL |
单精度浮点数(约 7 位有效数字) | 温度、坐标、近似值 |
DOUBLE / DOUBLE PRECISION |
双精度浮点数(约 15 位有效数字) | 科学计算、高精度测量 |
🔤 2、字符串类型(String / Text)
| 类型 | 说明 | 常见用途 |
|---|---|---|
CHAR(n) |
定长字符串,最多 255 字符 | 国家代码(CHAR(2))、MD5(CHAR(32)) |
VARCHAR(n) |
变长字符串,节省空间 | 用户名、邮箱、地址、标题 |
TEXT |
长文本(MySQL 中最大 65KB) | 评论、简介、日志片段 |
MEDIUMTEXT |
中等长文本(约 16MB) | 文章正文、JSON 数据 |
LONGTEXT |
超长文本(约 4GB) | 富文本内容、备份数据 |
CLOB(Oracle/PostgreSQL) |
Character Large Object,类似 TEXT | 大文本存储 |
注意区分varchar和char的区别
| 特性 | CHAR(n) |
VARCHAR(n) |
|---|---|---|
| 全称 | Character (固定长度) | Variable Character (可变长度) |
| 存储方式 | 定长:总是占用 n 个字符的空间 |
变长:只占用实际字符数 + 长度前缀(1~2 字节) |
| 最大长度 | 通常 255 字符(MySQL) | MySQL 5.0+:65,535 字节(受行总大小限制) |
| 空间效率 | ❌ 浪费空间(如存 "A" 也占 10 字节) | ✅ 节省空间(存 "A" 只占 1+1=2 字节) |
| 读写性能 | ✅ 略快(无需计算长度,直接按偏移读取) | ⚠️ 略慢(需读取长度前缀) |
| 适用场景 | 长度固定、几乎不变的短字符串 | 长度变化大、不确定的字符串 |
📅 3、日期与时间类型(Date & Time)
| 类型 | 格式示例 | 说明 |
|---|---|---|
DATE |
2025-11-24 |
仅日期 |
TIME |
14:30:00 |
仅时间 |
DATETIME |
2025-11-24 14:30:00 |
日期+时间(不带时区) |
TIMESTAMP |
2025-11-24 14:30:00 |
日期+时间(带时区转换,常用于记录创建/更新时间) |
YEAR |
2025 |
年份(较少用) |
🔘 4、布尔与二进制类型
| 类型 | 说明 | 常见用途 |
|---|---|---|
BOOLEAN / BOOL |
真/假(实际常映射为 TINYINT(1)) |
是否激活、是否删除、开关状态 |
BIT(n) |
位字段(n=1~64) | 权限标志(用位运算压缩存储) |
BINARY(n) |
定长二进制数据 | 加密哈希、固定长度 token |
VARBINARY(n) |
变长二进制数据 | 文件缩略图、加密数据 |
BLOB / LONGBLOB |
二进制大对象 | 图片、音频、PDF 等文件(但通常建议存路径而非文件本身) |
🌐 5、特殊/高级类型(部分数据库支持)
| 类型 | 数据库 | 用途 |
|---|---|---|
JSON |
MySQL 5.7+, PostgreSQL | 存储结构化 JSON 数据(支持查询内部字段) |
UUID |
PostgreSQL, SQL Server | 全局唯一标识符(替代自增 ID) |
INET |
PostgreSQL | 存储 IP 地址(IPv4/IPv6) |
ARRAY |
PostgreSQL | 存储数组(如标签列表) |
ENUM |
MySQL | 枚举类型(如 'pending', 'shipped', 'delivered') |
数据约束
在数据类型上进一步做限定
| 约束类型 | 作用层级 | 是否可为空 | 是否可重复 |
|---|---|---|---|
| PRIMARY KEY |
行级(一张表主键只能有一个) |
❌ 不可为空 | ❌ 不可重复 |
| UNIQUE | 行级 | ✅ 可为空 | ✅不允许重复 ,NULL 可重复 |
| NOT NULL | 字段级 | ❌ 不可为空 | 可以 |
| CHECK | 行级/字段级 | 取决于条件 | — |
| DEFAULT | 字段级(默认约束,等价于python中的缺省参数) | 自动填充 | — |
| FOREIGN KEY | 表间关系(多表之间) | 可为空(除非同时设 NOT NULL) | 可重复(多个订单可属于同一用户) |
可以理解为:PRIMARY KEY=UNIQUE+NOT NULL
3、操作字段(Field)
# 细节: 实际开发中, 建表时一般都会多预留2 ~ 7个字段, 当做扩展字段, 将来业务扩展变更等, 可以启用新的字段.
# 1. 切库, 查表.
use day01;
show tables;
# 2. 查看表结构.
desc student;
# 3.给 student表添加字段 address varchar(20)v
# 格式: alter table 表名 add 新列名 数据类型 [约束];
alter table student add address varchar(20) not null;
# 4.修改字段
# 场景1: 只修改数据类型 和 约束.
# 格式: alter table 表名 modify 旧列名 新的数据类型 [新的约束];
alter table student modify address int;
# 场景2: 即修改数据类型 和 约束, 还修改 字段名. address -> addr, varchar(10)
# 格式: alter table 表名 change 旧列名 新列名 新的数据类型 [新的约束];
alter table student change address addr varchar(10) not null;
# 5. 删除字段.
# 格式: alter table 表名 drop 旧列名;
alter table student drop addr;
desc student;
alter table student add `desc` varchar(20) not null;
二、DML语句(数据操作语言)
DML语句详解:
概述:
它叫数据操作语言, 主要是 操作 表数据, 进行 增删改操作的.
实际开发中, 增删改统称为 -> 更新语句.
⭐细节:
进行删除, 修改前, 一定一定一定要备份(或者加where条件), 一个过来人的含泪忠告!
添加数据:
格式:
insert into 数据表名(列名1, 列名2...) values(值1, 值2...);
insert into 数据表名 values(值1, 值2...);
insert into 数据表名 values(值1, 值2...), (值1, 值2..)...;
细节:
1. 要添加的值的个数, 必须和 列名及其类型对应.
2. 如果不写列名, 默认是: 全列名.
修改数据:
格式:
update 数据表名 set 字段名=值, 字段名=值... where 条件;
删除数据:
格式:
delete from 数据表名 where 条件; 不会重置主键id.
truncate table 数据表名; 相当于把表摧毁了, 然后再创建一张一模一样的表, 即: 会重置主键id
1、表数据(data) 增
⭐Ctrl+Alt+L:全部格式化(选中,部分格式化)
# 1. 切库, 查表.
use day01;
show tables;
# 2.创建分类表, 分类id, 分类名, 描述信息.
create table category(
cid int, # 分类id
cname varchar(20), # 分类名
info varchar(100) # 描述信息
);
# 3. 往表中添加数据.
insert into category(cid, cname) values(1, '电脑');
# insert into category(cid, cname) values(1, '电脑', 3); # 报错, 列的个数 和 值的个数不匹配
# insert into category values(2, '手机'); # 报错, 列的个数 和 值的个数不匹配
# insert into category values(3, '拉杆箱'); # 报错, 列的个数 和 值的个数不匹配
insert into category values(2, '手机', '华为手机666');
# 4. 查看表数据.
insert into
category
values
(3, '汽车', '小米'),
(4, '平板', '华为');
# 5. 如何查看全表数据.
select * from category; # * 代表表中 所有的列(列名)
2、表数据(data) 改
# 1. 查看表数据.
select * from category;
# 2. 修改cname='空调', info='格力', cid=3
update category set cname='空调', info='格力'; # 危险, 一次性改所有
update category set cname='汽车', info=null where cid = 1;
3、表数据(data) 删
# 演示 delete from
delete from category where cid = 4;
delete from category; # 一次性删除所有, 不会重置主键id
# 演示 truncate table
truncate table category; # 依次删除所有, 会重置主键id(明天讲解, 目前先了解)
4、扩展_如何备份数据表
# 0. 查看数据表.
show tables;
# 1. 原表
select * from category;
# 2. 场景1: 备份表不存在.
# 格式: create table 备份表名 select * from 原表名 where ...;
create table category_tmp select * from category;
# 3. 场景2: 备份表存在.
# 格式: insert into 备份表名 select * from 原表名 where ...;
insert into category_tmp select * from category where cid <= 3;
# 4. 查看备份表数据.
select * from category_tmp;
# 5. 清空备份表.
delete from category_tmp;
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)