Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 列的组合如表';s主键_Mysql_Sql - Fatal编程技术网

Mysql 列的组合如表';s主键

Mysql 列的组合如表';s主键,mysql,sql,Mysql,Sql,是否可以将列的组合作为表的主键? 例如,我有: ID_1 | ID_2 | ID_3 | ID_4 |值 ----- ------ ------ ------ ------ 11A 1 2 1 B 211A 我希望ID_1、ID_2、ID_3和ID_4的值组合为主键。 谢谢这是可能的,但应该避免。主键应该是一列 CREATE TABLE `test`.`new_table` ( `id_1` INT NOT NULL, `id_2` INT NOT NULL, `id

是否可以将列的组合作为表的主键?
例如,我有:

ID_1 | ID_2 | ID_3 | ID_4 |值
-----   ------  ------   ------   ------
11A
1 2 1 B
211A

我希望ID_1、ID_2、ID_3和ID_4的值组合为主键。
谢谢

这是可能的,但应该避免。主键应该是一列

CREATE TABLE `test`.`new_table` (
  `id_1` INT NOT NULL,
  `id_2` INT NOT NULL,
  `id_3` INT NOT NULL,
  `id_4` INT NOT NULL,
  `value` VARCHAR(45) NULL,
  PRIMARY KEY (`id_1`, `id_2`, `id_3`, `id_4`));
-第一个解决方案:

  CREATE TABLE IF NOT EXISTS tableName (    
       id_1 INT NOT NULL,
       id_2 INT NOT NULL,
       id_3 INT NOT NULL,
       id_4 INT NOT NULL,
       value VARCHAR(10) NULL,
       CONSTRAINT pk PRIMARY KEY (id_1, id_2, id_3, id_4)
    );
-第二种解决方案:
使用关联表。

是。定义主键时只需包括所有列,例如
CREATE TABLE T(ID_1 INT….主键(ID_1,ID_2,ID_3,ID_4))仅供参考,它们被称为复合主键复合主键之间有什么区别?或者复合主键用于SQL,复合主键用于MySQL?没有区别,它们是同义词。为什么要避免?我左右为难,要么选择正确的CREATETABLE语法,要么选择它前面的废话,这会让代码变得更复杂。例如,自动递增PK.re避免,这实际上取决于用例和数据。出于什么原因必须避免?增加PK是什么意思?从OP的代码中可以明显看出,他并没有使用合成键列。另一个表B有链接到A的FK。B的FK看起来如何?您的数据库,您的查询将看起来很复杂。