上一篇
2025年8月最新动态:随着AI驱动的自动化数据库优化工具兴起,数据完整性的重要性被重新强调,近期某大型电商平台因缺失外键约束导致订单与用户数据脱节,造成数百万损失,再次证明合理的数据库约束设计仍是系统稳定的基石。
想象一下:财务系统里出现负数库存、用户表里躺着几百个同名同姓的"张三"、订单关联的客户ID根本不存在...这些灾难场景,90%都能用数据库约束提前拦截。
约束的本质是给数据立规矩,它的核心优势:
-- 用户注册时手机号必填 CREATE TABLE users ( user_id INT PRIMARY KEY, phone VARCHAR(20) NOT NULL -- 插入null会直接报错 );
常见坑:字段允许NULL时,要特别处理 WHERE phone=NULL
(要用IS NULL
)
-- 防止员工工号重复 CREATE TABLE employees ( emp_id INT PRIMARY KEY, emp_code VARCHAR(10) UNIQUE, -- 像身份证号这种 name VARCHAR(50) );
特殊技巧:对多字段联合唯一 UNIQUE (dept_id, emp_name)
-- 自增主键标准写法(MySQL) CREATE TABLE orders ( order_id INT AUTO_INCREMENT PRIMARY KEY, -- 自动+1且不可重复 order_date DATETIME NOT NULL );
注意:主键默认自带NOT NULL + UNIQUE双重特性
-- 确保订单属于真实存在的用户 CREATE TABLE orders ( order_id INT PRIMARY KEY, user_id INT, FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE -- 用户删除时同步删订单 );
级联操作选项:
ON DELETE CASCADE
:主表删记录,从表跟着删 ON UPDATE SET NULL
:主表改ID,从表设NULL -- 保证商品价格合理 CREATE TABLE products ( product_id INT PRIMARY KEY, price DECIMAL(10,2) CHECK (price > 0), stock INT CHECK (stock >= 0) );
高级用法:支持正则表达式(如验证邮箱格式)
场景:一个电商SKU表需要:
CREATE TABLE product_skus ( sku_id VARCHAR(20) NOT NULL, shop_id INT NOT NULL, CHECK (sku_id LIKE 'SKU-%'), PRIMARY KEY (sku_id), UNIQUE (shop_id, sku_id), FOREIGN KEY (shop_id) REFERENCES shops(shop_id) );
CONSTRAINT fk_order_user FOREIGN KEY (user_id) REFERENCES users(user_id)
SET FOREIGN_KEY_CHECKS = 0; -- MySQL语法
SHOW ENGINE INNODB STATUS
) 终极心法:把约束看作数据模型的"法律条文"——制定时越严谨,运行时越省心。
本文由 善若南 于2025-08-06发表在【云服务器提供商】,文中图片由(善若南)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://up.7tqx.com/wenda/552059.html
发表评论