powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Ошибка с ключами (Foreign key)
10 сообщений из 10, страница 1 из 1
Ошибка с ключами (Foreign key)
    #39353581
woody19rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую, помогите исправить ошибки в коде, не выходит создать связи показывает ошибку:
(Error Code : 1005
Can't create table 'lyabon.#sql-50c_2a' (errno: 150)
...
Рейтинг: 0 / 0
Ошибка с ключами (Foreign key)
    #39353584
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
woody19rus,

где DDL таблиц?
Обычная грабля - колонки имеют разные типы (с учётом модификтора unsigned)
...
Рейтинг: 0 / 0
Ошибка с ключами (Foreign key)
    #39353588
woody19rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Melkij,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
drop database if exists `LyaBon`;
create database `LyaBon` character set utf8 collate utf8_general_ci;
use `LyaBon`;

CREATE TABLE `Measure` (
	`ID` INT(20) NOT NULL AUTO_INCREMENT,
	`Name_of_measure` VARCHAR(255),
	`Short_title` VARCHAR(255),
	PRIMARY KEY (`ID`)
)engine=InnoDB default charset=cp1251;


CREATE TABLE `Nomenclature` (
	`ID` INT(20) NOT NULL AUTO_INCREMENT,
	`Name` VARCHAR(255),
	`Article` INT(20),
	`Name_of_measure` integer REFERENCES `Measure` (`ID`),
	`Consignment` VARCHAR(255),
	`Comment` VARCHAR(255),
	PRIMARY KEY (`ID`)

)engine=InnoDB default charset=cp1251;



CREATE TABLE `Good_movement` (
	`ID` INT(20) NOT NULL AUTO_INCREMENT,
	`Movement_date` DATE NOT NULL,
	`Count` INT(20),
	`Price` INT(20),
	`Code_of_supplier` INT(20) NOT NULL,
	`Code_of_operation` INT(20) NOT NULL,
	`Code` INT(20) NOT NULL,
	PRIMARY KEY (`ID`)
)engine=InnoDB default charset=cp1251;


CREATE TABLE `Requests` (
	`ID` INT(20) NOT NULL AUTO_INCREMENT,
	`Date_of_request` DATE,
	`Code` INT(20) NOT NULL,
	`Code_of_supplier` INT(20) NOT NULL,
	PRIMARY KEY (`ID`)
)engine=InnoDB default charset=cp1251;



CREATE TABLE `Operations` (
	`ID` INT(20) NOT NULL AUTO_INCREMENT,
	`Name_of_operation` VARCHAR(255),
	PRIMARY KEY (`ID`)
)engine=InnoDB default charset=cp1251;



CREATE TABLE `Suppliers` (
	`ID` INT(20) NOT NULL AUTO_INCREMENT,
	`Name_of_supplier` VARCHAR(255) NOT NULL,
	PRIMARY KEY (`ID`)
)engine=InnoDB default charset=cp1251;



CREATE TABLE `Users` (
	`ID` INT(20) NOT NULL AUTO_INCREMENT,
	`Password` VARCHAR(255) NOT NULL,
	PRIMARY KEY (`ID`)
)engine=InnoDB default charset=cp1251;



ALTER TABLE `Measure` ADD CONSTRAINT `Measure_fk0` FOREIGN KEY (`ID`) REFERENCES `Nomenclature`(`Name_of_measure`);

ALTER TABLE `Nomenclature` ADD CONSTRAINT `Nomenclature_fk0` FOREIGN KEY (`Name_of_measure`) REFERENCES `Requests`(`Code`);

ALTER TABLE `Nomenclature` ADD CONSTRAINT `Nomenclature_fk1` FOREIGN KEY (`Comment`) REFERENCES `Good_movement`(`ID`);

ALTER TABLE `Operations` ADD CONSTRAINT `Operations_fk0` FOREIGN KEY (`ID`) REFERENCES `Good_movement`(`Code_of_operation`);

ALTER TABLE `Suppliers` ADD CONSTRAINT `Suppliers_fk0` FOREIGN KEY (`ID`) REFERENCES `Good_movement`(`Code_of_supplier`);

ALTER TABLE `Suppliers` ADD CONSTRAINT `Suppliers_fk1` FOREIGN KEY (`Name_of_supplier`) REFERENCES `Requests`(`Code_of_supplier`);
...
Рейтинг: 0 / 0
Ошибка с ключами (Foreign key)
    #39353592
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
woody19rus,

и какой именно constraint возвращает ошибку?
Про минимальный воспроизводимый пример когда-нибудь слышали?
...
Рейтинг: 0 / 0
Ошибка с ключами (Foreign key)
    #39353593
woody19rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Melkijwoody19rus,

и какой именно constraint возвращает ошибку?
Про минимальный воспроизводимый пример когда-нибудь слышали?

При каждом constraint ошибку возвращает.
Про мин. воспроизводимый пример, не слышал
...
Рейтинг: 0 / 0
Ошибка с ключами (Foreign key)
    #39353595
woody19rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Melkijwoody19rus,

и какой именно constraint возвращает ошибку?
Про минимальный воспроизводимый пример когда-нибудь слышали?

Но уже прочел, исправлюсь в будущем)
...
Рейтинг: 0 / 0
Ошибка с ключами (Foreign key)
    #39353610
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А Вы знаете, что референсы умеют референситься только на индексы, а никак не на поля?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
mysql> CREATE TABLE `Measure` (
    ->  `ID` INT(20) NOT NULL AUTO_INCREMENT,
    ->  `Name_of_measure` VARCHAR(255),
    ->  `Short_title` VARCHAR(255),
    ->  PRIMARY KEY (`ID`)
    -> )engine=InnoDB default charset=cp1251;
Query OK, 0 rows affected (0.34 sec)

mysql> CREATE TABLE `Nomenclature` (
    ->  `ID` INT(20) NOT NULL AUTO_INCREMENT,
    ->  `Name` VARCHAR(255),
    ->  `Article` INT(20),
    ->  `Name_of_measure` integer REFERENCES `Measure` (`ID`),
    ->  `Consignment` VARCHAR(255),
    ->  `Comment` VARCHAR(255),
    ->  PRIMARY KEY (`ID`)
    ->
    -> )engine=InnoDB default charset=cp1251;
Query OK, 0 rows affected (0.24 sec)

mysql> ALTER TABLE `Measure` ADD CONSTRAINT `Measure_fk0` FOREIGN KEY (`ID`) REFERENCES `Nomenclature`(`Name_of_measure`);
ERROR 1215 (HY000): Cannot add foreign key constraint

mysql> CREATE INDEX `Name_of_measure` ON `Nomenclature`(`Name_of_measure`);
Query OK, 0 rows affected (0.27 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> ALTER TABLE `Measure` ADD CONSTRAINT `Measure_fk0` FOREIGN KEY (`ID`) REFERENCES `Nomenclature`(`Name_of_measure`);
Query OK, 0 rows affected (0.75 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql>
...
Рейтинг: 0 / 0
Ошибка с ключами (Foreign key)
    #39353615
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, в таблицы при ТАКОЙ структуре ничего не вставить. В первую не даст вставить реф на вторую, и наоборот.
...
Рейтинг: 0 / 0
Ошибка с ключами (Foreign key)
    #39353641
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaКстати, в таблицы при ТАКОЙ структуре ничего не вставить. В первую не даст вставить реф на вторую, и наоборот.
Меня это тоже очень озадачило.
Одна проблема - это mysql. В Measure вставить запись можно будет по одной интересной причине:
Код: sql
1.
`Name_of_measure` integer REFERENCES `Measure` (`ID`),


Этого внешнего ключа на самм деле нет. http://dev.mysql.com/doc/refman/5.7/en/create-table.html
авторMySQL parses but ignores “inline REFERENCES specifications” (as defined in the SQL standard) where the references are defined as part of the column specification. MySQL accepts REFERENCES clauses only when specified as part of a separate FOREIGN KEY specification.
Такой вот интересный способ отстрелить себе ногу. Аналогично check парсятся как валидный DDL, но ничего не делают.

AkinaА Вы знаете, что референсы умеют референситься только на индексы, а никак не на поля?
Всё-таки именно на поля, но на этих полях должны быть индексы. Составной индекс с необходимым полем на первом месте тоже сгодится.

Детали ошибки при создании индекса доступны только в одном неочевидном месте. Надо смотреть в секцию LATEST FOREIGN KEY ERROR листинга запроса SHOW ENGINE INNODB STATUS.
mysqlCannot find an index in the referenced table where the referenced columns appear as the first columns, or column types
in the table and the referenced table do not match for constraint.
...
Рейтинг: 0 / 0
Ошибка с ключами (Foreign key)
    #39354973
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выполните команды по одной и определите после какой из них появляется ошибка.

woody19rus
Код: plsql
1.
ALTER TABLE `Nomenclature` ADD CONSTRAINT `Nomenclature_fk1` FOREIGN KEY (`Comment`) REFERENCES `Good_movement`(`ID_Good_movement`);

А это зачем???
Это и не нужно, и технически невозможно. т.к. у полей Comment и ID_Good_movement разный тип.

Да и в остальных командах, похоже, есть ошибки.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Ошибка с ключами (Foreign key)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]