Mysql Connot добавить ограничение внешнего ключа. как я могу решить это?

0

Я попытался исправить запрос. но произошла ошибка. сообщение об ошибке: 'Cannot add foreign key constraint'. Я должен был создать эту таблицу. но это не сработало.

    CREATE TABLE IF NOT EXISTS 'mydb'.'member' (
      'idseq' INT(1) NOT NULL AUTO_INCREMENT,
      'id' VARCHAR(50) NOT NULL,
      'pw' VARCHAR(20) NOT NULL,
      'name' VARCHAR(50) NOT NULL,
      'email' VARCHAR(45) NOT NULL,
      'mobile0' VARCHAR(3) NOT NULL,
      'mobile1' VARCHAR(3) NOT NULL,
      'mobile2' VARCHAR(4) NOT NULL,
      'mobile3' VARCHAR(4) NOT NULL,
      'birth' DATE NOT NULL,
      'admin_YN' VARCHAR(45) NOT NULL DEFAULT 'N',
      'reg_date' DATE NOT NULL,
      'upd_date' DATE NOT NULL,
      PRIMARY KEY ('idseq', 'id'))
    ENGINE = InnoDB
    AUTO_INCREMENT = 6
    DEFAULT CHARACTER SET = utf8;


CREATE TABLE IF NOT EXISTS 'mydb'.'reservation' (
  'reservation_seq' INT(11) NOT NULL AUTO_INCREMENT,
  'user_id' VARCHAR(50) NOT NULL,
  'playMv_seq' INT(11) NOT NULL,
  'reservaion_seat_code' VARCHAR(20) NOT NULL,
  'reservaion_seat_num' INT(11) NOT NULL,
  'reservation_charge' VARCHAR(20) NOT NULL,
  'reservation_date' DATETIME NOT NULL,
  PRIMARY KEY ('reservation_seq', 'user_id', 'playMv_seq'),

    FOREIGN KEY ('user_id')
    REFERENCES 'mydb'.'member' ('id')    
    )
ENGINE = InnoDB
AUTO_INCREMENT = 8
DEFAULT CHARACTER SET = utf8;

Поэтому я проверил его подробно из запроса 'show engine innodb status. сообщение об ошибке детали

Ошибка ограничения внешнего ключа таблицы mydb/бронирование:


 FOREIGN KEY ('user_id')
     REFERENCES 'mydb'.'member' ('id')


Не удается найти индекс в ссылочной таблице, где ссылочные столбцы отображаются в виде первых столбцов, или типы столбцов в таблице, а ссылочная таблица не соответствует ограничениям. Обратите внимание, что внутренний тип хранения ENUM и SET изменен в таблицах, созданных с помощью> = InnoDB-4.1.12, и такие столбцы в старых таблицах не могут ссылаться на такие столбцы в новых таблицах.

как я могу разрешить ошибку

Теги:
database

1 ответ

0
Лучший ответ

Вы пытаетесь создать внешний ключ, ссылающийся на столбец id целевой таблицы:

FOREIGN KEY ('user_id')
REFERENCES 'mydb'.'member' ('id')

Но каков фактический ключ на этой целевой таблице?:

PRIMARY KEY ('idseq', 'id')

Это не id, если составной idseq и id. Чтобы ссылаться на это как внешний ключ, вам нужны локальные столбцы, которые соответствуют этому:

'user_idseq' INT(1) NOT NULL,
'user_id' VARCHAR(50) NOT NULL,

И используйте оба для внешнего ключа:

FOREIGN KEY ('user_idseq', 'user_id')
REFERENCES 'mydb'.'member' ('idseq', 'id')

(Side Note: первичный ключ в member выглядит мне довольно странным в первую очередь. Почему сам idseq не idseq быть основным ключом? Какова цель id?)

  • 0
    Спасибо ~! Я работаю это из вашего комментария. и на самом деле нет особой причины для установки <code> idseq, id </ code> на первичный ключ. Я думал, что они просто установлены естественно. и эти цели одинаковы. Мне не хватает базы данных навыков ..

Ещё вопросы

Сообщество Overcoder
Наверх
Меню