sql >> データベース >  >> RDS >> Mysql

MySQLエラー1005:テーブルを作成できません(errno:150)

    InnoDBのステータスを確認できます(SHOW ENGINE INNODB STATUS )制約が失敗している正確な理由を特定します。もう1つのオプションは、テーブルの作成後に外部キー制約を追加することです。

    あなたの場合、エンジンタイプが不足しているようです。列タイプも一致する必要があります。参照されるテーブルの主キーは、ほとんどの場合NOT NULLです。 、messaInScenaではそうではありません 。

    create table spazio
      (
        nome             varchar(20) NOT NULL primary key, 
        indirizzo        varchar(40) not null,
        pianta           varchar(20),
        capienza         smallint
      ) ENGINE=InnoDB;
    
    create table spettacolo
      (
        titolo             varchar(40) NOT NULL primary key,  
        descrizione        LONGBLOB,
        annoProduzione     char(4)
      ) ENGINE=InnoDB;
    
    create table messaInScena
      (
        data               date,  
        ora                time,
        spazio             varchar(20) NOT NULL,
        spettacolo         varchar(40) NOT NULL,
        postiDisponibili   smallint,
        prezzoIntero       decimal(5,2),
        prezzoRidotto      decimal(5,2),
        prezzoStudenti     decimal(5,2),
        primary key (data, ora, spazio),
        foreign key (spazio) references spazio(nome) 
    on update cascade on delete set null,
        foreign key (spettacolo) references spettacolo(titolo) 
    on update cascade on delete set null,
        constraint RA3_1 check (postiDisponibili >= 0)     
      ) ENGINE=InnoDB;
    


    1. sqlalchemyで警告をオフにします

    2. 指定された値の行が存在するかどうかを確認します

    3. プリペアドステートメントを使用してSQLテーブルからSELECT*

    4. ONCONFLICT句で複数のconflict_targetを使用する