数分-MySQL基础01
数分-MySQL基础01
- 基础概念
- MySQL数据库对象
- MySQL的架构
- MySQL客户端和服务器端连接方式
- 命令行连接方式
- 图形化客户端连接
- SQL语言
- 分类
- 通用语法(所有数据库)
- DDL语句
- 数据库DDL
- 数据表DDL
- 表字段DDL
- 数据类型
- 字段约束
基础概念
- 数据库(Database, DB):按照一定数据结构组织、存储、管理数据的集合。
- 数据库管理系统(DBMS)
(1)定义:管理数据库的软件系统,负责数据的增删改查、安全、备份、恢复等。
(2)MySQL(开源免费、轻量级、高性能)就是一个典型的关系型数据库管理系统。
(3)核心功能:数据定义(创建库、表、字段);数据操作(增删改查);数据控制(用户权限、事务);数据备份与恢复 - 关系型数据库(RDBMS):基于关系模型的数据库,用行列二维表格的形式存储数据。
核心特点:
→ 数据以表为单位存储;
→ 表与表之间通过关系关联;
→ 使用SQL(结构化查询语言)操作数据。
MySQL数据库对象
- 表(Table):数据库中最基本的数据存储单位,由行和列组成的二维表格。
- 列(Column)/字段(Field):表中的标题,表示数据的一个属性。
属性:
→ 数据类型(int、varchar、datetime 等);
→ 长度;
→ 是否允许为空(null/not null);
→ 默认值(default);
→ 约束(主键、外键、唯一键等)
例如:用户表中的id、username、password、create_time。 - 行(Row)/记录(Record):表中的水平方向,表示一条完整的数据。
例如:用户表中(1, ‘Ming’, ‘123456’, ‘2026-05-12 20:00:00’)就是一条记录。 - 主键(Primary Key):表中唯一标识一条记录的列或列组合。
特性:
→ 唯一性(主键值不能重复);
→ 非空性(主键值不能为null);
→ 一个表只能有一个主键。
作用:快速定位一条记录;建立表之间的关联。 - 外键(Foreign Key):引用另一个表主键的列,用于建立表与表之间的关系。
- 索引(Index):为了提高数据查询速度而建立的一种数据结构。
MySQL的架构
MySQL 采用客户端-服务器(C/S)架构,分为客户端和服务器两部分:
- 客户端(Client):向服务器发送 SQL 请求,接收并显示结果。
常见客户端:命令行客户端(mysql.exe);图形化客户端(DataGrip、Navicat、DBeaver);编程语言客户端(Python、Java、PHP 等)。 - 服务器端(Server):接收客户端请求,处理 SQL 语句,返回结果。
- 存储引擎(Storage Engine):MySQL 中负责数据存储和提取的底层软件模块。
MySQL 的独特优势:支持插件式存储引擎,可以根据不同需求选择不同的引擎。
最常用的存储引擎:
| 存储引擎 | 特点 | 适用场景 |
|---|---|---|
| InnoDB | 支持事务、行级锁、外键、崩溃恢复 | 默认引擎,绝大多数业务场景 |
| MyISAM | 不支持事务,表级锁,速度快 | 只读数据、临时表、日志表 |
| Memory | 数据存在内存中,速度极快,断电丢失 | 缓存、临时计算 |
MySQL客户端和服务器端连接方式
命令行连接方式
命令格式(远程服务器连接):mysql -h 主机地址 -P 端口号 -u 用户名 -p [密码] [数据库名]
| 参数 | 说明 | 默认值 |
|---|---|---|
| 主机地址(Host) | MySQL 服务器的 IP 地址或域名 | localhost(本地) |
| 端口(Port) | MySQL 服务监听的端口 | 3306 |
| 用户名(Username) | 数据库账号 | root(默认管理员) |
| 密码(Password) | 对应账号的密码 | 安装时设置 |
| 数据库名(Database) | 要连接的具体数据库(可选) | 不指定则连接到服务器 |
连接成功标志:出现mysql>
退出连接:mysql> exit/quit
本地默认连接:mysql -u 用户名 -p[密码] [数据库名]
注意:密码推荐不在命令行明文输入,回车后再输入
例如:
# 密码不在命令行明文输入,回车后再输入mysql-uroot-p# 连接本地的 sakila 数据库mysql-uroot-psakila# 连接 IP 为 192.168.1.100,端口为 3306 的远程服务器mysql-h192.168.1.100-P3306-uanalyst-p图形化客户端连接
MySQL与PyCharm连接(社区版PyCharm-右侧未有Database选项,Python,MySQL均已安装):
- 下载插件Database Navigator,并应用;
- 点击DB Navigator -> Database Browser;
- 点击“+” -> MySQL;
- 在弹出的窗口中依次完成下图中的1-5个步骤;
- 弹出连接成功的窗口,即完成连接。
SQL语言
分类
SQL(Structured Query Language,结构化查询语言)是操作关系型数据库的标准通用语言。
- 数据定义语言(DDL,Data Definition Language)
用于定义数据库对象,包括数据库、数据表、字段/列等。 - 数据操作语言(DML,Data Manipulation Language)
用于操作数据库中的表记录,包括新增、修改、删除。 - 数据查询语言(DQL,Data Query Language)
用于查询数据库中的表记录。 - 数据控制语言(DCL,Data Control Language)
用于管理数据库用户的权限和安全,包括创建用户、授权、撤销权限等。
通用语法(所有数据库)
- SQL 不区分大小写。
关键字:SELECT / select 完全一样。
习惯:关键字大写,表名字段小写,方便阅读。 - 一条语句可以单行或多行书写,但语句结尾必须加分号“;”,代表一条 SQL 结束;
- 单行注释:-- 注释内容(注释内容与符号中间必须有空格);# 注释内容;
- 多行注释:/* 多行注释 */;
- 空格、换行不影响执行,可随意换行排版,增强语句的可读性;
- 字符串必须用单引号’',不用双引号;
- 字段别名、表别名直接空格隔开。
DDL语句
作用:用来定义、修改、删除数据库/表/索引等数据库结构,不操作表里的数据。
核心关键字:create创建,drop删除,alter修改,show查看,truncate清空表结构数据。
数据库DDL
- 创建数据库
# 创建数据库createdatabase数据库名称;# 数据库不存在时,创建数据库createdatabaseifnotexists数据库名称;# 指定编码创建createdatabase数据库名称charset='utf8';createdatabaseifnotexists数据库名称defaultcharactersetutf8mb4;- 查看、使用数据库
# 查看目前所有数据库showdatabases;# 切换使用指定的数据库use数据库名称;# 查看当前正在使用的数据库selectdatabase();# 查看指定数据库创建信息,例如码表showcreatedatabase数据库名称;- 删除数据库
# 不存在则不删除,避免报错dropdatabaseifexists数据库名称注意:删除后数据库内所有数据表与数据全部永久丢失,无法回复。
- 修改数据库字符集
alterdatabase数据库名称defaultcharactersetutf8mb4;数据表DDL
- 创建数据表
-- []中的内容可选createtable[ifnotexists]表名(字段名1数据类型[约束条件],字段名2数据类型[约束条件]);常用字段约束:primary key主键(唯一性,非空),auto_increment自增长,not null非空,unique唯一,default设置默认值
示例:
createtableifnotexistsstudent(-- 字段名1为sid, 数据类型为int, 约束条件为主键、自增长, 添加备注'学生编号'(用户看)sidintprimarykeyauto_incrementcomment'学生编号',-- 字段名2为sname, 数据类型为varchar,最大长度为100, 约束条件非空snamevarchar(100)notnullcomment'学生姓名',ageintdefault18comment'学生年龄',genderchar(2)comment'性别',emailvarchar(50)uniquecomment'邮箱')engine=innodbdefaultcharset=utf8mb4comment'学生信息表';- 查看表相关信息
-- 查看当前库中的所有数据表showtables;-- 快速查看指定数据表的具体结构,包括字段、类型、约束desc表名;-- 查看完整建表语句showcreatetable表名;- 修改表名、删除数据表
-- 修改指定数据表名称altertable表名renameto新表名;renametable表名to新表名;-- 删除指定的数据表droptable[ifexists]表名;注意:删除后表结构和表里所有数据全部清空。
表字段DDL
- 添加表字段
# 格式altertable表名add字段名 数据类型[约束条件];# 示例altertablestudentaddphonechar(11)notnullunique;- 修改字段
——修改字段 数据类型 / 约束
# 格式altertable表名modify字段名 新数据类型[新约束条件];# 示例altertablestudentmodifysnamevarchar(30)notnull;——修改字段 名 + 数据类型/约束
# 格式altertable表名 change 旧字段名 新字段名 数据类型[新约束条件];# 示例altertablestudent change age stu_ageint;注意:修改字段未写入新约束条件时,原有全部约束会直接丢失清空,例如原有的 not null 非空约束消失,变回默认 null 状态。
3. 删除字段
# 格式altertable表名drop字段名;# 示例altertablestudentdropaddress;数据类型
- 数值类型(存数字)
| 类型 | 占用空间 | 使用场景 |
|---|---|---|
| tinyint | 1字节 | 年龄、状态、少量数字 |
| int | 4字节 | 编号、id、数量、常用整数 |
| bigint | 8字节 | 订单号、长数字 |
| float | 4字节 | 普通小数,不精准 |
| double | 8字节 | 双精度小数,不精准 |
| decimal(m,d) | 自定义 | 金额、价格、财务数据,精准小数 |
注意:存钱、金额一律用 decimal,不用 float/double;decimal(10,2) 表示共存10位数,小数占2位。
- 字符串类型(存文字)
| 类型 | 特点 | 用法 |
|---|---|---|
| char(n) | 固定长度 | 手机号、身份证、性别,长度固定 |
| varchar(n) | 可变长度 | 姓名、地址、简介 |
| text | 长文本 | 文章内容、长篇备注 |
区别:char 写多少占多少空间,查询快;varchar 用多少占多少,节省空间。
- 日期时间类型
| 类型 | 格式 | 用法 |
|---|---|---|
| date | yyyy-mm-dd | 只存日期 |
| time | hh:mm:ss | 只存时间 |
| datetime | 日期 + 时间 | 登录时间、创建时间等 |
字段约束
在数据类型限制的基础上额外增加的要求。
- primary key 主键约束
——唯一标识一条数据,非空且唯一,一张表只能有一个主键。 - auto_increment 自增约束
——数值自动往上累加,不用手动赋值,只能用于整型主键。 - unique 唯一约束
——字段值不能重复,但可以为空;手机号、邮箱、身份证常用。 - default 默认值约束
——不填数据时,自动使用默认值。 - foreign key 外键约束
——让两张表建立关联,保证数据完整性,只能在 innodb 引擎使用,从表字段引用主表主键。
即:对关系字段进行约束,当为关系字段赋值时,会到关联的表中查询此值是否存在,若存在则填写成功,不存在则填写失败,抛出异常。 - 空值约束
——null:允许为空,默认状态;
——not null:禁止为空,必须赋值。 - comment 字段 / 表注释
——字段后:comment '说明'给字段添加备注;表末尾:comment '表用途'给整张表加备注。只做阅读提示,不限制数据。
