网站建站建设郑州网站seo推广
2026/3/16 12:48:48 网站建设 项目流程
网站建站建设,郑州网站seo推广,网站后台这么做,手机赚钱项目大全网《MySQL表的创建与约束#xff1a;定义结构化数据的存储载体》 MySQL 中的表#xff08;Table#xff09; 是关系型数据库最核心的存储单元#xff0c;它定义了数据的结构、类型、约束和关系#xff0c;是结构化数据的物理载体。 本篇从最基础的建表语法开始#xff0c…《MySQL表的创建与约束定义结构化数据的存储载体》MySQL 中的表Table是关系型数据库最核心的存储单元它定义了数据的结构、类型、约束和关系是结构化数据的物理载体。本篇从最基础的建表语法开始逐步深入到各种约束Constraint的定义、使用场景、常见写法和生产注意事项帮助你系统掌握“如何正确地定义一张表”。1. 基本建表语法CREATE TABLE最简洁的建表语句CREATETABLEusers(idBIGINTNOTNULLAUTO_INCREMENTCOMMENT主键ID,usernameVARCHAR(50)NOTNULLCOMMENT用户名,emailVARCHAR(100)UNIQUECOMMENT邮箱,ageINTDEFAULT18COMMENT年龄,statusTINYINTDEFAULT1COMMENT状态1正常 0禁用,created_atDATETIMEDEFAULTCURRENT_TIMESTAMPCOMMENT创建时间,updated_atDATETIMEDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMPCOMMENT更新时间,PRIMARYKEY(id))ENGINEInnoDBDEFAULTCHARSETutf8mb4COLLATEutf8mb4_unicode_ciCOMMENT用户表;关键组成部分拆解部分说明2025–2026 推荐写法表名建议使用小写 下划线风格users、order_items避免使用 MySQL 关键字、避免驼峰列定义列名 数据类型 约束 默认值 COMMENT每列都加 COMMENT文档化主键几乎所有业务表都应该有主键通常是自增 IDBIGINT AUTO_INCREMENT存储引擎InnoDB事务、行锁、外键 vs MyISAM只读快照99% 场景选 InnoDB字符集 排序规则utf8mb4支持 emoji unicode_ci不区分大小写utf8mb4_unicode_ci主流表注释COMMENT‘xxx’必须写方便后期维护2. MySQL 常用数据类型速查业务最常用分类类型字节数适用场景推荐替代8.0整数TINYINT1状态、性别、是否删除0/1—INT / INTEGER4普通 ID、数量—BIGINT8主键、自增 ID、雪花算法 ID—浮点数DECIMAL(p,s)—金额、汇率绝对不要用 FLOAT/DOUBLEDECIMAL(18,4) 或更高精度字符串VARCHAR(n)n1~n4用户名、标题、邮箱—CHAR(n)n固定长度如身份证号、邮编很少用TEXT / MEDIUMTEXT可变文章正文、富文本—时间DATETIME8创建/更新时间精确到秒—TIMESTAMP4带时区、自动更新8.0 推荐 DATETIMEDATE / TIME3/3只存日期/时间—其他JSON可变非结构化扩展字段8.0 非常常用ENUM(‘男’,‘女’)1~2性别、状态枚举值少时建议用 TINYINT 注释代替金额字段强烈建议amountDECIMAL(18,4)COMMENT金额精确到4位小数3. 表级约束 vs 列级约束约束类型语法位置作用是否允许 NULL典型写法示例NOT NULL列级该列不允许为空否username VARCHAR(50) NOT NULLDEFAULT列级默认值—status TINYINT DEFAULT 1AUTO_INCREMENT列级自增必须是主键或唯一键—id BIGINT AUTO_INCREMENTUNIQUE列级 / 表级值唯一允许 NULL但 NULL 算不同允许 1 个 NULLemail VARCHAR(100) UNIQUEPRIMARY KEY列级 / 表级主键唯一 非空否PRIMARY KEY (id)FOREIGN KEY表级外键约束—FOREIGN KEY (user_id) REFERENCES users(id)CHECK表级8.0自定义校验—CHECK (age 18)推荐生产级建表模板2025–2026 主流写法CREATETABLEorders(idBIGINTNOTNULLAUTO_INCREMENTCOMMENT订单ID,user_idBIGINTNOTNULLCOMMENT用户ID,order_noVARCHAR(32)NOTNULLUNIQUECOMMENT订单号,amountDECIMAL(18,4)NOTNULLDEFAULT0.0000COMMENT订单金额,statusTINYINTNOTNULLDEFAULT0COMMENT订单状态0待支付 1已支付 2已发货 3已完成 -1已取消,created_atDATETIMENOTNULLDEFAULTCURRENT_TIMESTAMPCOMMENT创建时间,updated_atDATETIMENOTNULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMPCOMMENT更新时间,PRIMARYKEY(id),UNIQUEKEYuk_order_no(order_no),INDEXidx_user_id_status(user_id,status),-- 复合索引CONSTRAINTfk_orders_userFOREIGNKEY(user_id)REFERENCESusers(id)ONDELETERESTRICTONUPDATECASCADE)ENGINEInnoDBDEFAULTCHARSETutf8mb4COLLATEutf8mb4_unicode_ciCOMMENT订单主表;4. 约束行为总结表非常重要约束INSERT 空值UPDATE 违反DELETE 主表记录推荐场景NOT NULL报错报错—必填字段UNIQUE允许 NULL报错—业务唯一键如订单号、邮箱PRIMARY KEY报错报错—表的主标识FOREIGN KEY允许若从表允许 NULL报错若违反引用完整性可配置RESTRICT / CASCADE / SET NULL强关联关系8.0 推荐CHECK报错报错—年龄、状态范围8.05. 生产环境常见约束最佳实践2025–2026每张表必须有主键绝大多数情况用 BIGINT 自增业务唯一约束用 UNIQUE KEY而非靠应用层控制外键约束谨慎使用大型系统建议用逻辑外键 应用层保证字段必须加 COMMENT团队协作必备统一字符集utf8mb4_unicode_ci支持 emoji、不区分大小写金额字段永远用 DECIMAL绝不用 FLOAT/DOUBLE时间字段用 DATETIMETIMESTAMP 有 2038 年问题且时区敏感状态字段用 TINYINT 注释比 ENUM 更灵活6. 快速自测题巩固下列哪种写法可以让status字段默认值为 1 且不允许为空A. status TINYINT DEFAULT 1B. status TINYINT NOT NULL DEFAULT 1C. status TINYINT DEFAULT 1 NOT NULL想让email字段唯一但允许为空应该怎么写UNIQUE KEY uk_email (email)想在删除用户时自动删除该用户的所有订单应该在外键上写什么ON DELETE CASCADE答案1-B2-正确UNIQUE 允许一个 NULL3-ON DELETE CASCADE如果你想继续深入某个部分比如外键 vs 逻辑外键 的生产取舍复合唯一索引 vs 唯一键 的区别JSON 字段在表结构中的最佳实践建表规范检查工具SQL 审核告诉我我们继续展开

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询