只定义 Column 和类型还不够。用户 id 不能重复,邮箱可能必须填写,订单的 user_id 应真正对应某位用户。数据库用 约束(Constraint) 在写入时检查这些基本规则。规则由数据库执行,即使应用程序发出错误 SQL,也有机会拒绝无效数据。
PRIMARY KEY — 唯一识别 Row
NOT NULL — 必须提供值
UNIQUE — 禁止重复
DEFAULT — 缺省时自动填写
FOREIGN KEY — 保护引用关系
PRIMARY KEY:一条 Row 的唯一身份
主键用于唯一识别 Row。id 为主键时,数据库通常拒绝重复 id,主键也不能为 NULL,否则无法稳定引用记录。许多 Table 都使用 id 作为主键。
NOT NULL:这个值不能缺少
name、商品价格或订单日期若是业务必需信息,可以声明 NOT NULL。可选 phone 则允许 NULL 更合理。约束应反映真实需求,而不是给所有字段机械加上相同规则。
UNIQUE:业务值不得重复
UNIQUE 也强调唯一,但它通常保护 email、username、order_number 等业务字段;PRIMARY KEY 则代表 Row 本身的身份。
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(200) NOT NULL UNIQUE
);DEFAULT:省略时使用初始值
如果 INSERT 没提供字段,DEFAULT 可以自动给出常见初始状态,例如 is_active 为 TRUE、订单 status 为 pending 或 quantity 为 1。这减少重复输入,但仍应确保默认值符合业务含义。
FOREIGN KEY:引用必须真实存在
外键确保一张 Table 的引用指向另一张 Table 已存在的 Row。orders.user_id 引用 users.id 后,user_id 999 若不存在,数据库可以拒绝这条订单,避免“订单属于不存在用户”的矛盾。
CREATE TABLE orders (
id INT PRIMARY KEY,
user_id INT NOT NULL,
quantity INT NOT NULL DEFAULT 1,
status VARCHAR(50) DEFAULT 'pending',
FOREIGN KEY (user_id) REFERENCES users(id)
);约束不是全部业务逻辑。 “VIP 用户每天最多下 10 个订单”无法仅靠 NOT NULL 或 UNIQUE 表达,通常仍需应用逻辑或更高级数据库机制。约束是保护唯一性、必填值、默认值和引用关系的基础防线。
为 Table 加上数据规则
每行选择类型,并决定是否为主键、必填或唯一。可填写 DEFAULT;外键使用 table(column) 格式。设计器会检查重复字段、多个主键、可空主键和不完整外键。
INTEGERCREATE TABLE products ( id INTEGER PRIMARY KEY );
结构卡和 CREATE TABLE 会随设计实时更新。把 products 与 orders 设计得更可靠
改进上一节的两张表:两表 id 都设为主键;products 的 name、price 必填,product_code 唯一,stock 默认 0;orders 的 user_id 必填并引用 users(id),order_date 必填,status 默认 pending。说明 category 为什么可以保持可空。