access如何设置两个主键:复合主键操作
access如何设置两个主键,本质是创建复合主键,access单张表不能同时存在两个独立主键字段,只能把多个字段组合成一个主键,这个组合叫复合主键,你可以在表设计视图里按住Ctrl多选字段后设置主键,该方式适合订单明细表、关系中间表这类需要两个字段联合唯一的场景,不适合需要单独用某一字段做主键、字段各自独立唯一的表,access不支持一张表内同时存在两套互不关联的主键约束。
access复合主键设计视图操作步骤
打开目标数据表的设计视图,在左侧行选择器位置,点击第一个需要加入主键的字段行,按住键盘Ctrl键,继续点击第二个字段的行选择器,完成两个字段的选中,不要点击字段名称单元格内部,只点击最左边灰色行选择块。选中两个字段之后,在顶部表格工具的设计选项卡里面,点击主键按钮,图标显示为钥匙样式,设置成功后,两个字段行选择器位置都会出现钥匙标记。保存表结构,复合主键就生效,保存时如果表内已有两条记录,这两个字段组合值完全一样,access会弹出保存失败提示,不会强制覆盖原有数据。
两个字段设置成复合主键之后,约束逻辑是两个字段组合的值不能重复,单独其中一个字段的值可以重复,比如订单号和商品编号组成复合主键,同一个订单号可以出现多条不同商品编号记录,同一个商品编号也可以出现在多个订单里面,只有订单号+商品编号完全一样的记录无法新增,这个逻辑和单独主键有明显区别。
access复合主键与独立主键对比
| 类型 | 能否实现 | 唯一约束规则 | 适用场景 |
|---|---|---|---|
| 复合主键 | 可以实现 | 多字段组合唯一,单字段允许重复 | 多对多中间表、明细关联表 |
| 两个独立主键 | 无法实现 | access不支持 | 无适配场景 |
| 主键加唯一索引 | 可以实现 | 一个字段主键,另一个字段单独唯一 | 两个字段各自都不能重复 |
如果你想要两个字段各自都不能重复,不要用复合主键,保留其中一个字段作为主键,给第二个字段新建唯一索引,打开索引窗口,添加索引名称,选定第二个字段,把唯一属性设置为是,不要勾选主索引选项。这种方案可以满足两个字段各自唯一,和复合主键是两套不同约束方案,很多新手会混淆这两种需求。
主键字段不允许为空值,复合主键里面的两个字段,任意一个字段填写Null,整条记录都无法保存,录入数据前要提前设置字段为必填,避免录入报错。如果业务允许其中一个字段留空,复合主键就不适合这套业务,改用主键搭配普通索引。
改复合主键顺序,直接在设计视图选中字段行,拖动行选择器调整上下位置,主键顺序会影响索引排序和查询效率,查询时经常优先匹配的字段放在复合主键第一位,查询速度会有一定提升。
删除复合主键,同样进入表设计视图,选中两个带钥匙标记的字段,再次点击主键按钮,钥匙标记消失,主键约束清除,原有索引也会同步删除,表内数据不会被清除。
access数据库引擎Jet4.0规范里,单表主键只能是一个索引,这个索引可以包含一到多个字段,不存在多个主键索引共存机制。
复合主键字段数量建议控制在2到4个,字段过多会降低新增、更新、关联查询的性能,日常开发优先控制在两个字段。
