Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Внешний ключ
 
 автор: ESBoy   (30.04.2010 в 12:25)   письмо автору
 
 

создал базу, и в нем таблицы (привожу отрывок):

create table employee (
        emp_id integer primary key auto_increment not null,
        name varchar(10) not null,
        sname varchar(15) not null,
        fname varchar(15) not null,
        country varchar(10) not null,
        city varchar(10) not null,
        street varchar(10) not null,
        house integer not null,
        flat integer not null
                        ) DEFAULT CHARSET=cp1251;
create table account (
        emp_id integer primary key references employee(emp_id),
        login varchar(10) not null,
        password char(40) not null,
        priviledge ENUM ('admin','user') not null
                        ) type=InnoDB DEFAULT CHARSET=cp1251;

только у меня почему то не работает внешний ключ.
правильно я понимаю что при записи данных в таблицу аккаунт ,
автоматом проверяется emp_id c таблицы employee, если есть , то добавляет запись ???

то есть у меня проблема в том что я спокойно добавляю запись в account, если даже табл employee пуста

  Ответить  
 
 автор: Trianon   (30.04.2010 в 12:35)   письмо автору
 
   для: ESBoy   (30.04.2010 в 12:25)
 

нет.
Никакого автомата лишь на основании references в SQL не предусмотрено

  Ответить  
 
 автор: ESBoy   (30.04.2010 в 12:38)   письмо автору
 
   для: Trianon   (30.04.2010 в 12:35)
 

1) то есть надо прописать триггер чтоли ???
2) а смысл тогда писать references ... ???

кстати:
ради интереса снял дамп базы,


--
-- Table structure for table `account`
--

CREATE TABLE IF NOT EXISTS `account` (
  `emp_id` int(11) NOT NULL,
  `login` varchar(10) NOT NULL,
  `password` char(40) NOT NULL,
  `priviledge` enum('admin','user') NOT NULL,
  PRIMARY KEY (`emp_id`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251;


тут отсутствует указатель references employee(emp_id)

  Ответить  
 
 автор: Trianon   (30.04.2010 в 12:49)   письмо автору
 
   для: ESBoy   (30.04.2010 в 12:38)
 

1. можно.
2. для совместимости с другими диалектами.
...
3. так ведь указание это обязывает только Вас - не сервер.

  Ответить  
 
 автор: ESBoy   (03.05.2010 в 22:36)   письмо автору
 
   для: Trianon   (30.04.2010 в 12:49)
 

прочитал я пару статей.
и пришел к вопросу :
Trianon, вы по занятости чем занимаетесь ?
и полностью ли знакомы с MySQL ?
во первых при правильном написании кода SQL , внешние ключи работают как надо !
то есть контролирует удаление, добавление.
самый главный вопрос : зачем говорить , если не знаете ?

http://denis.in.ua/foreign-keys-in-mysql.htm

p.s. надеюсь модератором сообщение не будет удалено , потому что, вопрос все таки важен.

  Ответить  
 
 автор: Trianon   (03.05.2010 в 23:48)   письмо автору
 
   для: ESBoy   (03.05.2010 в 22:36)
 

Во-первых, сбавьте тон на пару ступеней.
Во-вторых, я разве утверждал что-то, чему противоречит эта статья?

Вы спросили, как сделать так, чтобы строки в таблице создавались сами, без триггеров и явных запросов.
Я сказал - никак.

Ограничением чужого ключа можно добиться запрета внесения инконсистентных изменений.
Но запретами Вы вроде не интересовались...

Так что контролируют удаления и изменения не чужие ключи (которые Вы почему-то называете внешними), а ограничения чужих ключей ( FOREIGN KEY CONSTRAINTS) , о которых, собственно, статья и рассказывает.
А уж добавление извольте сами делать.
Максимум, что за Вас сделают - это проверят уникальность - в запрет, опять же.

Теперь, пожалуйста, что я говорил из того, чего не знаю?

А статьи находить - тем паче, полезные - дело, безусловно, здравое.
Хорошо бы еще и понимать, о чем в них пишут.

  Ответить  
 
 автор: ESBoy   (04.05.2010 в 06:54)   письмо автору
 
   для: Trianon   (03.05.2010 в 23:48)
 

вернемся к теме.
предлагаю прочитать мой первый пост, с чего тема и пошла.

>
>"Вы спросили, как сделать так, чтобы строки в таблице создавались сами, без триггеров и явных запросов.
>
вы где такое прочитали ?

Foreign key - это и есть внешний ключ

  Ответить  
 
 автор: Trianon   (04.05.2010 в 12:31)   письмо автору
 
   для: ESBoy   (04.05.2010 в 06:54)
 

(30.04.2010 в 12:25)
правильно я понимаю что при записи данных в таблицу аккаунт ,
автоматом проверяется emp_id c таблицы employee, если есть , то добавляет запись ???

  Ответить  
 
 автор: ESBoy   (04.05.2010 в 14:19)   письмо автору
 
   для: Trianon   (04.05.2010 в 12:31)
 

да. при записи . . .если проверку проходит . . . то - добавляет запись . . .
говорится что автоматом проверяется , а не автоматом добавляется запись

  Ответить  
 
 автор: ESBoy   (04.05.2010 в 14:30)   письмо автору
 
   для: ESBoy   (04.05.2010 в 14:19)
 

предлагаю тему на этом закрыть .

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования