先说一个关键结论:在Cursor中编写建表SQL时,你输入的关键信息越少,AI自由发挥的空间就越大,生成的DDL也越“敷衍”。字段名被简化、约束被遗漏、注释全部丢失、字符集和存储引擎默认不声明……这些问题几乎每位开发者都会遇到,最终拿到的建表语句要么无法直接使用,要么需要耗费大量时间手动修正。
那么,如何让AI乖乖生成可直接上线的建表SQL?核心不在于它的能力,而在于你的“提问方式”。下面这几个步骤,是经过实战验证最有效的方法。
明确指定字段业务含义与约束类型
在提示词中,每个关键字段后面必须用括号标注其真实的业务角色。例如,“user_id(主键,雪花ID生成,非自增)”“order_no(唯一索引,业务单号,长度固定16位)”“status(枚举值:'pending'/'paid'/'shipped'/'cancelled',禁止NULL)”。这一步绝不能省略——不写明约束类型,Cursor默认只会给你加个NOT NULL,UNIQUE和CHECK它根本不会主动添加。
字段名本身没有语义,AI不可能从“amt”中猜出究竟是“含税金额”还是“优惠后实付”,必须由你亲自把信息灌输进去。比如写:“final_price(用户实际支付金额,已扣券、平台补贴及运费,单位为分,整型存储)”。这样AI才能准确理解你背后的业务意图。
强制保留注释与物理属性
在需求末尾加一条硬性指令:“所有字段必须带COMMENT,且COMMENT内容须与前面业务描述一致;表级COMMENT也要写;字符集用utf8mb4,排序规则用utf8mb4_unicode_ci;存储引擎用InnoDB。”
这一步不可省略。Cursor默认不生成COMMENT,也不声明ENGINE和CHARSET,如果你直接执行,它会继承数据库的默认配置。线上环境一旦出现乱码或性能偏差,你都不知道该从何排查。
用结构化模板框定输出格式
提供一个最小可行模板,让AI严格对齐,效果立竿见影:
CREATE TABLE IF NOT EXISTS `table_name` (
`field1` datatype COMMENT '说明',
`field2` datatype CONSTRAINT_TYPE COMMENT '说明',
PRIMARY KEY (`field1`),
INDEX idx_field2 (`field2`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='表用途';
把这个模板直接粘贴进提示词,并强调:“生成SQL必须完全遵循此结构,字段定义逐行对齐,缩进用全角空格,COMMENT不可合并,不可省略任何标点。”模板就像一个“格式框架”,AI明确知道你的预期后,就不会再随意发挥。
屏蔽干扰项:禁用AI自由发挥
方法一:用分号分层声明不可操作项
“禁止以下行为:① 使用BIGINT代替INT除非明确说明需要超大范围;② 添加GENERATED列或VIRTUAL列;③ 用TEXT替代VARCHAR(255)存短文本;④ 在主键上加AUTO_INCREMENT;⑤ 省略DEFAULT值(除明确允许NULL外,所有字段必须有DEFAULT)。”
方法二:否定式锁定边界
【禁止出现COMMENT 'xxx字段'这类模糊描述,必须写成COMMENT '用户手机号,脱敏存储,仅用于登录校验'】
这几招用下来,Cursor生成的建表SQL基本可以直接拿去上线,省去大量人工校对和修正的功夫。说到底,与其抱怨AI不够聪明,不如先把你的“需求说明书”写清楚。
