首页 > 解决方案 > 创建或修改具有组合主键的表,由它们的 3 个属性构成

问题描述

我正在尝试创建一个表,并将其具有的 3 个属性作为主键。

代码如下:

CREATE TABLE compra 
(
    dni_cli VARCHAR2(50),
    cod_prod NUMBER(10) NOT NULL,
    cantidad NUMBER (10),
    CONSTRAINT pk_compra PRIMARY KEY (dni_cli, cod_prod, cantidad);
    CONSTRAINT pelicula_codigo_prod_fg FOREIGN KEY (cod_prod) REFERENCES producto(cod_prod),
    CONSTRAINT pelicula_codigo_cli_fg FOREIGN KEY (dni_cli) REFERENCES cliente(dni)
);

我还尝试先创建表,然后添加约束以创建组合 PRIMARY KEY 与更改表,但不起作用。

代码是这样的:

ALTER TABLE CONSTRAINT pk_compra PRIMARY KEY (dni_cli, cod_prod, cantidad);

标签: sqloracle

解决方案


如果主键已经存在,则需要删除该键:

ALTER TABLE compra drop constraint pk_compra;

然后添加密钥:

ALTER TABLE compra add constraint pk_compra primary key (city_id, buildtime, time);

如果表中不存在主键,则只需使用第二个命令行。

同样正如@stickybit 指出的那样,您的表有错误。这是没有错误的代码:

CREATE TABLE compra (
dni_cli VARCHAR2(50),
cod_prod NUMBER(10) NOT NULL,
cantidad NUMBER (10),
CONSTRAINT pk_compra PRIMARY KEY (dni_cli,cod_prod,cantidad), --<<change here
CONSTRAINT pelicula_codigo_prod_fg FOREIGN KEY (cod_prod) REFERENCES producto(cod_prod),
CONSTRAINT pelicula_codigo_cli_fg FOREIGN KEY  (dni_cli) REFERENCES cliente(dni));

推荐阅读