首页 文章

#1005 - 可以't create table ' morina . #sql-3e25_35102'(错误号:150)

提问于
浏览
1

使用mysql向表中添加外键时遇到一些问题,我在以下代码中找不到错误:

-- phpMyAdmin SQL Dump
  • 版本4.1.12

- http://www.phpmyadmin.net

  • 客户:localhost - Généréle:Lun 09 Novembre2015à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”;

- Basededonnées:morina


- 结构de la table Etat

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


- 结构de la table制作

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


- 结构de la table Paiement

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


- 结构de la table Rangee

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


- 表格结构表格

CREATE TABLE IF NOT NOT EXISTS TableSalleidrangee mediumint(8)NOT NULL, position mediumint(8)NOT NULL, idetat mediumint(8)NOT NULL,PRIMARY KEY( idrangeeposition ),KEY idetatidetat ))ENGINE = InnoDB DEFAULT CHARSET = UTF8;

- Contraintes pour lestablesexportsées

- Contraintes pour la table Facture

ALTER TABLE Facture ADD CONSTRAINT Facture_ibfk_1 FOREIGN KEY( idpaiement )REFERENCES Paiementidp );

- 对冲表TableSalle

ALTER TABLE TableSalle ADD CONSTRAINT TableSalle_ibfk_1 FOREIGN KEY( idrangee )REFERENCES Rangeeidrangee ),ADD CONSTRAINT TableSalle_ibfk_2 FOREIGN KEY( idetat )REFERENCES Etatidetat );

CREATE TABLE AttributionTable

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

主要关键( idrangeepositionidfacture

)ENGINE = InnoDB DEFAULT CHARSET = utf8;

- 对冲表TableSalle

ALTER TABLE AttributionTable ADD CONSTRAINT Attribution_ibfk_1 外键( idrangeeposition )参考 TableSalleidrangeeposition ),--add约束 Attribution_ibfk_2 外键( position )参考 TableSalleposition ),添加约束 Attribution_ibfk_3 外键( idfacture )参考 Factureidfacture ) ;

感谢帮助 ! :)

1 回答

  • 0

    Please read documentation here

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

相关问题