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

Форум MySQL

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

 

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

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

тема: Изменения по всей базе данных
 
 автор: UnlikeAO   (09.09.2008 в 14:52)   письмо автору
 
 

Люди, такой вопрос.. Есть таблица пользователей включающая поля ID, Nickname и так далее, все что нужно для пользователя. и есть таблица коментов. которая имеет поля ID, PersonID(id пользователя добавившего комент) и поле Nickname( это имя пользователя добавившего комент)- оно внесено для удобства, чтоб не подключаться еще раз к базе данных пользователей для вывода комента.
Теперь допустим что пользователь меняет свой ник... как сделать чтоб в таблице коментов ник тоже изменился??? Понятно что можно тупо подключиться к базе данных и в цикле заменить Х на У , но а если таких таблиц не одна, всмысле не только таблица коментов, а еще какие нибудь функции пользователя, это сколько же надо циклов сколько тон бессполезного кода.. Короче вопрос, КАК?))) Заранее спасибо.. базу данных лепил через MyPHPAdmin . заранее спасибо!!!

  Ответить  
 
 автор: Mehelson   (09.09.2008 в 14:57)   письмо автору
 
   для: UnlikeAO   (09.09.2008 в 14:52)
 

А Вы говорите для удобства... :)
В таблицу комментариев только id пользователя и изменения ника пройдут незаметно для других таблиц

  Ответить  
 
 автор: Root   (09.09.2008 в 15:08)   письмо автору
 
   для: UnlikeAO   (09.09.2008 в 14:52)
 

почитайте про "ON UPDATE CASCADE"

  Ответить  
 
 автор: Trianon   (09.09.2008 в 15:13)   письмо автору
 
   для: UnlikeAO   (09.09.2008 в 14:52)
 

>оно внесено для удобства, чтоб не подключаться еще раз к базе данных пользователей для вывода комента.

у Вас пользователи и коменты размещены в разных БД?

to Root: on update cascade? в MySQL? для поля которое не является ссылкой на первичный ключ?

  Ответить  
 
 автор: Root   (09.09.2008 в 15:29)   письмо автору
 
   для: Trianon   (09.09.2008 в 15:13)
 

>to Root: on update cascade?
да
>в MySQL?
да
> для поля которое не является ссылкой на первичный ключ?
если поле, например, UNIQUE и есть FK, почему нет?

  Ответить  
 
 автор: Trianon   (09.09.2008 в 19:02)   письмо автору
 
   для: Root   (09.09.2008 в 15:29)
 

Спрошу проще.
У Вас такое получалось?

  Ответить  
 
 автор: Root   (09.09.2008 в 19:06)   письмо автору
 
   для: Trianon   (09.09.2008 в 19:02)
 

>Спрошу проще.
>У Вас такое получалось?

да :-)

CREATE TABLE `users` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `name` varchar(45) NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


CREATE TABLE `comments` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `info` varchar(45) NOT NULL,
  `username` varchar(45) NOT NULL,
  PRIMARY KEY  (`id`),
  #UNIQUE KEY `username` (`username`),
  KEY `username` USING BTREE (`username`),
  CONSTRAINT `FK_username` FOREIGN KEY (`username`) REFERENCES `users` (`name`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

insert into users values
(null, 'first'),
(null, 'second'),
(null, 'third');

insert into comments values
(null, 'comment 1', 'first'),
(null, 'comment 2', 'first'),
(null, 'comment 3', 'second'),
(null, 'comment 4', 'third');

select * from users;
select * from comments;

update users set name = 'root' where id = 1;

select * from users;
select * from comments;


UPD.
без UNIQUE в comments.

  Ответить  
 
 автор: UnlikeAO   (10.09.2008 в 00:39)   письмо автору
 
   для: Trianon   (09.09.2008 в 15:13)
 

в одной базе данных, но в разных таблицах...

  Ответить  
 
 автор: Trianon   (10.09.2008 в 00:48)   письмо автору
 
   для: UnlikeAO   (10.09.2008 в 00:39)
 

тогда не надо насчет "не подключаться же к базе за никами"
Это не удобство, а форменная денормализация. Ничем не оправданная.

  Ответить  
 
 автор: UnlikeAO   (15.09.2008 в 06:12)   письмо автору
 
   для: Trianon   (10.09.2008 в 00:48)
 

ок, перестрою бд.. Спасибо!

  Ответить  
 
 автор: UnlikeAO   (15.09.2008 в 06:12)   письмо автору
 
   для: Trianon   (10.09.2008 в 00:48)
 

ок, перестрою бд.. Спасибо!

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

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