2016-08-11 26 views
1
正確的MySQL的CREATE TABLE語句

我想插入使用PHP到MySQL數據庫此查詢,但我不斷收到此錯誤:如何用PHP創建

Can't create table ecommerce1 . orders (errno: 150 "Foreign key constraint is incorrectly formed")

我將如何正確地形成這種說法?

$query = "CREATE TABLE `orders` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT, 
`users_id` INT UNSIGNED NOT NULL, 
`transaction_id` VARCHAR(45) NOT NULL, 
`payment_status` VARCHAR(45) NOT NULL, 
`payment_amount` INT UNSIGNED NOT NULL, 
`date_created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 
PRIMARY KEY (`id`), 
INDEX `date_created` (`date_created` ASC), 
INDEX `transaction_id` (`transaction_id` ASC), 
CONSTRAINT `fk_orders_users1` FOREIGN KEY (`id`) 
    REFERENCES `users` (`id`) 
    ON DELETE NO ACTION ON UPDATE NO ACTION 
) ENGINE = InnoDB DEFAULT CHARSET=utf8"; 

echo "<p>************</p>"; 
echo $query; 
echo "<p>************</p>"; 

if($mysqli->query($query) === TRUE) { 
echo "<p>Database table orders created</p>"; 
} 
else { 
echo "<p>Error: </p>" . mysqli_error($mysqli); 
} 
+0

您指定一個外鍵約束,爲了使這種工作那場在該表必須存在,而且必須的相同的類型。 – Havenard

回答

1

這不可能是這種情況。如果你得到這個錯誤,這意味着鍵列不符合定義(最可能是數據類型不匹配)。如果我嘗試使用下面的示例代碼,它工作正常。看到這個搗鼓演示http://sqlfiddle.com/#!9/6a15c

CREATE TABLE `users`(`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY); 

CREATE TABLE `orders` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT, 
`users_id` INT UNSIGNED NOT NULL, 
`transaction_id` VARCHAR(45) NOT NULL, 
`payment_status` VARCHAR(45) NOT NULL, 
`payment_amount` INT UNSIGNED NOT NULL, 
`date_created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 
PRIMARY KEY (`id`), 
INDEX `date_created` (`date_created` ASC), 
INDEX `transaction_id` (`transaction_id` ASC), 
CONSTRAINT `fk_orders_users1` FOREIGN KEY (`id`) 
    REFERENCES `users` (`id`) 
    ON DELETE NO ACTION ON UPDATE NO ACTION 
0

試試這個:

CREATE TABLE `users`(`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY); 

CREATE TABLE `orders` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT, 
`users_id` INT UNSIGNED NOT NULL, 
`transaction_id` VARCHAR(45) NOT NULL, 
`payment_status` VARCHAR(45) NOT NULL, 
`payment_amount` INT UNSIGNED NOT NULL, 
`date_created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 
PRIMARY KEY (`id`), 
INDEX `date_created` (`date_created` ASC), 
INDEX `transaction_id` (`transaction_id` ASC), 
CONSTRAINT `fk_orders_users1` FOREIGN KEY (`id`) 
    REFERENCES `users` (`id`) 
    ON DELETE NO ACTION ON UPDATE NO ACTION 
) ENGINE = InnoDB DEFAULT char SET utf8;