Задавайте вопросы, мы ответим
Вы не зашли.
вероятно DELIMITER не сменили
Неактивен
да вы правы дело именно в этом, забыл сменить.
Неактивен
А можно автоматически заполнять колонки в таблице?
Допустим есть таблица:
create table book (
id int not null primary key,
name char(80),
count int not nutll,
price int not nutll,
sum int not null,
);
Как то можно заполнить колонку sum автоматически? чтобы подставлялось что-то вроде sum= count * price
пробовал с помощью триггера, ругается что нельзя изменять данные в той таблице из которой вызывается триггер.
Неактивен
триггер должен быть before
ещё есть генерируемые колонки
Неактивен
Спасибо по поводу генерируемых колонок интересно почитаю.
Но нашел еще один способ прямо в выборке (
select count, price, (count*price) AS sum from book;
Неактивен
Как сделать сортировку по 2 столбцам?
id_book | name_shop | count
---------------------------------------
111 Shop1 1
111 Shop1 1
333 Shop1 1
444 Shop2 1
Сортировку по name_shop и id_book (чтобы можно было узнать информацию о том сколько книг продали в конкретно магазине)
count name_shop
-------------------------
2 Shop1
1 Shop2
Неактивен
перечисляете поля через запятую
только сортировку или группировку?
имхо у вас группировка по одному полю и подсчет уникальных count(distinct )
Неактивен
Да Группировку это я не так написал извиняюсь. Чтобы в результате получился вывод как во второй таблице
Неактивен
select count(distinct id_book), name_shop ... group by name_shop
Неактивен
спасибо тебе все получилось!
Неактивен
Как сохранить базу данных?
Например я создал базу данных, в ней необходимые таблицы, затем их заполнил. И как мне теперь их сохранить чтобы на другом компьютере все это можно было восстановить?
Почитал что делают вот такой командой:
mysqldump -u USER -pPASSWORD DATABASE > dump.sql
я в консоли mysql ввожу SELECT user(); в ответ получаю (root@localhost)
далее пароль который я ввожу при подключении к mysql ( 123456 )
База данных у меня называется test;
В результате я пишу такую команду:
mysqldump -u root -p123456 test > dump.sql
Выдается ошибка что нарушен синтаксис. Что у меня не так?
Неактивен
Неактивен
Есть какой-нибудь способ отменить ввод данных если произошло определенное условие?
Допустим в наличии есть 3 экземпляра одной книги. 3 человека ее купили, а если 4 захочет купить тогда операция не пройдет.
Есть таблица книги:
create table book (
id int not null primary key,
coun_book int not null, //количество книг
name_book char(80)
);
покупатели
create table customer (
id int not null,
name_user char(20),
id_books int
foreign key(id_books) references book(id)
);
insert into book values(1, 3, 'Book1');
insert into customer values(1, 'Vasya' 1); - купили 1 книгу
insert into customer values(2, 'Petya' 1); - купили 2 книгу
insert into customer values(3, 'Dima' 1); - купили 3 книгу
insert into customer values(4, 'Roma' 1); - а вот это строка уже не должна сработать потому что уже все книги распроданы.
Можно ли это как-то реализовать?
Неактивен
при вставке в триггере проверять
https://sqlinfo.ru/forum/viewtopic.php?id=7650
Неактивен
create table book (
id int not null primary key,
count_book int not null,
name_book char(80)
)engine=innodb;
create table customer (
id int not null,
name_user char(20),
id_books int,
foreign key(id_books) references book(id)
)engine=innodb;
DELIMITER $$
CREATE TRIGGER new_profile BEFORE INSERT ON customer
for each row
begin
declare colvo int;
select count_book from book where id = NEW.id_books INTO colvo;
if(colvo < 4) THEN
select * from xxx;
end if;
END $$
DELIMITER ;
выдает ошибку: Not allowed to return a result set from a trigger
нашел тему тут на форуме https://sqlinfo.ru/forum/viewtopic.php?id=7096
вроде все пишу как там но не работает.
Неактивен
select * from xxx;
в триггере нельзя использовать select без into
Неактивен
Vasya спасибо тебе огромнейшее за твою помощь!!!
Если бы не ты я бы с этим разбирался еще очень и очень долго. Столько всяких нюансов которые совсем не очевидны.
Неактивен