繁体   English   中英

使用外键 ERROR 创建 MYSQL 表

[英]Creating MYSQL table with foreign key ERROR

CREATE TABLE `u914452720_yzawa`.`aucs_manufacturer_files` 
( `id` INT NOT NULL AUTO_INCREMENT , `manufacturer_id` INT NOT NULL,
FOREIGN KEY ('manufacturer_id') REFERENCES aucs_manufacturer(manufacturer_id) ON DELETE CASCADE)
ENGINE=INNODB;

得到错误:SQL 查询:

CREATE TABLE `u914452720_yzawa`.`aucs_manufacturer_files` 
( `id` INT NOT NULL AUTO_INCREMENT , `manufacturer_id` INT NOT NULL,
FOREIGN KEY ('manufacturer_id') REFERENCES aucs_manufacturer(manufacturer_id) ON DELETE CASCADE)
ENGINE=INNODB
MySQL atsakymas: Dokumentacija

#1064 - 你的 SQL 语法有错误; 检查与您的 MariaDB 服务器版本相对应的手册,以获取在“manufacturer_id”附近使用的正确语法) REFERENCES aucs_manufacturer(manufacturer_id) ON DELETE CASCA' 在第 3 行

我想从中获取 MANUFACTURER_ID 的导出表:

-- phpMyAdmin SQL Dump
-- version 4.9.2
-- https://www.phpmyadmin.net/
--
-- Host: 127.0.0.1:3306
-- Generation Time: 2019 m. Grd 16 d. 11:37
-- Server version: 10.2.27-MariaDB
-- PHP Version: 7.2.23

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Database: `u914452720_yzawa`
--

-- --------------------------------------------------------

--
-- Sukurta duomenų struktūra lentelei `aucs_manufacturer`
--

CREATE TABLE `aucs_manufacturer` (
  `manufacturer_id` int(11) NOT NULL,
  `name` varchar(64) NOT NULL,
  `image` varchar(255) DEFAULT NULL,
  `instruction` varchar(255) DEFAULT NULL,
  `catalog` varchar(255) DEFAULT NULL,
  `sketch` varchar(255) DEFAULT NULL,
  `sort_order` int(3) NOT NULL,
  `id` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


--
-- Indexes for dumped tables
--

--
-- Indexes for table `aucs_manufacturer`
--
ALTER TABLE `aucs_manufacturer`
  ADD PRIMARY KEY (`manufacturer_id`);

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `aucs_manufacturer`
--
ALTER TABLE `aucs_manufacturer`
  MODIFY `manufacturer_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=31;
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

可能单引号可能不是必需的,并且被引用的表和正在创建的新表必须在同一个引擎上(在本例中为 MyISAM)。

CREATE TABLE `aucs_manufacturer_files` 
( `id` INT PRIMARY KEY AUTO_INCREMENT , `manufacturer_id` INT NOT NULL,
FOREIGN KEY (manufacturer_id) REFERENCES aucs_manufacturer(manufacturer_id) ON DELETE CASCADE)
ENGINE=MyISAM DEFAULT CHARSET=utf8;

如果对您尝试引用的其他表没有太多了解,我们很难猜测某些信息。 我把这个 SQLFiddle放在一起来演示一个有效的解决方案。

create table am (
  id int unique not null auto_increment
)
ENGINE=INNODB;
CREATE TABLE amf
( `id` INT unique NOT NULL AUTO_INCREMENT , `manufacturer_id` INT NOT NULL,
FOREIGN KEY (manufacturer_id) REFERENCES am(id) ON DELETE CASCADE)
ENGINE=INNODB;

insert into am(id) values (null),(null),(null),(null),(null),(null),(null);
insert into amf(id, manufacturer_id) VALUES (null, 1),(null, 2),(null, 3),(null, 2),(null, 1),(null, 4),(null, 6);
delete from am where id = 6;

如果您SELECT * from amf运行SELECT * from amf您将看到没有制造商SELECT * from amf为 6 的值,这意味着级联工作正常。

试试这个,希望这会奏效:

  CREATE TABLE `u914452720_yzawa`.`aucs_manufacturer_files` 
    ( `id` INT NOT NULL AUTO_INCREMENT , `manufacturer_id` INT,
    FOREIGN KEY (manufacturer_id) REFERENCES aucs_manufacturer(manufacturer_id) ON DELETE CASCADE)
    ENGINE=INNODB

在修复了应该被反引号或完全删除的单引号之后,您有:

CREATE TABLE `u914452720_yzawa`.`aucs_manufacturer_files` (
    `id` INT NOT NULL AUTO_INCREMENT , 
    `manufacturer_id` INT NOT NULL,
    FOREIGN KEY ('manufacturer_id') REFERENCES aucs_manufacturer(manufacturer_id) ON DELETE CASCADE
) ENGINE=INNODB;

你收到这个错误:

#1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key

这与外键无关; 它是由于为不是键的列指定自动增量而产生的。 想必你的意思是:

`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

(如果您在修复此问题后最终遇到另一个错误,请确保使用新的 create 语句、错误消息和show create table aucs_manufacturer输出来编辑您的问题。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM