
Ilia
31.08.2017
10:27:27
Тут я понимаю так, что всё же у рецепта есть множество вкусов, соотв.
сплю.

Alex
31.08.2017
10:30:52
DELETE FROM flavor WHERE recipeid = 1;

Google

Alex
31.08.2017
10:31:03
не удаляет recipe
DELETE FROM recipe WHERE ID = 1; так не удаляет flavor

Fike
31.08.2017
10:33:35
тебе что вообще надо удалять в зависимости от чего

Alex
31.08.2017
10:35:34
recipe.flavorid имеет несколько flavor.recipeid. Мне нужно при удалении recipe удалялись все flavor.recipeid, связанные с ним
А у меня получается, то одно удаляется другое остается, то наоборот

Fike
31.08.2017
10:37:41
нет никакого recipe.flavorid
а foreign key должен ссылаться на recipe.id

Alex
31.08.2017
10:38:23
CREATE TABLE flavor (
name TEXT,
drops INTEGER,
recipeid INTEGER REFERENCES recipe (id) ON DELETE CASCADE
ON UPDATE CASCADE
);

Виталий
31.08.2017
10:41:47
Разве не надо указать FOREIGN KEY для receipid?

Fike
31.08.2017
10:43:42

Alex
31.08.2017
10:43:52

Google

Fike
31.08.2017
10:47:32
зачем тебе колонка со случайным числом и на что влияет это равенство?

Alex
31.08.2017
10:49:08
Случайно число, чтобы избежать совпадений, т.е чтобы к рецепту не относились вкусы, не относящиеся к нему на самом деле
Равенство привязка вкусов к рецепту
Вы уже поняли.Но объясню еще раз, вдруг что упутил
Есть 2 таблицы. Вкус и Рецепт. Рецепт имеет связь один ко многим.Т.е рецепт может иметь один вкус или несколько.

Ilia
31.08.2017
10:54:17
И что удалять ?

Alex
31.08.2017
10:54:57
При удалении рецепта должны удаляться вкусы связанные с ним

Fike
31.08.2017
10:55:00

Ilia
31.08.2017
10:55:14
А если вкус связан с НЕСКОЛЬКИМИ рецептами ?
А один из них мы удаляем ?

Fike
31.08.2017
10:55:16
у каждого вкуса только один родительский рецепт, по этой связи все и выбирается

Alex
31.08.2017
10:57:29
Сейчас поясню

Ilia
31.08.2017
10:57:45
Тогда у вкуса должен быть составной PK, из рецепта и номера вкуса внутри рецепта.
ТОгда да.
У тебя кстати PK вообще нет...

Fike
31.08.2017
11:00:03

Ilia
31.08.2017
11:00:16
ТАК НАДО,...

Alex
31.08.2017
11:00:38
во flavorid нету, но все на вывод работает, на удаление нет. SELECT * FROM recipe LEFT JOIN flavor ON recipe.flavorid = flavor.recipeid WHERE id = ?" вывожу так

Ilia
31.08.2017
11:00:41
Не обязательно конечно, но логично было бы.

Google

Ilia
31.08.2017
11:00:49
Ладно, я похоже что-то пропусти.

Alex
31.08.2017
11:01:10
может так понятно, будет
могу ссылку на гитхаб дать.

Ilia
31.08.2017
11:03:06
Короче, всё правильно у тебя было изначально. Только мы тормоза.
(я в частности)

Alex
31.08.2017
11:03:33

Fike
31.08.2017
11:03:58
ссылаться на recipe.id

Alex
31.08.2017
11:04:58
Делаю на go. Хотел двумя DELETE FROM * WHERE recipeid = * и также для второй таблице
Но мне сказали каскад работает, но не у меня

Ilia
31.08.2017
11:05:37
Блю......

Fike
31.08.2017
11:05:47
PRAGMA foreign_keys = ON;
CREATE TABLE flavor (
id INTEGER PRIMARY KEY,
name TEXT,
recipe_id INTEGER REFERENCES recipe (id) ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE TABLE recipe (
id INTEGER PRIMARY KEY,
name TEXT
);
INSERT INTO recipe (id, name) VALUES (1, 'yummy recipe');
INSERT INTO flavor (id, name, recipe_id) VALUES (1, 'flavor', 1);
UPDATE recipe SET id = id + 1;
SELECT * FROM flavor;
-- 1|flavor|2
работает всё

Ilia
31.08.2017
11:06:52
1)
CREATE TABLE recipe (
id INTEGER PRIMARY KEY,
recipename TEXT,
bottleid INTEGER,
bottlesize INTEGER,
pg INTEGER,
vg INTEGER,
nicotine INTEGER,
date STRING,
note TEXT
);
CREATE TABLE flavor (
name TEXT,
drops INTEGER,
recipeid INTEGER REFERENCES recipe ON DELETE CASCADE );

Alex
31.08.2017
11:08:14
recipeid INTEGER REFERENCES recipe ON DELETE CASCADE ); ссылаться просто на recipe?
или recipe(id)

Ilia
31.08.2017
11:09:16
ПОфиг
Это одно и то же
ON UPDATE CASCADE убери, не используй.
Вообще никогда ключ не изменяй (update)

Alex
31.08.2017
11:12:49
DELETE FROM ? WHERE ? какой должен быть

Ilia
31.08.2017
11:13:29
DELETE FROM recipe WHERE ..... (что угодно)

Google

Alex
31.08.2017
11:31:25
при recipeid INTEGER REFERENCES recipe(id) все удаляется. но у меня получаться recipeid завязан flavorid. как быть в таком случае

Fike
31.08.2017
11:34:30
Он не завязан
Это иллюзия
Тут однонаправленная связь от recipe к flavor. Первый о втором ничего не знает.

Ilia
31.08.2017
11:35:56
Но что у него там завязано я тоже не понял

Alex
31.08.2017
11:37:40
Пример для одной записи. Если flavorid равен значению 386 и recipeid равен 386, нечего не удаляется, если recipeid равен 1, а flavorid 386 то все ок

Ilia
31.08.2017
11:38:02
1)
CREATE TABLE recipe (
id INTEGER PRIMARY KEY,
recipename TEXT,
bottleid INTEGER,
bottlesize INTEGER,
pg INTEGER,
vg INTEGER,
nicotine INTEGER,
date STRING,
note TEXT
);
CREATE TABLE flavor (
name TEXT,
drops INTEGER,
recipeid INTEGER REFERENCES recipe ON DELETE CASCADE );
Где ты тут вообще flavor ID видишь ?

Fike
31.08.2017
11:38:04
Результатов: примерно 390 000 (0,50 сек.)

Ilia
31.08.2017
11:38:33

Fike
31.08.2017
11:39:05

Alex
31.08.2017
11:39:39
ddl CREATE TABLE recipe (
id INTEGER PRIMARY KEY,
recipename TEXT,
bottleid INTEGER,
bottlesize INTEGER,
pg INTEGER,
vg INTEGER,
nicotine INTEGER,
date STRING,
note TEXT,
flavorid INTEGER
);

Ilia
31.08.2017
11:39:45
@etkee , ты если со мной хочешь общаться, Запомни простое правило. Есть два мнения. ОДно моё, другое неправильное.
Если у тебя вкус ссылается на рецепт , никакой флейвор в рецепте не нужен

Alex
31.08.2017
11:41:05
это как-то влияет

Fike
31.08.2017
11:41:07

Google

Ilia
31.08.2017
11:43:32
@etkee , однонаправленная связь — это в ООСУБД, или в иерархических, сетевых,
там связь в виде ссылки одного объекта на идентификатор другого.
Вот там связи однонаправленные. ДВунаправленных нет — это две встречные однонаправленные.
В РСУБД (БД) связей на самом деле вообще нет. Связи — это когда мы две записи связываем условием в запросе.
Но если считать, что они есть, то они двунаправленные, потому что с обоих сторон связи можно выбрать другую сторону с помощью запроса.
Ещё вопросы есть ?

Fike
31.08.2017
11:44:07
то есть внешних ключей не существует короче

Ilia
31.08.2017
11:44:31
FK это не связь, это констрейнт.
Он записывается с одной стороны (дочерней). Но связь при этом двунаправленная.

Fike
31.08.2017
11:46:08
так есть связь или нет

Ilia
31.08.2017
11:46:43
Ну, вообще, философский вопрос...
Нет, но когда она нужна — есть. ?

Fike
31.08.2017
11:47:29
я тоже в такие ответы ухожу, когда плаваю

Ilia
31.08.2017
11:47:39
Ладно, это на самом деле не очень поможет решению вопроса

thegrif
31.08.2017
11:48:21
/stat@combot

Combot
31.08.2017
11:48:22
combot.org/chat/-1001045152752

Alex
31.08.2017
11:48:25
Ты победитель
Ладно, это на самом деле не очень поможет решению вопроса

Ilia
31.08.2017
11:49:01
Я рад

thegrif
31.08.2017
11:50:06
Всем привет. Нужна помощь по MySQL. Есть две таблицы: