繁体   English   中英

MySQL:#1005 - 无法创建表(错误号:150)

[英]MySQL: #1005 - Can't create table (errno: 150)

我在用mysql向表中添加外键时遇到了一个小问题,我在下面的代码中找不到错误:

-- phpMyAdmin SQL Dump
-- version 4.1.12
-- http://www.phpmyadmin.net
--
-- Client :  localhost
-- Généré le :  Lun 09 Novembre 2015 à 23:43
-- Version du serveur :  5.5.36-MariaDB-log
-- Version de PHP :  5.5.11

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";

--
-- Base de données :  `morina`
--

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

--
-- Structure de la table `Etat`
--

CREATE TABLE IF NOT EXISTS `Etat` (
  `idetat` mediumint(8) NOT NULL AUTO_INCREMENT,
  `nom` varchar(255) NOT NULL,
  PRIMARY KEY (`idetat`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

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

--
-- Structure de la table `Facture`
--

CREATE TABLE IF NOT EXISTS `Facture` (
  `idfacture` mediumint(8) NOT NULL AUTO_INCREMENT,
  `idpaiement` mediumint(8) DEFAULT NULL,
  `montant` int(11) DEFAULT NULL,
  `jour` datetime NOT NULL,
  PRIMARY KEY (`idfacture`),
  KEY `idpaiement` (`idpaiement`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

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

--
-- Structure de la table `Paiement`
--

CREATE TABLE IF NOT EXISTS `Paiement` (
  `idp` mediumint(8) NOT NULL AUTO_INCREMENT,
  `intitule` varchar(255) NOT NULL,
  PRIMARY KEY (`idp`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

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

--
-- Structure de la table `Rangee`
--

CREATE TABLE IF NOT EXISTS `Rangee` (
  `idrangee` mediumint(8) NOT NULL AUTO_INCREMENT,
  `zone` varchar(1) NOT NULL,
  PRIMARY KEY (`idrangee`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

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

--
-- Structure de la table `TableSalle`
--

CREATE TABLE IF NOT EXISTS `TableSalle` (
  `idrangee` mediumint(8) NOT NULL,
  `position` mediumint(8) NOT NULL,
  `idetat` mediumint(8) NOT NULL,
  PRIMARY KEY (`idrangee`,`position`),
  KEY `idetat` (`idetat`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Contraintes pour les tables exportées
--

--
-- Contraintes pour la table `Facture`
--
ALTER TABLE `Facture`
  ADD CONSTRAINT `Facture_ibfk_1` FOREIGN KEY (`idpaiement`) REFERENCES `Paiement` (`idp`);

--
-- Contraintes pour la table `TableSalle`
--
ALTER TABLE `TableSalle`
  ADD CONSTRAINT `TableSalle_ibfk_1` FOREIGN KEY (`idrangee`) REFERENCES `Rangee` (`idrangee`),
  ADD CONSTRAINT `TableSalle_ibfk_2` FOREIGN KEY (`idetat`) REFERENCES `Etat` (`idetat`);


CREATE TABLE `AttributionTable` (

    `idrangee` mediumint(8) NOT NULL,
    `position` mediumint(8) NOT NULL,
    `idfacture` mediumint(8) NOT NULL,
  PRIMARY KEY (`idrangee`,`position`,`idfacture`)


)ENGINE=InnoDB  DEFAULT CHARSET=utf8;

--
-- Contraintes pour la table `TableSalle`
--
ALTER TABLE `AttributionTable`
  ADD CONSTRAINT `Attribution_ibfk_1` FOREIGN KEY (`idrangee`,`position`) REFERENCES `TableSalle`(`idrangee`,`position`),
  --ADD CONSTRAINT `Attribution_ibfk_2` FOREIGN KEY (`position`) REFERENCES `TableSalle`(`position`),
  ADD CONSTRAINT `Attribution_ibfk_3` FOREIGN KEY (`idfacture`) REFERENCES `Facture`(`idfacture`);

感谢帮助 ! :)

请在此处阅读文档

如果您重新创建一个被删除的表,它必须有一个符合引用它的外键约束的定义。 如前所述,它必须具有正确的列名和类型,并且必须在引用的键上具有索引。 如果这些都不满足,MySQL 将返回 Error 1005 并在错误消息中引用 Error 150,这意味着未正确形成外键约束。 类似地,如果 ALTER TABLE 由于错误 150 而失败,这意味着对于更改后的表,外键定义的格式不正确。

在这里,您只需要创建带有附加索引positionTableSalle

CREATE TABLE IF NOT EXISTS `TableSalle` (
  `idrangee` mediumint(8) NOT NULL,
  `position` mediumint(8) NOT NULL,
  `idetat` mediumint(8) NOT NULL,
  PRIMARY KEY (`idrangee`,`position`),
  KEY `position` (`position`),
  KEY `idetat` (`idetat`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

暂无
暂无

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

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