Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / MySQL Новый топик    Ответить
 --- или еще одна тема для FAQ  [new]
Users
Member

Откуда:
Сообщений: 339
Цензурных слов осталось мало, но попробую.

MySQL 5.5.28 and Toad.

Был некий код. Приводить его смысла нет, и в нем был комментарий

--- вставка

Код этот выдавал ошибку, хотя я перепроверил все, что только было можно. Причем красным было подсвечено все на свете.

На стадии "я убью тебя, лодочник", пришло в голову скопировать процедуру в другое окно. По счастию - рядом был открыт dbForce, русскую версию которого использую для бекапов, коих в самом Toad найти не могу. И этот dbForce мне подсветил именно три дефиса. И все, сразу заработало...

Друзья! Товарищи! Сукины дети! Да как же можно так жить?! :( Да как же можно не выдавать ошибку осмысленную?!

Уважаемый модератор. Не бейте меня по голове плюсометом, а добавьте, плиз, это в фак с "грабли".
7 дек 12, 00:14    [13591168]     Ответить | Цитировать Сообщить модератору
 Re: --- или еще одна тема для FAQ  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 15944
По-моему, даже дети знают, что после двух тире следует ставить пробел...
7 дек 12, 00:29    [13591209]     Ответить | Цитировать Сообщить модератору
 Re: --- или еще одна тема для FAQ  [new]
miksoft
Member

Откуда:
Сообщений: 36325
Да, пробел после двух тире даже документирован.

Плюсометом бить не буду, но давайте все будущие предложения по темам для FAQ писать в этом топике.
Просто банально потому, что если будет множество топиков, то часть я потеряю.
7 дек 12, 00:44    [13591259]     Ответить | Цитировать Сообщить модератору
 Re: --- или еще одна тема для FAQ  [new]
Users
Member

Откуда:
Сообщений: 339
miksoft
Да, пробел после двух тире даже документирован.

Плюсометом бить не буду, но давайте все будущие предложения по темам для FAQ писать в этом топике.
Просто банально потому, что если будет множество топиков, то часть я потеряю.



Не вопрос. Назовите его: "для тех, кто переходит с MS SQL или "это невозможно понять, это надо запомнить".

0. Точка с запятой в конце инструкции - обязательна. Однако при выполнении из командной строки сразу многих инструкций - точка с запятой заменяется на что-нибудь другое, иначе каждая инструкция сразу идет на сервер. для замены служит инструкция DELIMETER.

1. Alter procedure не дает нам изменить всю процедуру, а лишь ее метаданные. для внесения изменений в код процедуру нужно дропнуть и создать заново.

2. Для колонок внешнего ключа обязательна строгая типизация. Так же можно использовать допопцию UNSIGNED, которая даст нам только целые числа, но за счет этого увеличит разрядность.

3. Теоретически можно писать просто INT. На практике - лучше указывать его разрядность, INT(11).

3. Переименовать колонку, по которой сделан ключ - нельзя. Только полное удаление и создание заново.

4. IF требует THEN.

5. Вместо raiserror - используете SIGNAL SQLSTATE '45000'; где 45000 - неизвестная пользовательская ошибка.

6. Бекап - это не бекап. Т.е. не привычное нам некое бинарное файло, а просто скрипт создания базы, в который полностью прописаны данные в том числе. Простыми инсертами.

7. Для создания/восстановления бекапов лично я использую dbForce russian. Там это просто и удобно.
Однако для разработки использовать русское окружение - кошмарно, а английская версия не дает сделать нормальный бекап, если ее не купишь.

8. Как среда разработки мне лично более всего подошел Toad - он бесплатен и дает настроить среду под те же хотки, что и Management studio.
7 дек 12, 11:20    [13592753]     Ответить | Цитировать Сообщить модератору
 Re: --- или еще одна тема для FAQ  [new]
Users
Member

Откуда:
Сообщений: 339
Akina,

Дети - может и знаю. А те, кто двадцать лет работал в ms sql - знают, что ----------------- - нет никаких проблем написать. А еще они, ms sqlщики, знают, что ошибка им будет подсвечена не по всей процедуре, и гадай, где же она, а именно в том месте, где написано неверно.
7 дек 12, 11:22    [13592777]     Ответить | Цитировать Сообщить модератору
 Re: --- или еще одна тема для FAQ  [new]
miksoft
Member

Откуда:
Сообщений: 36325
Users,

2. Про UNSIGNED написано слишком неточно.

3. Про разрядность в скобках - миф.

3. Уточните, нужно удаление/создание ключа или колонки?

7. Чем именно кошмарно? (я не отрицаю, просто непонятно).

8. Что такое Management studio?
7 дек 12, 13:22    [13593964]     Ответить | Цитировать Сообщить модератору
 Re: --- или еще одна тема для FAQ  [new]
Users
Member

Откуда:
Сообщений: 339
miksoft,

1. я и не отрицаю, что пока еще чайник, если что. :)
2. Про разрядность в скобках - стопроцентно натолкнулся на то, что одна из программ написание просто Id_Noun int - воспринимает как ошибку. С десяток их перепробовал.
3. Мне нужно было просто переименовать колонку Id_Nnoun, опечатка в ней. В Ms sql просто нажимается кнопка f2 и пишется новое название. Здесь мне сказали: не могу! причем сказали как обычно error of rename - и гадай сам, почему это. Не исключаю, кстати, что это особенность Toad for MySQL.

7. Да это личная особенность, с русскими версиями программ вообще не работаю.
8. Менеджмент студия, коллеги - это ВЕЩЬ. :) Среда разработки ms sql.
Тоже не без недостатков, конечно, но многое из того, что в mysql нельзя, там - можно и очень легко.
7 дек 12, 13:36    [13594110]     Ответить | Цитировать Сообщить модератору
 Re: --- или еще одна тема для FAQ  [new]
Users
Member

Откуда:
Сообщений: 339
miksoft,

1. я и не отрицаю, что пока еще чайник, если что. :)
2. Про разрядность в скобках - стопроцентно натолкнулся на то, что одна из программ написание просто Id_Noun int - воспринимает как ошибку. С десяток их перепробовал.
3. Мне нужно было просто переименовать колонку Id_Nnoun, опечатка в ней. В Ms sql просто нажимается кнопка f2 и пишется новое название. Здесь мне сказали: не могу! причем сказали как обычно error of rename - и гадай сам, почему это. Не исключаю, кстати, что это особенность Toad for MySQL.

7. Да это личная особенность, с русскими версиями программ вообще не работаю.
8. Менеджмент студия, коллеги - это ВЕЩЬ. :) Среда разработки ms sql.
Тоже не без недостатков, конечно, но многое из того, что в mysql нельзя, там - можно и очень легко.
7 дек 12, 13:39    [13594135]     Ответить | Цитировать Сообщить модератору
 Re: --- или еще одна тема для FAQ  [new]
miksoft
Member

Откуда:
Сообщений: 36325
0. Про точку с запятой тоже не совсем точно. Она нужна не всегда. Хотя, вроде бы, никогда не мешает.

Users
2. Про разрядность в скобках - стопроцентно натолкнулся на то, что одна из программ написание просто Id_Noun int - воспринимает как ошибку. С десяток их перепробовал.
Можно поподробнее? даже со скриншотами?

Users
8. Менеджмент студия, коллеги - это ВЕЩЬ. :) Среда разработки ms sql.
Тоже не без недостатков, конечно, но многое из того, что в mysql нельзя, там - можно и очень легко.
Это все-таки продукты сильно разного класса, так что напрямую их сравнивать нельзя.
Хотя, конечно, соглашусь, что MySQL (и окружающая экосистема) сильно уступает лидирующим СУБД.
7 дек 12, 13:44    [13594199]     Ответить | Цитировать Сообщить модератору
 Re: --- или еще одна тема для FAQ  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 15944
Users
0. Точка с запятой в конце инструкции - обязательна.

Неверно.
Символ разделения команд (Delimiter) - действительно обязателен. Точка с запятой - всего лишь символ-разделитель по умолчанию. Однако никто не запрещает настроить другой символ-разделитель (или группу символов, которая будет разделителем) и использовать его.
mysql> delimiter @@
mysql> create table test (id int)@@
Query OK, 0 rows affected (0.06 sec)

mysql> insert into test values (1),(3),(2)@@
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from test@@select id,5-id id2 from test order by id desc@@
+------+
| id   |
+------+
|    1 |
|    3 |
|    2 |
+------+
3 rows in set (0.00 sec)

+------+------+
| id   | id2  |
+------+------+
|    3 |    2 |
|    2 |    3 |
|    1 |    4 |
+------+------+
3 rows in set (0.02 sec)

mysql> drop table test@@
Query OK, 0 rows affected (0.01 sec)

mysql> delimiter ;
mysql>
7 дек 12, 15:02    [13595069]     Ответить | Цитировать Сообщить модератору
 Re: --- или еще одна тема для FAQ  [new]
javajdbc
Member

Откуда: Montreal
Сообщений: 17139
предлагаю вот этот мой пост...

http://www.sql.ru/forum/actualthread.aspx?tid=740218&pg=1&mid=8434456#8434456

а также недавние эксперименты bochkov'a выделить
в некий ФАК -- типа -- специальные случаи
использования переменных.

Кроме переменных, имеет смысл перечислить все стандартные методы
работы со списками в мускл, FIND_IN_SET, LOCATE, etc....
в контексте задач типа как заставить работать такой код:

...WHERE t.id in ('3,4,5,6,7')....
16 дек 12, 23:37    [13640230]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: --- или еще одна тема для FAQ  [new]
Progrom
Member

Откуда:
Сообщений: 2
Ну 3 тире это круто )

А мне кажется что комментарий типа "-- коммент" вообще лучше не пользовать ибо не везде работает. Добавлял дамп через phpmyadmin и всё с ошибками (хотя там было верно "-- проблем надпись"), а вот например в workbench всё прекрасно поставилось. Этот инцидент кстати вызвал не хило отвращение от комментария данного вида. Тем более что:
# Он не единственный
/* НУ блин
Совсем, со-
Всем
не единственный */
5 дек 14, 15:29    [16956392]     Ответить | Цитировать Сообщить модератору
 Re: --- или еще одна тема для FAQ  [new]
JeStone
Member

Откуда:
Сообщений: 248
Users
А еще они, ms sqlщики, знают, что ошибка им будет подсвечена не по всей процедуре, и гадай, где же она, а именно в том месте, где написано неверно.

Что вам мешало в том же dbForce dbForge пройти по процедуре в режиме отладки? Спокойно... пошагово... не нервничая...

Users
5. Вместо raiserror - используете SIGNAL SQLSTATE '45000'; где 45000 - неизвестная пользовательская ошибка.

В MS SQL вместо GROUP_CONCAT используются всевозможные трюки типа
SELECT     empName, projIDs = replace
                          ((SELECT Surname AS [data()]
                              FROM project_members
                              WHERE  empName = a.empName
                              ORDER BY empName FOR xml path('')), ' ', REQUIRED SEPERATOR)
FROM         project_members a
WHERE     empName IS NOT NULL
GROUP BY empName

Но вы же из-за этого не кричите на каждом шагу какой он плохой?
И чем же по вашему SIGNAL SQLSTATE хуже чем
Users
RAISERROR ('Error raised',16,1);

Тем, что не привычно?

Users
8. Менеджмент студия, коллеги - это ВЕЩЬ. :) Среда разработки ms sql.

Та самая вещь, IntelliSense которой без лишних плагинов вызывает стойкое желание убивать. Особенно меня "радует" поведение по умолчанию, когда при нажатии пробела она авто-дополняет код.
5 дек 14, 16:10    [16956733]     Ответить | Цитировать Сообщить модератору
 Re: --- или еще одна тема для FAQ  [new]
JeStone
Member

Откуда:
Сообщений: 248
вот чорд, обманул Progrom, я и не заметил, что между сообщениями аж 2 года =(
5 дек 14, 16:11    [16956742]     Ответить | Цитировать Сообщить модератору
Все форумы / MySQL Ответить