Я не понимаю, как работает триггер в этом случае. Как последний ордер id равен 3, 2, 1 - PullRequest
0 голосов
/ 26 марта 2020

> CREATE TABLE widgetCustomer ( id INTEGER PRIMARY KEY, name TEXT,
> last_order_id INT ); CREATE TABLE widgetSale ( id INTEGER PRIMARY KEY,
> item_id INT, customer_id INT, quan INT, price INT );
> 
> INSERT INTO widgetCustomer (name) VALUES ('Bob'); INSERT INTO
> widgetCustomer (name) VALUES ('Sally'); INSERT INTO widgetCustomer
> (name) VALUES ('Fred');
> 
> SELECT * FROM widgetCustomer;
> 
> CREATE TRIGGER newWidgetSale AFTER INSERT ON widgetSale
>     BEGIN
>         UPDATE widgetCustomer SET last_order_id = NEW.id WHERE widgetCustomer.id = NEW.customer_id;
>     END ;
> 
> INSERT INTO widgetSale (item_id, customer_id, quan, price) VALUES (1,
> 3, 5, 1995); INSERT INTO widgetSale (item_id, customer_id, quan,
> price) VALUES (2, 2, 3, 1495); INSERT INTO widgetSale (item_id,
> customer_id, quan, price) VALUES (3, 1, 1, 2995); SELECT * FROM
> widgetSale; SELECT * FROM widgetCustomer;

В столбце идентификатора последнего заказа выводится 3,2,1, но когда я изменяю значения на 2,3,1, вывод будет 3,1,2. Я не понимаю почему? Что же делает NEW?

1 Ответ

0 голосов
/ 26 марта 2020

Ваш запрос:

SELECT *
FROM widgetCustomer

не имеет ORDER BY. Таким образом, результаты представлены в произвольном порядке . Если вы хотите получить результаты в определенном порядке, вам нужно предложение ORDER BY.

Помните: SQL таблицы представляют неупорядоченные наборы. Там нет порядка, если вы не предоставите явно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...