Php 如何在创建表时创建外键
我正在尝试创建一个连接外键的自动表创建,以便在同一个表中显示数据。我应该如何在创建表时建立表之间的连接 注意:这些表是同时创建的。在装载顺序中,首先使用Php 如何在创建表时创建外键,php,mysql,sql,Php,Mysql,Sql,我正在尝试创建一个连接外键的自动表创建,以便在同一个表中显示数据。我应该如何在创建表时建立表之间的连接 注意:这些表是同时创建的。在装载顺序中,首先使用Palle\u tbs 我不知道这个例子中是否可以使用ALTERTABLE,因为表是同时创建的。如果是这样,我应该怎么做 我试着这样引用另一张表 addcsv.php这是我调用方法的地方。 $lastest\u文件名未被atm使用 $csv->createPalleTable($latest_filename); $csv->inse
Palle\u tbs
我不知道这个例子中是否可以使用ALTERTABLE,因为表是同时创建的。如果是这样,我应该怎么做
我试着这样引用另一张表
addcsv.php
这是我调用方法的地方。
$lastest\u文件名
未被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]
]
);}
如果要将
表1
引用到表2
,首先需要创建表1
在您的声明中,您写了外键(FK\u产品)引用了product\u tb(product\u id)
。product\u tb
表中没有product\u id
字段,您的意思是引用主键id
然后,可以使用外键
约束
例如:
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 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);
然后,您可以使用INSERT
查询来填充表格。对于表2,您必须插入外键,它不会自动完成(您的DB不知道引用了哪一行)
例如:
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 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);
当您尝试创建外键时,引用的表必须存在。这很有意义。我会先尝试创建表格,然后尝试使用引用。我真的认为这很有意义,但就是不起作用。你能告诉我我做错了什么吗?如果neededit给了我一个0,那么表Palle\u tbs已经存在。这是一个
CREATE table
语句,而不是SELECT
。你不应该得到结果。如果成功创建了表,是否签入了您最喜欢的数据库管理工具(phpMyAdmin/MySQL Workbench)?它与其他选项卡没有任何关系。(使用phpMyAdmin),结果仍然为0的意思是它没有连接到id。因此,当数据插入到表中时,它会显示0,而不是palle\u tbs.id的id号。您是否在插入查询中包含外键?