ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

MySQL 8.4 增删改查(CRUD)入门

MySQL 8.4 增删改查(CRUD)入门 文章目录MySQL 8.4 增删改查CRUD入门一、先准备一个容器库与表二、增Create→ INSERT三、查Read→ SELECT用得最多四、改Update→ UPDATE五、删Delete→ DELETE三个删的区别别搞混六、两个保命习惯七、快速上手路线MySQL 8.4 增删改查CRUD入门CRUD 是数据库最核心的四个操作Create增、Read查、Update改、Delete删。下面用一个贯穿始终的「学生表」带你从零上手。一、先准备一个容器库与表连接数据库8.4 默认使用caching_sha2_password认证老客户端连不上时需要升级驱动或显式启用旧插件mysql-uroot-p-- 建库CREATEDATABASEschoolDEFAULTCHARACTERSETutf8mb4COLLATEutf8mb4_0900_ai_ci;-- 进入库USEschool;-- 建表CREATETABLEstudents(idINTAUTO_INCREMENTPRIMARYKEYCOMMENT学号自增主键,nameVARCHAR(50)NOTNULLCOMMENT姓名,ageTINYINTUNSIGNEDCOMMENT年龄,genderENUM(男,女,未知)DEFAULT未知,scoreDECIMAL(5,2)COMMENT成绩,created_atDATETIMEDEFAULTCURRENT_TIMESTAMP)ENGINEInnoDB;utf8mb4才是真正的 UTF-8支持 emoji别用utf8。主键 AUTO_INCREMENT是标准做法。二、增Create→INSERT-- 1. 指定列插入推荐列顺序变化也不怕INSERTINTOstudents(name,age,gender,score)VALUES(张三,18,男,92.5);-- 2. 一次插入多行效率远高于逐条插INSERTINTOstudents(name,age,gender,score)VALUES(李四,19,女,88.0),(王五,20,男,76.5),(赵六,18,女,59.0);-- 3. 插入冲突时的处理主键/唯一键重复则更新INSERTINTOstudents(id,name,score)VALUES(1,张三,95)ONDUPLICATEKEYUPDATEscoreVALUES(score);MySQL 8.4 中VALUES()在ON DUPLICATE KEY UPDATE里已弃用推荐用新的别名写法INSERTINTOstudents(id,name,score)VALUES(1,张三,95)ASnewONDUPLICATEKEYUPDATEscorenew.score;三、查Read→SELECT用得最多-- 全表查询小表可以大表严禁SELECT*FROMstudents;-- 只查需要的列SELECTname,scoreFROMstudents;-- 条件过滤 WHERESELECT*FROMstudentsWHEREscore60;-- 多条件AND / OR / IN / BETWEEN / LIKESELECT*FROMstudentsWHEREageBETWEEN18AND19ANDnameLIKE张%-- % 任意字符_ 单个字符ANDgenderIN(男,女);-- 排序 分页SELECTname,scoreFROMstudentsORDERBYscoreDESC,idASCLIMIT10OFFSET0;-- 也可写 LIMIT 0, 10-- 去重SELECTDISTINCTageFROMstudents;-- 聚合统计 分组SELECTgender,COUNT(*)AS人数,AVG(score)AS平均分,MAX(score)AS最高分FROMstudentsGROUPBYgenderHAVINGAVG(score)60;-- HAVING 过滤分组WHERE 过滤行-- 空值判断用 IS NULL不能用 NULLSELECT*FROMstudentsWHEREscoreISNULL;完整执行顺序理解这个能解决 90% 的报错FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT四、改Update→UPDATE-- 单列更新UPDATEstudentsSETscore85.5WHEREid2;-- 多列 表达式更新UPDATEstudentsSETscorescore5,ageage1WHEREscore60;-- 给不及格的加 5 分-- 用 ORDER BY LIMIT 精确控制影响范围UPDATEstudentsSETscore100ORDERBYscoreDESCLIMIT1;⚠️血泪教训UPDATE一定要带WHERE。漏写会把整张表的数据全改掉。上线前先跑一遍对应的SELECT确认命中行数。五、删Delete→DELETE-- 删除指定行DELETEFROMstudentsWHEREid4;-- 删除前先验证强烈建议养成习惯SELECT*FROMstudentsWHEREid4;-- 先看清楚DELETEFROMstudentsWHEREid4;-- 再删三个删的区别别搞混语句作用能否回滚速度DELETE FROM t WHERE ...删行可带条件能事务内慢逐行记录日志TRUNCATE TABLE t清空整表重置自增不能快DROP TABLE t连表结构一起删不能快实际业务中更常见的是软删除加一个is_deleted字段用UPDATE标记而不是真删数据。六、两个保命习惯1. 用事务保护改删操作——改错了还能撤回STARTTRANSACTION;UPDATEstudentsSETscore0;-- 糟糕忘了 WHERE-- 发现不对ROLLBACK;-- 一键还原数据毫发无损-- 确认无误时COMMIT;-- 提交永久生效2. 安全模式开启SQL_SAFE_UPDATES后不带WHERE且条件未用主键/索引的UPDATE/DELETE会被直接拒绝SETSQL_SAFE_UPDATES1;七、快速上手路线装一个 MySQL 8.4或用 Dockerdocker run -d -e MYSQL_ROOT_PASSWORD123456 -p 3306:3306 mysql:8.4配一个图形化工具MySQL Workbench或DBeaver写 SQL 有自动补全按INSERT → SELECT → UPDATE → DELETE的顺序把上面每条语句在示例表里跑一遍进阶方向JOIN多表关联、INDEX索引优化、EXPLAIN分析查询性能
返回列表