За последние 24 часа нас посетил 16641 программист и 1650 роботов. Сейчас ищут 2048 программистов ...

Связи между таблицами

Тема в разделе "MySQL", создана пользователем Васяня, 2 окт 2016.

  1. Васяня

    Васяня Активный пользователь

    С нами с:
    2 окт 2016
    Сообщения:
    238
    Симпатии:
    32
    Адрес:
    Россия, Приморский край, г. Находка.
    Надо что бы при удалении пользователя удалялись все его сообщения в чате.

    Вот что есть:
    Код (Text):
    1. CREATE TABLE users (
    2.   id bigint(20) unsigned auto_increment,
    3.   registration datetime,
    4.   email varchar(255) UNIQUE NOT NULL,
    5.   name varchar(20) NOT NULL,
    6.   password varchar(255) NOT NULL,
    7.   PRIMARY KEY (id)
    8. ) ENGINE=INNODB;
    9.  
    10. CREATE TABLE messages (
    11.   id bigint(20) unsigned auto_increment,
    12.   dispatch datetime,
    13.   message text(500) NOT NULL,
    14.   user_id bigint(20) unsigned NOT NULL,
    15.   PRIMARY KEY (id)
    16. ) ENGINE=INNODB;
    17.  
    18. ALTER TABLE users FOREIGN KEY (id)
    19.   REFERENCES messages(user_id)
    20.   ON DELETE CASCADE;
    21.  
    22. ALTER TABLE messages FOREIGN KEY (user_id)
    23.   REFERENCES users(id);
    При попытке импорта в phpMyAdmin ругаеться, а как это сделать по другому не знаю.

    Подскажите пожалуйста в чем моя ошибка.
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Как ругается?
     
  3. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Покажи запрос, вроде дело плёвое.
     
  4. Васяня

    Васяня Активный пользователь

    С нами с:
    2 окт 2016
    Сообщения:
    238
    Симпатии:
    32
    Адрес:
    Россия, Приморский край, г. Находка.
    Ошибка
    Статический анализ:

    Найдено 1 ошибок при анализе.



    1. Нераспознанная операция изменения. (near "" at position 0)


    SQL запрос:

    ALTER TABLE users FOREIGN KEY (id) REFERENCES messages(user_id) ON DELETE CASCADE

    Ответ MySQL: [​IMG]

    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FOREIGN KEY (id)
    REFERENCES messages(user_id)
    ON DELETE CASCADE' at line 1
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    попробуй кавычки расставить, может прокатит
     
  6. Васяня

    Васяня Активный пользователь

    С нами с:
    2 окт 2016
    Сообщения:
    238
    Симпатии:
    32
    Адрес:
    Россия, Приморский край, г. Находка.
    Ковычки не помогли :(
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    покажи какой запрос получился
     
  8. Васяня

    Васяня Активный пользователь

    С нами с:
    2 окт 2016
    Сообщения:
    238
    Симпатии:
    32
    Адрес:
    Россия, Приморский край, г. Находка.
    Код (Text):
    1. CREATE TABLE `users` (
    2.   `id` bigint(20) unsigned auto_increment,
    3.   `date` timestamp DEFAULT CURRENT_TIMESTAMP,
    4.   `email` varchar(255) UNIQUE NOT NULL,
    5.   `name` varchar(20) NOT NULL,
    6.   `password` varchar(255) NOT NULL,
    7.   `hash` varchar(255) NOT NULL,
    8.   PRIMARY KEY (`id`)
    9. ) ENGINE=INNODB;
    10.  
    11. CREATE TABLE `messages` (
    12.   `id` bigint(20) unsigned auto_increment,
    13.   `date` timestamp DEFAULT CURRENT_TIMESTAMP,
    14.   `update` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    15.   `message` text(500) NOT NULL,
    16.   `user_id` bigint(20) unsigned NOT NULL,
    17.   PRIMARY KEY (`id`)
    18. ) ENGINE=INNODB;
    19.  
    20. ALTER TABLE `users` FOREIGN KEY (`id`)
    21.   REFERENCES `messages`(`user_id`)
    22.   ON DELETE CASCADE;
    23.  
    24. ALTER TABLE `messages` FOREIGN KEY (`user_id`)
    25.   REFERENCES `users`(`id`);
    Все таже ошибка
     
  9. Васяня

    Васяня Активный пользователь

    С нами с:
    2 окт 2016
    Сообщения:
    238
    Симпатии:
    32
    Адрес:
    Россия, Приморский край, г. Находка.
    Все разобрался, вот так работает:
    Код (Text):
    1. CREATE TABLE `users` (
    2.   `id` bigint(20) unsigned auto_increment,
    3.   PRIMARY KEY (`id`)
    4. ) ENGINE=INNODB;
    5.  
    6. CREATE TABLE `messages` (
    7.   `id` bigint(20) unsigned auto_increment,
    8.   `user_id` bigint(20) unsigned NOT NULL,
    9.   PRIMARY KEY (`id`),
    10.   FOREIGN KEY (`user_id`)
    11.     REFERENCES `users`(`id`)
    12.     ON DELETE CASCADE
    13. ) ENGINE=INNODB;
    14.  
    15.  
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а, название совпадало
     
  11. Васяня

    Васяня Активный пользователь

    С нами с:
    2 окт 2016
    Сообщения:
    238
    Симпатии:
    32
    Адрес:
    Россия, Приморский край, г. Находка.
    Да все совпадало, я просто перемудрил с foreign key