SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 05.10.2018 13:12:17

platedz
Активист
Зарегистрирован: 27.03.2012
Сообщений: 285

Блокировка таблицы за запись

Подскажите, возможно ли заблокировать таблицу на запись, чтобы update и select работали а Insert into нет


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#2 05.10.2018 15:20:04

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6691

Re: Блокировка таблицы за запись

Можно сделать ограничение по правам. Можно написать триггер, который будет вызывать исключение при вставке.

Неактивен

 

#3 05.10.2018 16:11:29

platedz
Активист
Зарегистрирован: 27.03.2012
Сообщений: 285

Re: Блокировка таблицы за запись

Это как?


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#4 05.10.2018 16:35:33

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6691

Re: Блокировка таблицы за запись

GRANT SELECT, UPDATE ON dbname.tablename TO username@hostname IDENTIFIED BY 'password';

CREATE TRIGGER bi_tablename BEFORE INSERT ON tablename FOR EACH ROW SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Inserts are prohibited';

Неактивен

 

#5 05.10.2018 16:58:38

platedz
Активист
Зарегистрирован: 27.03.2012
Сообщений: 285

Re: Блокировка таблицы за запись

Подскажите, пожалуйста. Сейчас делаю триггер, просто для начала, чтобы разобраться, а потом думаю уже инструкцию написать более конкретную

CREATE TRIGGER `base`.`after_table`
AFTER INSERT ON `table` FOR EACH ROW BEGIN
INSERT INTO `table2` SET `name`='text';
END


Получаю ошибку
/* Ошибка SQL (1064): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 3 */


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#6 05.10.2018 17:01:53

platedz
Активист
Зарегистрирован: 27.03.2012
Сообщений: 285

Re: Блокировка таблицы за запись

Хотя отдельно третья строка выполняется.


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#7 05.10.2018 17:19:42

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5516

Re: Блокировка таблицы за запись

delimiter забыли
MySQL error 1064

Неактивен

 

#8 05.10.2018 17:45:40

platedz
Активист
Зарегистрирован: 27.03.2012
Сообщений: 285

Re: Блокировка таблицы за запись

Самое большое спасибо Вам изо всех возможных


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#9 05.10.2018 18:07:23

platedz
Активист
Зарегистрирован: 27.03.2012
Сообщений: 285

Re: Блокировка таблицы за запись

Подскажите, пожалуйста. А как бы мне теперь что-то на вроде этого сделать

DELIMITER |
CREATE TRIGGER `base`.`table`
AFTER INSERT ON `table` FOR EACH ROW BEGIN
if((SELECT COUNT(*) FROM `table`) >10)
INSERT INTO `table2` SET `name`='qweqwe';
END;

Отредактированно platedz (05.10.2018 18:14:15)


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#10 06.10.2018 13:09:10

platedz
Активист
Зарегистрирован: 27.03.2012
Сообщений: 285

Re: Блокировка таблицы за запись

Вы хоть скажите, можно так или нет?


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#11 06.10.2018 16:01:52

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5516

Re: Блокировка таблицы за запись

Неактивен

 

#12 06.10.2018 16:23:01

platedz
Активист
Зарегистрирован: 27.03.2012
Сообщений: 285

Re: Блокировка таблицы за запись

Что-то не выходит с подзапросом, а можно на примере, пожалуйста


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#13 06.10.2018 16:40:52

platedz
Активист
Зарегистрирован: 27.03.2012
Сообщений: 285

Re: Блокировка таблицы за запись

IF TRUE THEN 
select connt(*) from table;
END IF;

Даже так не выходит


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#14 06.10.2018 16:46:38

platedz
Активист
Зарегистрирован: 27.03.2012
Сообщений: 285

Re: Блокировка таблицы за запись

IF true THEN
select 1;
END IF;

и так тоже не выходит


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#15 06.10.2018 16:56:04

platedz
Активист
Зарегистрирован: 27.03.2012
Сообщений: 285

Re: Блокировка таблицы за запись

Так работает
select if(true,1,2);
А так нет
if true then select 1; else select 2; end if;


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

#16 06.10.2018 18:08:47

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5516

Re: Блокировка таблицы за запись

if .. end if применяется внутри хранимого кода: триггеры, процедуры
показывайте пример полностью

Неактивен

 

#17 06.10.2018 19:19:18

platedz
Активист
Зарегистрирован: 27.03.2012
Сообщений: 285

Re: Блокировка таблицы за запись

А ну тогда все нормально. СПС


Wazzup.su - это сервис объединивший в себе все в одном.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson