Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > Ссылка на другой столбец. FOREIGN KEY?


Автор: Enelar 2.8.2011, 17:59
Добрый день, нет у меня опыта работы с FOREIGN KEY, и первичный брейнфак ничего не дал.

Хотелось бы решить две задачи.

1) При выборке SELECT * показывалось фиктивное поле FROM_UNIXTIME(field_time)
2) В таблицу Б можно было добавить(или изменить) только те записи, в которых значение поле field_b существовало в таблице A, поле field_a, а также из таблицы А нельзя было удалять или менять записи так что бы нарушилось это правило.

Простите, но нагло прошу пример ибо не получается( smile 

Автор: Akina 2.8.2011, 18:40
(2) и вправду делается через внешние ключи (то есть возможны и иные способы, но этот наиболее прост).
Что же до (1) - я лично НИЧЕГО не понял...

Автор: Enelar 2.8.2011, 20:36
Цитата(Akina @ 2.8.2011,  18:40)
(2) и вправду делается через внешние ключи (то есть возможны и иные способы, но этот наиболее прост).
Что же до (1) - я лично НИЧЕГО не понял...

таблица action, time
Выполняю SELECT * FROM table LIMIT 1

Выходит строка вида
action,        time,                        FROM_UNIXTIME(time)
"fall asleep", 3424234432534, "2011-23-43 32:43"


А на счет второго не подскажете?  smile 

Автор: Akina 2.8.2011, 21:25
Цитата(Enelar @  2.8.2011,  21:36 Найти цитируемый пост)
А на счет второго не подскажете? 

Уже ж подсказал вроде... сам не в состоянии найти? ну вот тебе http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

По первому вопросу - яснее не стало...

Автор: sir_nuf_nuf 3.8.2011, 09:50
Цитата(Enelar @  2.8.2011,  20:36 Найти цитируемый пост)
таблица action, time
Выполняю SELECT * FROM table LIMIT 1

Выходит строка вида
action,        time,                        FROM_UNIXTIME(time)
"fall asleep", 3424234432534, "2011-23-43 32:43"


Так нельзя.  * - это ровно то что есть в таблице.
Указывайте явно какие поля выбираете.

Код

SELECT action, time,  FROM_UNIXTIME(time) FROM table LIMIT 1



В некоторых базах данные есть calculated fields, но MySQL их не поддерживает.
Можно еще создать нормальное поле в таблице table и наполнять его тригерами. 

Автор: Enelar 3.8.2011, 13:23
Цитата(sir_nuf_nuf @ 3.8.2011,  09:50)
Цитата(Enelar @  2.8.2011,  20:36 Найти цитируемый пост)
таблица action, time
Выполняю SELECT * FROM table LIMIT 1

Выходит строка вида
action,        time,                        FROM_UNIXTIME(time)
"fall asleep", 3424234432534, "2011-23-43 32:43"


Так нельзя.  * - это ровно то что есть в таблице.
Указывайте явно какие поля выбираете.

Код

SELECT action, time,  FROM_UNIXTIME(time) FROM table LIMIT 1



В некоторых базах данные есть calculated fields, но MySQL их не поддерживает.
Можно еще создать нормальное поле в таблице table и наполнять его тригерами.

Ясно, просто хотел что бы навикат, или pma показывали еще одно поле при "обзоре"

Akina, ясно. Я просто долго вдумчиво читал, не понял, думал тут разжуют. Ладно еще поковыряюсь.

Автор: Akina 3.8.2011, 13:54
Цитата(Enelar @  3.8.2011,  14:23 Найти цитируемый пост)
 Я просто долго вдумчиво читал, не понял, думал тут разжуют.

Господи, чо там разжёвывать? создай две таблички по паре полей с FK из одной в другую, и посмотри, что будет, если пытаться выполнить запрос, нарушающий целостность данных... делов-то на 5 минут, типов запросов-то от силы с десяток, зато всё сразу увидишь собственными глазами.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)