Невозможно добавить или обновить дочернюю строку - PullRequest
0 голосов
/ 31 мая 2018

В моем проекте только две таблицы, и проблема в том, что я не могу добавить больше записи, которая уже существует:

select from acceso>

+----+---------------+---------------------+-----------+-----------+------------+
| id | ip            | date                | bloqueado | categoria | comentario |
+----+---------------+---------------------+-----------+-----------+------------+
|  1 | 201.214.164.5 | 2018-05-31 01:16:10 |         0 |         1 | NULL       |
+----+---------------+---------------------+-----------+-----------+------------+

select from categoria>

mysql> select * from categoria;
+----+---------+
| id | nombre  |
+----+---------+
|  1 | general |
+----+---------+

Это сценарий, который я изменил:

drop table categoria;
drop table acceso;

CREATE TABLE categoria (
    cat_id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(50) NOT NULL
);


CREATE TABLE acceso (
id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
ip VARCHAR(30) NOT NULL,
date datetime NOT NULL,
bloqueado tinyint(1) NOT NULL,
categoria int(11) NOT NULL,
comentario TEXT,
FOREIGN KEY (id) REFERENCES categoria(cat_id)
);

Когда я пытаюсь добавить в таблицу "acceso", которую он выдает, "невозможно добавить или обновить дочернюю строку ...":

ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`c9`.`acceso`, CONSTRAINT `acceso_ibfk_1` FOREIGN KEY (`id`) REFERENCES `categoria` (`cat_id`))

Как вы можете видеть в этой последней записи, я не пытаюсьдобавить что-то другое в таблицу категорий, и между этими двумя идентификаторами нет никакой разницы, но должно быть что-то еще, о чем я не знаю.

РЕДАКТИРОВАТЬ: Теперь я понял.КЛЮЧЕВОЙ КЛЮЧ указывает на неправильный столбец (acceso.id вместо acceso.categoria).

CREATE TABLE categoria (
    cat_id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(50) NOT NULL
);


CREATE TABLE acceso (
id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
ip VARCHAR(30) NOT NULL,
date datetime NOT NULL,
bloqueado tinyint(1) NOT NULL,
categoria int(11) UNSIGNED NOT NULL,
comentario TEXT,
FOREIGN KEY (categoria) REFERENCES categoria(cat_id)
);

1 Ответ

0 голосов
/ 31 мая 2018

Я сделал cat_id INT UNSIGNED, потому что это так в родительской таблице

CREATE TABLE categoria (
    cat_id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(50) NOT NULL
);

CREATE TABLE acceso (
    id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    ip VARCHAR(30) NOT NULL,
    date datetime NOT NULL,
    bloqueado tinyint(1) NOT NULL,
    categoria int(11) NOT NULL,
    comentario TEXT,
    cat_id INT UNSIGNED ,
    INDEX par_ind (cat_id),    
    FOREIGN KEY (cat_id) REFERENCES categoria1(id)
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...