|
|
|
| создал базу, и в нем таблицы (привожу отрывок):
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 пуста | |
|
|
|
|
|
|
|
для: ESBoy
(30.04.2010 в 12:25)
| | нет.
Никакого автомата лишь на основании references в SQL не предусмотрено | |
|
|
|
|
|
|
|
для: 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) | |
|
|
|
|
|
|
|
для: ESBoy
(30.04.2010 в 12:38)
| | 1. можно.
2. для совместимости с другими диалектами.
...
3. так ведь указание это обязывает только Вас - не сервер. | |
|
|
|
|
|
|
|
для: Trianon
(30.04.2010 в 12:49)
| | прочитал я пару статей.
и пришел к вопросу :
Trianon, вы по занятости чем занимаетесь ?
и полностью ли знакомы с MySQL ?
во первых при правильном написании кода SQL , внешние ключи работают как надо !
то есть контролирует удаление, добавление.
самый главный вопрос : зачем говорить , если не знаете ?
http://denis.in.ua/foreign-keys-in-mysql.htm
p.s. надеюсь модератором сообщение не будет удалено , потому что, вопрос все таки важен. | |
|
|
|
|
|
|
|
для: ESBoy
(03.05.2010 в 22:36)
| | Во-первых, сбавьте тон на пару ступеней.
Во-вторых, я разве утверждал что-то, чему противоречит эта статья?
Вы спросили, как сделать так, чтобы строки в таблице создавались сами, без триггеров и явных запросов.
Я сказал - никак.
Ограничением чужого ключа можно добиться запрета внесения инконсистентных изменений.
Но запретами Вы вроде не интересовались...
Так что контролируют удаления и изменения не чужие ключи (которые Вы почему-то называете внешними), а ограничения чужих ключей ( FOREIGN KEY CONSTRAINTS) , о которых, собственно, статья и рассказывает.
А уж добавление извольте сами делать.
Максимум, что за Вас сделают - это проверят уникальность - в запрет, опять же.
Теперь, пожалуйста, что я говорил из того, чего не знаю?
А статьи находить - тем паче, полезные - дело, безусловно, здравое.
Хорошо бы еще и понимать, о чем в них пишут. | |
|
|
|
|
|
|
|
для: Trianon
(03.05.2010 в 23:48)
| | вернемся к теме.
предлагаю прочитать мой первый пост, с чего тема и пошла.
>
>"Вы спросили, как сделать так, чтобы строки в таблице создавались сами, без триггеров и явных запросов.
>
вы где такое прочитали ?
Foreign key - это и есть внешний ключ | |
|
|
|
|
|
|
|
для: ESBoy
(04.05.2010 в 06:54)
| | (30.04.2010 в 12:25)
правильно я понимаю что при записи данных в таблицу аккаунт ,
автоматом проверяется emp_id c таблицы employee, если есть , то добавляет запись ???
| |
|
|
|
|
|
|
|
для: Trianon
(04.05.2010 в 12:31)
| | да. при записи . . .если проверку проходит . . . то - добавляет запись . . .
говорится что автоматом проверяется , а не автоматом добавляется запись | |
|
|
|
|
|
|
|
для: ESBoy
(04.05.2010 в 14:19)
| | предлагаю тему на этом закрыть . | |
|
|
|