如何在创建表时创建外键

时间:2019-02-19 09:15:00

标签: php mysql sql

我正在尝试使用连接的外键创建自动表创建,以便可以在同一表中显示数据。创建表时,应该如何在表之间建立连接。

注意:这些表是同时创建的。首先按Palle_tbs进行加载。

我不知道在本例中是否可以使用Alter Table,因为这些表是同时创建的。如果是这样,我该怎么办?

我试图像这样引用另一个表。

addcsv.php这就是我调用方法的地方。 $lastest_filename没有使用atm。

$csv->createPalleTable($latest_filename);
$csv->insertPalleTable($latest_filename, array_map("toNumber", fgetcsv($openfile, 1000, ";")));

$csv->createHoejde1($latest_filename);
$csv->insertHoejde1Table($latest_filename, array_map("toNumber", fgetcsv($openfile, 1000, ";")));

我可以添加更多代码,只是认为这会使它更加混乱。

Csv.php这是我制作表格和插入内容的地方。

编辑我已经更新了我的尝试

我希望这些表可以连接。我得到的结果是FK_palle = 0

public function createHoejde1($latest_filename){
    return $this->db->toList("CREATE TABLE IF NOT EXISTS `csvHoejde1`( 
        id INT(11) AUTO_INCREMENT PRIMARY KEY,
        Name VARCHAR(50), 
        Datum VARCHAR(50), 
        Property VARCHAR(50), 
        Criterion VARCHAR(50),
        Type VARCHAR(50), 
        Nominal DECIMAL(10,2),    
        Actual DECIMAL(10,2),     
        Tolminus DECIMAL(10,2),   
        Tolplus DECIMAL(10,2),    
        Dev DECIMAL(10,2),
        FK_palle INT(11) REFERENCES Palle_tbs(`id`))
      ");}

public function insertHoejde1Table($latest_filename ,$getdata){
    return $this->db->toList("INSERT INTO `csvHoejde1` (`Name`, `Datum`, `Property`, `Criterion`, `Type`, `Nominal`, `Actual`,`Tolminus`,`Tolplus`,`Dev`)
    VALUES (:Name, :Datum, :Property, :Criterion, :Type, :Nominal, :Actual, :Tolminus, :Tolplus, :Dev)",
        [
        ':Name' => $getdata[0],
        ':Datum'=> $getdata[1],
        ':Property'=> $getdata[2],
        ':Criterion'=> $getdata[3],
        ':Type'=> $getdata[4],
        ':Nominal'=> $getdata[5], 
        ':Actual'=> $getdata[6],  
        ':Tolminus'=> $getdata[7],
        ':Tolplus'=> $getdata[8], 
        ':Dev'=> $getdata[9]      
        ]
    );}

public function createPalleTable($latest_filename){
    return $this->db->toList("CREATE TABLE IF NOT EXISTS `Palle_tbs`(
        id INT(11) AUTO_INCREMENT PRIMARY KEY,
        Palle_nr VARCHAR(50), 
        Varenummer VARCHAR(50), 
        Ordre_nummer VARCHAR(50), 
        Operatoer VARCHAR(50), 
        Maskine_nr VARCHAR(50), 
        Raavare_batch_nr VARCHAR(50), 
        Dato_ur_stillet VARCHAR(50), 
        Klokke_fuldsvejst VARCHAR(50), 
        Fuldstoebning_af_klokke VARCHAR(50),
        Afgratning_af_overflade VARCHAR(50), 
        Vaegt DECIMAL(10,2))
      ");}

public function insertPalleTable($latest_filename ,$palledata){
    return $this->db->toList("INSERT INTO `Palle_tbs` (`Palle_nr`, `Varenummer`, `Ordre_nummer`, `Operatoer`, `Maskine_nr`,
     `Raavare_batch_nr`, `Dato_ur_stillet`,`Klokke_fuldsvejst`,`Fuldstoebning_af_klokke`,`Afgratning_af_overflade`,`Vaegt`)
    VALUES (:Palle_nr, :Varenummer, :Ordre_nummer, :Operatoer, :Maskine_nr, :Raavare_batch_nr, :Dato_ur_stillet,
     :Klokke_fuldsvejst, :Fuldstoebning_af_klokke, :Afgratning_af_overflade, :Vaegt)",
        [

        ':Palle_nr' => $palledata[0],
        ':Varenummer'=> $palledata[1],
        ':Ordre_nummer'=> $palledata[2],
        ':Operatoer'=> $palledata[3],
        ':Maskine_nr'=> $palledata[4],
        ':Raavare_batch_nr'=> $palledata[5],
        ':Dato_ur_stillet'=> $palledata[6],
        ':Klokke_fuldsvejst'=> $palledata[7],
        ':Fuldstoebning_af_klokke'=> $palledata[8],
        ':Afgratning_af_overflade'=> $palledata[9],
        ':Vaegt'=> $palledata[10]
        ]
    );}

结果为FK_palle为0

1 个答案:

答案 0 :(得分:1)

如果要将table1引用到table2中,则需要首先创建table1

在声明中,您写了FOREIGN KEY (FK_product) REFERENCES product_tb(product_id)product_id表中没有product_tb字段,您打算引用主键id

然后,您可以使用FOREIGN KEY约束。

例如:

CREATE TABLE table1
( --         ^----^-----------------------------------+
    id INT(6) NOT NULL PRIMARY KEY AUTO_INCREMENT, -- |
--  ^^---------------------------------------------------+
    someData VARCHAR(255)                          -- |  |
);                                                 -- |  |
                                                   -- |  |
CREATE TABLE table2                                -- |  |
(                                                  -- |  |
    id INT(6) NOT NULL PRIMARY KEY AUTO_INCREMENT, -- |  |
    otherData VARCHAR(255), --                        |  |
    table1_id INT(6), --               +--------------+  |
 -- ^-------^-------+                  |      +----------+
    --              |                  |      |
    --          v-------v            v----v  vv
    FOREIGN KEY table1_id REFERENCES table1 (id)
);

然后,您可以使用INSERT查询来填充表格。对于table2,您必须插入外键,它不会自动完成(您的数据库不知道所引用的行)

例如:

INSERT INTO table1
--         id
--         |    someData
--         |       |
--      v-----v  v---v
VALUES (DEFAULT, "foo"),
       (DEFAULT, "bar");

INSERT INTO table2
--         id
--         |    otherData
--         |        |          table1_id
--         |        |              |
--      v-----v  v------v          v
VALUES (DEFAULT, "blabla",         1),
       (DEFAULT, "bob the sponge", 1),
       (DEFAULT, "John Smith",     1),
       (DEFAULT, "forty two",      2),
       (DEFAULT, "Hello world",    2);