id_project, username, passwd;
id_work, id_project, project_name; // id_project – ключ связывающий две таблицы
первая таблица проекты, вторая задания для них. Соответственно если мы удаляем проект то и задания тоже удаляются. Я делал раньше двумя запросами, но это не так надо.
К томуже, если делать отдельными запросами, то какой толк от связей таблиц вообще, кроме как «в уме» их связать.
Спустя 28 минут, 36 секунд (17.12.2010 - 11:54) SlavaFr написал(а):
Спустя 1 минута, 32 секунды (17.12.2010 - 11:55) maximka787 написал(а):
Цитата (SlavaFr @ 17.12.2010 - 08:54) |
mysql on delete cascade |
???? не понял. mysql on delete cascade вроде применяется к InnoDB
Спустя 1 минута, 2 секунды (17.12.2010 - 11:56) SlavaFr написал(а):
да к InnoDB. В противном случае одним запросом не получится.
Спустя 2 минуты (17.12.2010 - 11:58) maximka787 написал(а):
Ок пасибо, а InnoDB чаще применяется в сложных проектах?
Спустя 1 час, 21 секунда (17.12.2010 - 12:59) maximka787 написал(а):
Уперся в одну проблему.
Так же не должно быть?
CREATE TABLE myproject1(
id int not null auto_increment,
name text,
PRIMARY KEY (id)
) TYPE=INNODB;
//Тут все нормально создается
CREATE TABLE myproject2(
id int not null auto_increment,
data_create datetime,
name char(80), //почему если это поле имеет тип text все норм, если char и varchar то первичными ключами становятся все поля ??
PRIMARY KEY (id)
)TYPE=INNODB;
Так же не должно быть?
Спустя 3 минуты, 23 секунды (17.12.2010 - 13:02) waldicom написал(а):
Цитата (SlavaFr @ 17.12.2010 - 10:56) |
да к InnoDB. В противном случае одним запросом не получится. |
как это не получится? А JOIN в DELETE уже отменили чтоли?
Спустя 12 минут, 13 секунд (17.12.2010 - 13:14) maximka787 написал(а):
А вот теперь уже я запутался) INNODB как-то интересней работает чем MyISAM, во всяком случае, он делает уже автоматом операции, а это уже упрощает запросы.
Вы хотите сказать, что оба типа подходят? какой использовать тогда лучше, для больших проектов? например для большого числа строк.
Вы хотите сказать, что оба типа подходят? какой использовать тогда лучше, для больших проектов? например для большого числа строк.
Спустя 47 минут, 50 секунд (17.12.2010 - 14:02) SlavaFr написал(а):
Цитата (waldicom @ 17.12.2010 - 10:02) | ||
как это не получится? А JOIN в DELETE уже отменили чтоли? |
чето меня действительно перемкнуло, надо больше спать.
да можно именно так как waldicom написал зделать.
таком образом:
delete t1,t2 from tabliza1 as t1 inner join tabliza2 as t2 on t1.joinpole=t2.joinpole where uslovie
Спустя 1 минута, 1 секунда (17.12.2010 - 14:03) maximka787 написал(а):
Мужики, помогите решить проблему.
//auto_increment выдает ошибку
#1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key
а мне надо чтобы id_plan_work имел ID, а без auto_increment поле остается пустое.
CREATE TABLE project(
id int not null auto_increment primary key,
name varchar(50),
) TYPE=INNODB AUTO_INCREMENT=1;
CREATE TABLE work(
id_plan_work int auto_increment, //auto_increment выдает ошибку
id_project int,
name text,
FOREIGN KEY (id_project) REFERENCES project(id)
ON DELETE CASCADE
) TYPE=INNODB AUTO_INCREMENT=1;
//auto_increment выдает ошибку
#1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key
а мне надо чтобы id_plan_work имел ID, а без auto_increment поле остается пустое.
Спустя 22 минуты, 28 секунд (17.12.2010 - 14:26) SlavaFr написал(а):
CREATE TABLE project(
id int not null auto_increment primary key,
name varchar(50)
) TYPE=INNODB;
CREATE TABLE work(
id_plan_work int auto_increment primary key,
id_project int,
name text
) TYPE=INNODB;
alter table work add FOREIGN KEY (id_project) REFERENCES project(id) ON DELETE CASCADE;
#test
insert into project(name)values('test');
insert into work(id_project,name) values(1,'work from test');
delete from project where id=1;
select * from work; #должен также стереть work
но в принципе можеш и так стереть как
Спустя 11 минут, 27 секунд (17.12.2010 - 14:37) maximka787 написал(а):
Цитата (SlavaFr @ 17.12.2010 - 11:02) |
таком образом: delete t1,t2 from tabliza1 as t1 inner join tabliza2 as t2 on t1.joinpole=t2.joinpole where uslovie |
А как применить к моим таблицам?
Таблица project (id_project, username);
Таблица work (id_work, id_project, name); // id_project – ключ связывающий две таблицы
delete * from project as t1 inner join work as t2 on t1.joinpole=t2.joinpole where id=1;
Спустя 3 минуты, 25 секунд (17.12.2010 - 14:41) maximka787 написал(а):
Цитата (SlavaFr @ 17.12.2010 - 11:26) |
но в принципе можеш и так стереть как |
отличный пример, а почему сразу не дает 2 авто инкремента сделать? это обман базы что ли? Ведь такого не должно быть
Спустя 1 час, 22 минуты, 55 секунд (17.12.2010 - 16:04) SlavaFr написал(а):
Цитата (maximka787 @ 17.12.2010 - 11:37) |
А как применить к моим таблицам? |
delete p,w from project as p inner join work as w on w.id_project=p.id_project where p.id_project=1
Цитата (maximka787 @ 17.12.2010 - 11:41) |
отличный пример, а почему сразу не дает 2 авто инкремента сделать? это обман базы что ли? smile.gif Ведь такого не должно быть |
в одной таблице может быть только один автоинкремент.
_____________
..Работает - не трогай!