2013-12-12 3 views
0

Я пытаюсь добавить более одного значенияMysql, как добавить больше, чем одно значение (в одной коробке)

INSERT INTO Requierments (item_ID, SName) VALUES ( 
05, 'Exotic Weapons''basic weapon'); 

это возможно? я все готово попробовал | и &, но мне не разрешено это делать.

Идея состоит в том, чтобы продемонстрировать, что item_ID требует более одного объекта.

и если нет SName не требуется, как я код, который, в alter table он показывает мне, что они по умолчанию «0» для item_ID и «» для Sname, но когда я пытаюсь:

INSERT INTO Requierments (item_ID, SName) VALUES ( 
    02, ''); 

или

INSERT INTO Requierments (item_ID, SName) VALUES ( 
02,); 

ошибка возникает. item_ID и SName являются первичным ключом и внешним ключом для двух различных таблиц

CREATE TABLE `requierments` (
    `item_ID` int(11) NOT NULL DEFAULT '0', 
    `SName` varchar(30) NOT NULL DEFAULT '', 
    PRIMARY KEY (`item_ID`,`SName`), 
    KEY `SName` (`SName`), 
    CONSTRAINT `requierments_ibfk_1` FOREIGN KEY (`item_ID`) REFERENCES `item` (`ID`), 
    CONSTRAINT `requierments_ibfk_2` FOREIGN KEY (`SName`) REFERENCES `talents` (`SkillName`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 


CREATE TABLE `talents` (
    `SkillName` varchar(40) NOT NULL DEFAULT '', 
    `Bonus` varchar(30) DEFAULT NULL, 
    `Description` varchar(90) DEFAULT NULL, 
    `R_Str` int(11) DEFAULT NULL, 
    `R_WS` int(11) DEFAULT NULL, 
    `R_BS` int(11) DEFAULT NULL, 
    `R_Fel` int(11) DEFAULT NULL, 
    `R_Per` int(11) DEFAULT NULL, 
    `R_Int` int(11) DEFAULT NULL, 
    `R_Agi` int(11) DEFAULT NULL, 
    `R_WP` int(11) DEFAULT NULL, 
    `Talent_requiret` varchar(40) DEFAULT NULL, 
    PRIMARY KEY (`SkillName`), 
    KEY `Talent_requiret` (`Talent_requiret`), 
    CONSTRAINT `talents_ibfk_1` FOREIGN KEY (`Talent_requiret`) REFERENCES `talents` (`SkillName`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 


CREATE TABLE `item` (
    `ID` int(11) NOT NULL DEFAULT '0', 
    `Name_` varchar(30) DEFAULT NULL, 
    `Weight` int(11) DEFAULT NULL, 
    `Value_` int(11) DEFAULT NULL, 
    `Availability` varchar(30) DEFAULT NULL, 
    PRIMARY KEY (`ID`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

Вот 3 таблицы, где я хочу, чтобы хранить в таблице требования, что item_ID требуется для использования под SName, так как один элемент может потребоваться чтобы иметь более одного SName или нет, он путается о том, что делать.

+0

Я хотел бы указать, что вы неправильно сформулировали требования. Опять же, похоже, вы тоже ошиблись в коде создания, так что это не ваша проблема. – randak

+0

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

ответ

1

Синтаксис 'Exotic Weapons''basic weapon' интерпретируется как 'Exotic Weapons'basic weapon' (см. manual page on String Literals). Вы можете сохранить оба эти файла, если вы разделите их специальным символом, например, запятой или чем-то ('Exotic Weapons,basic weapon'), но это плохая идея по следующим причинам.

В любое время, когда у вас возникает соблазн сохранить несколько значений в одном столбце, вы должны иметь новую таблицу для хранения каждого значения и связать ее с указанным item_ID. Это называется «нормализация» - это делает вашу базу данных более стабильной, ваш код приложения проще, и все, что более вероятно, будет работать, когда вы продвигаетесь вперед и изменяете вещи. Найдите «нормализацию базы данных» и прочитайте о том, как делать то, что вы пытаетесь сделать.

EDIT: Это все еще немного трудно сказать, что вы пытаетесь сделать, но это выглядит, как вы просто хотите сохранить несколько кортежей в items. Пример:

INSERT INTO Requierments (item_ID, SName) VALUES 
    (5, 'Exotic Weapons'), 
    (5, 'basic weapon'); 

Обратите внимание, что она должна быть 5, не 05. Вот почему INSERT INTO Requierments (item_ID, SName) VALUES (02, ''); терпит неудачу. Кроме того, вы не можете просто опустить значение и иметь пробел, например, в другом примере: INSERT INTO Requierments (item_ID, SName) VALUES (02,);

Честно говоря, очень сложно сказать, что вы даже пытаетесь сделать здесь, и, похоже, есть какая-то путаница об основах структуры таблицы и синтаксисе SQL. Например, это утверждение очень сбивает с толку и неясно: «поскольку для одного элемента может потребоваться более одного SName или нет, его путают, что делать». Если вы можете дать более ясную информацию о том, как вы хотите, чтобы таблицы связывались друг с другом и где вы застряли, вы получите дополнительную помощь от сообщества SO.

+0

спасибо за ответ, но как я могу тогда закодировать, что SName не требуется? потому что я не могу это сделать? – Santelices

+0

Неправильно. Как описано в [String Literals] (http://dev.mysql.com/doc/en/string-literals.html): «* A» '' '" внутри строки, указанной в «' '' ", может быть записано как "' '' '". * " – eggyal

+0

Так что я прочитал о правилах нормализации, и я вижу точку. но я не могу понять, как добавить более одного SName к одному элементу item_ID. Дело в том, что item_ID может потребовать более одного SName, а некоторые могут вообще не требовать. Как мне это сделать? – Santelices

Смежные вопросы