学习日记-day29-6.13
完成目标:
知识点:
1.创建数据库表
知识点 | 核心内容 | 重点 |
数据库表创建 | CREATE TABLE语法结构、字段定义、数据类型选择 | 字段命名规范与数据类型匹配 |
二维表结构 | 行(记录)与列(字段)的对应关系 | 记录与字段的统计方式差异 |
字段类型 | INT/VARCHAR/CHAR/DATE等类型的应用场景 | VARCHAR与CHAR的存储区别 |
数据库操作流程 | 新建数据库→创建表→查看结构→插入数据 | 字符集(utf8mb4)选择的重要性 |
SQL注释方法 | 单行注释(--/#)与多行注释(/* */) | 不同数据库注释语法差异 |
表结构查看 | DESC命令与SHOW CREATE TABLE的区别 | 两种查看方式的完整度差异 |
命名规范 | t_前缀的行业惯例(可自定义) | 不同公司的命名规范差异 |
数据查询基础 | SELECT语句的基本用法 | 空表查询结果展示形式 |
2.数据库表列类型
知识点 | 核心内容 | 易混淆点/注意事项 | 应用场景 |
整数类型(INT) | 存储整数(如学号、年龄),底层固定占4字节 | 显示长度(括号内数值) 仅影响显示宽度,不限制存储范围(如INT(4)仍可存5位数) | 学号、年龄、计数等整数字段 |
浮点类型(DOUBLE) | 存储小数(如身高、成绩),需指定格式(例:DOUBLE(4,1)表示总位数4,小数位1) | 宽度不可扩展(超出部分会被截断或报错) | 成绩、测量数据等需小数精度的场景 |
字符串类型(CHAR/VARCHAR) | CHAR定长(如性别CHAR(1)),VARCHAR变长(如姓名VARCHAR(20)) | CHAR浪费空间但效率高,VARCHAR按需分配但需额外存储长度信息 | 定长数据(性别)、变长文本(姓名、地址) |
BLOB/TEXT | BLOB存储二进制(音视频),TEXT存储超长文本(超65535字符) | VARCHAR与TEXT界限:VARCHAR上限65535字符 | 文件二进制存储、大段文本内容(如文章) |
日期时间类型 | DATE(年月日)、DATETIME(年月日时分秒)、TIMESTAMP(时间戳,带时区) | TIMESTAMP范围更小(1970-2038),且自动填充当前时间 | 入学日期(DATE)、订单时间(DATETIME)、日志记录(TIMESTAMP) |
主键(Primary Key) | 唯一标识记录的字段(如学号),常用整数类型 | 主键与普通索引的区别:主键不可重复且非空 | 所有需唯一标识的表(学生表、订单表等) |
3.添加数据
知识点 | 核心内容 | 易混淆点/注意事项 |
SQL插入数据基础语法 | INSERT INTO 表名 VALUES (值1, 值2...) 完整字段插入格式 | 分号结尾可省略但建议保留 |
字段显示宽度限制 | INT类型显示宽度超限时自动扩展(底层4字节不变) | 显示宽度≠存储容量限制 |
日期格式多样性 | 支持2022-05-08/2022.5.8/2022/5/8等多种格式 | 不同数据库兼容性差异 |
字符串引号规则 | 单引号和双引号均可用于字符串包裹 | 需保持成对使用 |
动态时间插入 | 可使用NOW()/CURRENT_DATE等函数插入系统时间 | 函数需带括号调用 |
字符长度限制 | VARCHAR(5)限制5个字符而非字节(中文英文同等计算) | 超限报错ERROR 1406 |
部分字段插入 | 必须指定字段名:INSERT INTO 表(字段1,字段2) VALUES (值1,值2) | 未指定字段自动置NULL |
历史记录管理 | 支持CTRL+S保存SQL脚本,左侧查询面板可重复调用 | 多查询窗口需合理命名 |
4.修改,删除数据
知识点 | 核心内容 | 重点 |
数据修改(UPDATE) | 使用UPDATE语句修改表中数据,需配合SET指定字段和WHERE限定条件 | 未加WHERE会导致全表更新(示例中将全表性别误改为“女”) |
条件限制 | WHERE子句必须精确匹配目标记录(如s_no=10修改指定学生年龄) | 多条件组合时注意逻辑运算符优先级 |
大小写规则 | MySQL默认不区分关键字/字段名大小写(如UPDATE与update等效) | 内容值默认不区分大小写(JAVA零一班和java零一班被等同处理) |
数据删除(DELETE) | 使用DELETE FROM语句删除记录,必须包含WHERE条件 | MySQL必须写FROM(Oracle可省略),否则语法报错 |
操作影响验证 | 执行后需检查“影响行数”提示(如影响两条记录)并复查数据 | 批量操作前建议先SELECT验证条件范围 |
5.修改,删除数据库表
知识点 | 核心内容 | 重点 |
DDL与DML的区别 | DDL操作数据库对象(如表结构),DML操作表中数据 | 修改表结构(ALTER) vs 修改数据(UPDATE) |
增加列(ALTER TABLE...ADD) | 语法:ALTER TABLE 表名 ADD 列名 类型(约束) | 列位置控制:FIRST(首列)或 AFTER 列名(指定列后) |
删除列(ALTER TABLE...DROP) | 语法:ALTER TABLE 表名 DROP 列名 | 删除后数据不可恢复,需谨慎操作 |
修改列类型(MODIFY) | 语法:ALTER TABLE 表名 MODIFY 列名 新类型 | 仅修改类型定义,不改变列名(如DOUBLE→FLOAT) |
修改列名与类型(CHANGE) | 语法:ALTER TABLE 表名 CHANGE 旧列名 新列名 新类型 | 同时修改列名和类型(需兼容现有数据) |
删除表(DROP TABLE) | 语法:DROP TABLE 表名 | 整表删除(含数据) vs DELETE仅删数据 |
数值类型精度控制 | 如DOUBLE(5,2):总位数5,小数位2 | 超范围数据会四舍五入(如1234.567→1234.57) |
6.非外键约束(1)
7.非外键约束(2)
知识点 | 核心内容 | 重点 |
约束分类 | 分为列级约束(定义在列后)和表级约束(定义在表后逗号分隔) | 主键约束可同时作为列级或表级约束,但自增约束仅支持列级 |
主键约束(表级) | 语法:CONSTRAINT PK_stu PRIMARY KEY(sno),支持联合主键(多字段) | 约束命名规范(PK_表名)与错误提示关联性 |
检查约束(表级) | 语法:CONSTRAINT CK_stu_sex CHECK(sex IN('男','女')),支持多条件(如年龄范围) | 命名区分性(如CK_stu_sex vs CK_stu_age)便于定位错误 |
唯一约束(表级) | 语法:CONSTRAINT EQ_stu_email UNIQUE(email),错误提示包含约束名 | 与主键约束的异同(唯一性但允许多个NULL) |
非空/默认约束 | 仅支持列级:NOT NULL、DEFAULT '男' | 自增约束(AUTO_INCREMENT)必须列级定义 |
约束验证测试 | 通过插入数据触发错误(主键冲突、检查约束违反、唯一性冲突) | 错误信息解析:CK_stu_sex直接定位性别字段问题 |
8.非外键约束(3)
知识点 | 核心内容 | 重点 |
SQL约束类型 | 主键约束、非空约束、默认约束、唯一约束、检查约束、自增约束 | 自增约束必须建立在主键基础上 |
创建表时添加约束 | 通过CREATE TABLE语句直接定义各类约束 | NOT NULL和DEFAULT约束只能在创建表时定义 |
表创建后添加约束 | 使用ALTER TABLE语句添加主键、唯一、检查等约束 | 修改自增属性需用MODIFY COLUMN语法 |
约束验证方法 | DESC查看表结构/设计表界面验证约束生效情况 | 需注意多约束同时添加时的分号分隔 |
常见错误处理 | 自增字段未设置主键导致的定义错误 | 解决方案:先添加主键再设置自增 |
约束修改流程 | 1. 删除表 2. 重建基础表 3. 逐步添加约束 | 注意操作顺序对数据完整性的影响 |
9.外键约束
知识点 | 核心内容 | 重点 |
外键约束概念 | 表中字段依赖另一表主键/唯一键的值,被依赖表称主表/父表,设置外键的表称从表/子表 | 外键必须引用主键或唯一约束字段 |
外键作用 | 解决数据冗余问题(如班级名称重复)、确保数据修改一致性(如批量更新班级名称) | 外键关系建立前后的数据操作差异 |
外键约束语法 | 仅支持表级约束:CONSTRAINT 约束名 FOREIGN KEY(字段) REFERENCES 主表(主键) | 列级约束与表级约束的区别(vs主键约束) |
外键验证案例 | 1. 禁止插入不存在的班级编号; 2. 禁止删除被引用的班级记录 | 违反约束时的典型报错信息分析 |
表关系设计 | 班级表(主表)与学生表(子表)的1:N关系设计 | 字段命名规范(不要求同名但需类型一致) |
10.外键策略
知识点 | 核心内容 | 重点 |
外键约束 | 外键用于建立表间关联,确保数据完整性 | 主从表删除顺序(先删从表再删主表) |
外键策略一(NO ACTION) | 默认策略,禁止直接操作关联数据 | 需手动处理关联数据(如置空外键字段)才能操作主表 |
外键策略二(CASCADE) | 级联操作,主表变更自动同步到从表 | 删除班级会连带删除所有学生记录(高风险操作) |
外键策略三(SET NULL) | 置空操作,主表变更将从表外键置为NULL | 解散班级时保留学生记录但清空班级字段 |
策略组合应用 | 可混合使用不同策略(如UPDATE CASCADE + DELETE SET NULL) | 需根据业务场景选择(朋友圈删除vs班级解散) |
实践演示 | 通过班级-学生案例演示三种策略效果 | 注意错误演示顺序(先展示NO ACTION再引入新策略) |