Нормальные курсоры (а не только в одну сторону и только на чтение).
Использование курсоров на запись в любую сторону есть ошибка проектирования.
Нормальные бинарные типы данных с фиксированной запятой (они хранятся в mysql как строки).
В mysql все хранится как строки, но быстродействие отнюдь не страдает.
Нормальные подзапросы (а не с ограничениями а-ля "вы не можете открывать одну и ту же таблицу в update-запросе дважды" - а бывает, что иначе нельзя, и приходится извращаться).
Запрос на открытие таблицы в update-запросе дважды уже является извращением.
Нормальные ошибки при вставке недопустимых данных (а не молчаливое конвертирование в null или 0).
Настраивается
Нормальное единообразие в поведении (а не "до этой версии функция возвращает в этом случае вот это, а после этой версии в том же случае будет другое".
Используй последнюю.
Нормальные роли, они же группы. С помощью которых можно легко и просто одной командой дать пользователю очень подробный и точный набор прав. В MySQL ролей нет, и КАЖДОМУ пользователю надо заново прописывать права, сколь бы длинным и подробным ни был скрипт.
Существует куча тулз, которые делают такое.
А то, что SQL, в отличие от многих языков, имеет стандарт. Который MySQL нарушает как хочет, причём в мануале это оправдывается пассажем "если мы считаем, что так будет эффективнее, мы поступим вопреки стандарту".
На С++ тоже есть стандарт, причем намного более логичный и эффективный в реализации, тем не менее, фирма-производитель VC++ на него кладет, как хочет. И хотел бы я посмотреть на БД, которая нигде и ни в чем стандарт не нарушает (и весь его реализует), конечно, если она будет давать хотя бы 10% скорости MySQL
MySQL, начиная с третьей версии уже считается базой данных, т.к. поддерживает и сложные запросы, и триггеры, и ХП и все остальные фишки.
гм...
Здесь постоянно всплывает тема про доступ к MySQL из .NET и на него постоянно отвечают, что достаточно просто скачать какой-то адаптер и все будет зашибись. Где же геморрой-то, а уж тем более полный?
Угу, у меня весь код написан под MS SQL Server, в т.ч. классы, кототорые заточены для работы с MS SQL Server, а я сейчас возьму подорвусь и побегу качать какие-то адаптеры, исключительно для того чтоб ... а собственно для чего????
У меня же есть бесплатный MS SQL Server Express которого хватит для разработки 90% баз данных (возможно, для продакшна не хватит, прийдется взрослые версии сиквела ставить).
Я уже не говорю о том что как правило на крутых тусовках, организовываемых Microsoft'ом можно получить бесплатно даже Standard и Enterprise версии SQL Server!
Рекомендую научиться строить своё собственное мнение, а не транслировать чужое.
Чтоб построить собственное мнение по поводу MySQL мне нужно установить это ... гм ... программное обеспечение на свой компьютер, который работает как часы, искать инфу как его управлять, как с ним работать и т.п., чтоб потом с матюками снести к чертовой матери. Нет, этот расклад меня не устраивает, поэтому мнения о некоторых продуктах мне приходится составлять из суждений других людей, которые сталкиваются с этим каждый день.
Немного новостей:
Извини, нет сейчас времени искать ссылки по поводу того кто и когда переходит на SQL Server, но если появится, обязательно поищу.
Считывание музыки из мозга (ну почти из мозга. Микрофон все-таки нужен) у меня в разработке, как доделаю, выложу на публичный бета-тест.
GSerg, когда в Москве будешь?
Использование курсоров на запись в любую сторону есть ошибка проектирования.
А и не надо на запись в обе. На чтение дайте в обе. А нету. "Cursors are currently asensitive, read-only, and non-scrolling."
В mysql все хранится как строки, но быстродействие отнюдь не страдает.
Ой ли? int и float хранятся как int и float. Другие тоже.
Запрос на открытие таблицы в update-запросе дважды уже является извращением.
Во-первых, открытие таблицы дважды отнюдь не извращение. Это очень, очень частый приём (дать два разных алиаса одной таблице и соединить их по inner или left join).
Хотя я имел в виду не в запросе дважды, а в подзапросе.
Задача: поставить "5" человеку(-ам), набравшему максимальный балл. Естественный запрос:
UPDATE mytable
SET mark = 5
WHERE ball = (SELECT MAX(ball) FROM mytable)
Этот простейший, примитивнейший запрос тупо не скомпилируется. Ибо, видите ли, "Currently, you cannot update a table and select from the same table in a subquery". И это новейшая версия 5.1.
Настраивается
Ага. Только порой приходится работать с базой, где ты не может настроить всё как надо ибо "дано". Вот тогда и плюёшься, вспоминая, что в других базах такой фигни как молчаливый конверт лажи в ноль нет.
Используй последнюю.
Дали тебе биллинг
К нему идёт версия базы такая-то.
Рискнёшь сам обновить? Будешь отвечать за все вылезшие при этом несовместимости версий? Будешь отвечать на звонки пользователей, у которых всё не работает? Сможешь убедить начальство пойти на этот шаг?
Существует куча тулз, которые делают такое.
Похвалялась репа народу: "До чего же я сладкая с мёдом!"
Мёд улыбнулся её похвальбе: "А я вот сладок сам по себе"
(c)
На С++ тоже есть стандарт, причем...
Дык почему же про "нарушения" стандарта C++ никто не говорит, а про игрища mysql-цев со стандартом sql слухами земля полнится?
если вдруг не дай бог встретимся на каком-то съезде vbnet-чиков
Моё отношение к .net весьма неоднозначно и многогранно; одной из граней является ужас от количества реально ни черта не знающих "программистов", появлению которых эта "облегчающая труд" платформа способствовала. Так сказать, IQ-планка была понижена, и началось. Обидно.
А и не надо на запись в обе. На чтение дайте в обе.
Зачем?
Ой ли? int и float хранятся как int и float. Другие тоже.
Сорри, перепутал с SQLite. Чем тебя не устраивают типы данных MySQL?
Этот простейший, примитивнейший запрос тупо не скомпилируется.
Первая же ссылка в гугле: http://xaprb.com/blog/2006/06/23/how-to-select-from-an-update-target-in-mysql/
А что мне делать, если у меня будет такая же ошибка? Звонить в техподдержку Майкрософт?
Только порой приходится работать с базой, где ты не может настроить всё как надо ибо "дано". Вот тогда и плюёшься, вспоминая, что в других базах такой фигни как молчаливый конверт лажи в ноль нет.
Мне кажется, или совать лажу в БД уже плохо?
Дали тебе биллинг
После теста, который покажет либо корректность работы, либо кривизну биллинга, думаю, мне не составит труда предложить переход на новую версию MySQL, либо на менее кривой биллинг.
Похвалялась репа народу: "До чего же я сладкая с мёдом!"
Мёд улыбнулся её похвальбе: "А я вот сладок сам по себе"
Тебе не показалось логичным, что за деньги, которые получают МС за свою СУБД, можно написать намного больше плюшек-финтифлюшек к своему продукту, чем за просто так напишет AB?
Дык почему же про "нарушения" стандарта C++ никто не говорит, а про игрища mysql-цев со стандартом sql слухами земля полнится?
Ты просто мало с ним работаешь. Мне каждую неделю встречаются переругивания между C++никами на тему различий в толковании стандартов у VC, gcc и Comeau.
Моё отношение к .net весьма неоднозначно и многогранно; одной из граней является ужас от количества реально ни черта не знающих "программистов", появлению которых эта "облегчающая труд" платформа способствовала.
Во, правильная мысль. Только слишком толерантно сформулирована
А шоб було.
Знаешь, у рекордсета есть метод MovePrevious, не зря ить?
А на запись? Односторонний курсор на запись ессь? Нет
Чем тебя не устраивают типы данных MySQL?
Тем, что фиксированная запятая не бинарная и, следовательно, медленная. Если бы это было не так и всё было бы ок, переход на бинарные фиксированные типы не был бы заявлен в версии 5.0.3, правда?
Первая же ссылка в гугле: http://xaprb.com/blog/2006/06/23/how-to-select-from-an-update-target-in-mysql/
Я прекрасно знаю об этом воркэраунде, равно как о других. Только ты посмотри внимательно на код этого запроса, а также на объяснения вокруг него. Он создаёт во временной таблице полную копию текущей. Т.е. если у тебя 100 млн строк, сервер начнёт их копировать, пока не станет 200 млн, потом сделает наконец выборку, и потом грохнет вторые 100 млн. Спасибо, мне такое счастье не надо.
А что мне делать, если у меня будет такая же ошибка? Звонить в техподдержку Майкрософт?
Во-первых, такая ошибка в MS SQL Server у тебя не возникнет, в нём этой проблемы нет.
Во вторых, все (я подчёркиваю, все) особенности T-SQL настолько ясно прописаны в BOL (документация к SQL Server), что все воркэраунды, если таковые понадобятся, ты найдёшь именно там.
Кстати! Вот ещё один пункт. По структурированности и чёткости документация SQL Server на порядок превосходит таковую в mySQL.
Мне кажется, или совать лажу в БД уже плохо?
Вопрос не понят; повторите вопрос.
После теста, который покажет либо корректность работы, либо кривизну биллинга, думаю, мне не составит труда предложить переход на новую версию MySQL, либо на менее кривой биллинг.
Ты упускаешь из виду объём работ
Биллинг - это сотни (и тысячи) затраченных на разработку человеко-лет. Столько же тебе потребуется для гарантирования того, что НИГДЕ не вылезет неожиданный баг (а не только в 10 окошках, которые ты проверил).
Тебе не показалось логичным, что за деньги, которые получают МС за свою СУБД, можно написать намного больше плюшек-финтифлюшек к своему продукту, чем за просто так напишет AB?
Так версии Express не стоят ничего, это раз, и ещё - вот я так смотрю и думаю: а куда ж ещё плюшек-то?
Знаешь, у рекордсета есть метод MovePrevious, не зря ить?
А хз, не юзал и даже надобности не ощущал.
Тем, что фиксированная запятая не бинарная и, следовательно, медленная.
Скорость всего остального это с лихвой компенсирует.
Он создаёт во временной таблице полную копию текущей. Т.е. если у тебя 100 млн строк, сервер начнёт их копировать
В современных СУБД создание временной таблицы происходит на основе имеющихся. Если у тебя параллельно с этим делом не идет еще куча левых транзакций, можно считать, что mysql обойдется битмапом для отметки, какие строки использовать.
Во-первых, такая ошибка в MS SQL Server у тебя не возникнет, в нём этой проблемы нет.
Я не говорю про точно такую же. Я говорю вообще про ошибку, которая может возникнуть в работе.
По структурированности и чёткости документация SQL Server на порядок превосходит таковую в mySQL.
Глядя на MSDN, у меня появляются смутные сомнения относительно совпадения понимания нами слов "структурированность и четкость".
Вопрос не понят; повторите вопрос.
Ты жалуешься, что если сувать лажу в mysql, то он не орет. А зачем ты суешь ему лажу?
Биллинг - это сотни (и тысячи) затраченных на разработку человеко-лет. Столько же тебе потребуется для гарантирования того, что НИГДЕ не вылезет неожиданный баг (а не только в 10 окошках, которые ты проверил).
Перечисли, плз, составные части биллинга с примерным указанием трудоемкости разработки каждой, и выдели из них те, которые
1) активно и сложно обращаются к БД, используя специфические конструкции, поведение которых будет изменено в следующих версиях.
2) могут ввиду 1) вызвать ошибки в работе при переходе на новую версию СУБД
3) специфичны именно к обновлениям mysql, а на любых других СУБД при любых их обновлениях работают по прежнему
Так версии Express не стоят ничего, это раз, и ещё - вот я так смотрю и думаю: а куда ж ещё плюшек-то?
Нужно учитывать, что Express-версии - это чистый маркетинг, который МС вполне может себе позволить без особых затрат. Видел где-нибудь на платных хостингах MS SQL Express?
Если у тебя параллельно с этим делом не идет еще куча левых транзакций
Иными словами, не работают ли пользователи с базой? Ещё как работают, всей толпой. С транзакциями, да. InnoDB поэтому стоит.
Глядя на MSDN, у меня появляются смутные сомнения относительно совпадения понимания нами слов "структурированность и четкость".
А ты BOL поставь, а не MSDN. А потом сравни с refman-5.1-en.chm.
Ты жалуешься, что если сувать лажу в mysql, то он не орет. А зачем ты суешь ему лажу?
А затем, что допустимость данных определяется базой. В результате, работая с нормальной базой, я могу передать введённое пользователем сразу туда. И если это была лажа с т.з. бизнес-правил, прописанных в базе, база об этом скажет. И я смогу изменить эти правила, если мне будет надо, прямо в базе, не перекомпилируя клиентов. Поэтому реакция базы на ввод лажи весьма актуальна.
1) Я понятия не имею, как каждая часть обращается к базе. В том и фишка. Тебе это никто не покажет. Это исходники биллинга. Обновления приходят из Москвы, из конторы, которая этим занимается. Разумеется, в бинарном виде.
2) см. 1)
3) см. в refman-5.1-en.chm и refman-4.1-en.chm изменения, произошедшие в дефолтном поведении / поведении в определённых условиях. Особое внимание обращай на обороты "до версии х.хх возвращается одно, после версии х.хх другое". В SQL Server такого не встречал.
Нужно учитывать, что Express-версии - это чистый маркетинг
А я их использую в написании прог, да.
Видел где-нибудь на платных хостингах MS SQL Express?
Веб-разработками не занимаюсь, поэтому и не видел.
Моё отношение к .net весьма неоднозначно и многогранно; одной из граней является ужас от количества реально ни черта не знающих "программистов", появлению которых эта "облегчающая труд" платформа способствовала. Так сказать, IQ-планка была понижена, и началось. Обидно.
В Microsoft протупили - им надо продавать студии только после предъявления результатов прохождения сертификационного экзамена!