Mysql sql复合键帮助

Mysql sql复合键帮助,mysql,sql,key,Mysql,Sql,Key,使用sql,我需要将Lineno和orderline变成一个复合键。到目前为止,我已经知道了如何做到这一点 CREATE TABLE ORDERLINE ( ORDERNO INTEGER NOT NULL, LINENO VARCHAR(4) NOT NULL, NUMBERORDERED NUMERIC DEFAULT '1', QUOTEDPRICE NUMERIC DEFAULT '0.00', CONSTRAINT ORDERLINE_ORDERN

使用sql,我需要将Lineno和orderline变成一个复合键。到目前为止,我已经知道了如何做到这一点

CREATE TABLE ORDERLINE (
   ORDERNO INTEGER NOT NULL, 
   LINENO VARCHAR(4) NOT NULL, 
   NUMBERORDERED NUMERIC DEFAULT '1', 
   QUOTEDPRICE NUMERIC DEFAULT '0.00', 
   CONSTRAINT ORDERLINE_ORDERNO_PK PRIMARY KEY (ORDERNO), 
   CONSTRAINT ORDERLINE_ORDERNO_CC CHECK (ORDERNO BETWEEN 10000 AND 99999), 
   CONSTRAINT ORDERLINE_NUMBERORDERED CHECK (NUMBERORDERED BETWEEN 1 AND 100) 
);
你很接近。注意上面增加了列名

确定哪个字段更可能是任何查询中的前导列,并将其放在第一位。例如如果您经常通过OrderNO、LineNo访问,这将是最好的顺序,但是如果您通过LineNo、OrderNO访问,则按照该顺序进行

你很接近。注意上面增加了列名


确定哪个字段更可能是任何查询中的前导列,并将其放在第一位。例如如果您经常使用OrderNO、LineNo访问,这将是最好的顺序,但是如果您使用LineNo、OrderNO访问,则应遵循该顺序。

如果您已经创建了表,则可以删除现有主键OrderNO,然后在两列上重新创建主键,如下所示:

ALTER TABLE `orderline`  DROP PRIMARY KEY;
ALTER TABLE `orderline`  ADD PRIMARY KEY (`ORDERNO`, `LINENO`);
CREATE TABLE `orderline` (
    ORDERNO INTEGER NOT NULL, 
    LINENO VARCHAR(4) NOT NULL, 
    NUMBERORDERED NUMERIC DEFAULT '1', 
    QUOTEDPRICE NUMERIC DEFAULT '0.00',
    PRIMARY KEY (`ORDERNO`,`LINENO`),
    CONSTRAINT ORDERLINE_ORDERNO_CC CHECK (ORDERNO BETWEEN 10000 AND 99999), 
    CONSTRAINT ORDERLINE_NUMBERORDERED CHECK (NUMBERORDERED BETWEEN 1 AND 100) 
)
或者,您可以在create table语句中定义主键,如下所示:

ALTER TABLE `orderline`  DROP PRIMARY KEY;
ALTER TABLE `orderline`  ADD PRIMARY KEY (`ORDERNO`, `LINENO`);
CREATE TABLE `orderline` (
    ORDERNO INTEGER NOT NULL, 
    LINENO VARCHAR(4) NOT NULL, 
    NUMBERORDERED NUMERIC DEFAULT '1', 
    QUOTEDPRICE NUMERIC DEFAULT '0.00',
    PRIMARY KEY (`ORDERNO`,`LINENO`),
    CONSTRAINT ORDERLINE_ORDERNO_CC CHECK (ORDERNO BETWEEN 10000 AND 99999), 
    CONSTRAINT ORDERLINE_NUMBERORDERED CHECK (NUMBERORDERED BETWEEN 1 AND 100) 
)

如果已经创建了表,则可以删除现有主键ORDERNO,然后在两列上重新创建主键,如下所示:

ALTER TABLE `orderline`  DROP PRIMARY KEY;
ALTER TABLE `orderline`  ADD PRIMARY KEY (`ORDERNO`, `LINENO`);
CREATE TABLE `orderline` (
    ORDERNO INTEGER NOT NULL, 
    LINENO VARCHAR(4) NOT NULL, 
    NUMBERORDERED NUMERIC DEFAULT '1', 
    QUOTEDPRICE NUMERIC DEFAULT '0.00',
    PRIMARY KEY (`ORDERNO`,`LINENO`),
    CONSTRAINT ORDERLINE_ORDERNO_CC CHECK (ORDERNO BETWEEN 10000 AND 99999), 
    CONSTRAINT ORDERLINE_NUMBERORDERED CHECK (NUMBERORDERED BETWEEN 1 AND 100) 
)
或者,您可以在create table语句中定义主键,如下所示:

ALTER TABLE `orderline`  DROP PRIMARY KEY;
ALTER TABLE `orderline`  ADD PRIMARY KEY (`ORDERNO`, `LINENO`);
CREATE TABLE `orderline` (
    ORDERNO INTEGER NOT NULL, 
    LINENO VARCHAR(4) NOT NULL, 
    NUMBERORDERED NUMERIC DEFAULT '1', 
    QUOTEDPRICE NUMERIC DEFAULT '0.00',
    PRIMARY KEY (`ORDERNO`,`LINENO`),
    CONSTRAINT ORDERLINE_ORDERNO_CC CHECK (ORDERNO BETWEEN 10000 AND 99999), 
    CONSTRAINT ORDERLINE_NUMBERORDERED CHECK (NUMBERORDERED BETWEEN 1 AND 100) 
)
复合键?和主复合键一样?或者你真的在追求一个独特的约束?这对我来说并不清楚…就像在复合主键中一样-对我来说似乎是合理的。这可能会给死气沉沉的web基础设施带来一些问题,它们认为您只能拥有单列主键,但实际上您可以拥有多列主键,而且它们在总体上是完全可用的。复合键?和主复合键一样?或者你真的在追求一个独特的约束?这对我来说并不清楚…就像在复合主键中一样-对我来说似乎是合理的。这可能会给死气沉沉的web基础设施带来一些问题,它们认为您只能拥有单列主键,但实际上您可以拥有多列主键,而且它们在一般情况下是完全可用的。