1. SQL / Говнокод #18420

    −160

    1. 1
    2. 2
    ALTER TABLE db.table ADD CONSTRAINT cu_contents UNIQUE (contents(128));
    ALTER TABLE db.table DROP INDEX cu_contents;

    Создал констрейнт, удал индекс. Загадки Майсиквела.

    Запостил: wvxvw, 30 Июня 2015

    Комментарии (51) RSS

    • > Загадки Майсиквела.
      дык в итоге что происходит-то?
      оракл, например, не даст дропнуть такой индекс
      Ответить
      • Ну просто в остальных диалектах, что создал, то и удалил, и только в мускуле создаем констрейнт а удаляем индекс. Т.е. удалить констрейнт нельзя, это будет ошибкой синтаксиса.
        Ответить
        • В MySQL уникальность считается не констрейнтом, а свойством индекса. Потому удаление индекса и удаляет «констрейнт» UNIQUE.

          А слово CONSTRAINT в MySQL принято использовать только для внешних ограничений.
          Ответить
          • Но когда я смотрю в таблицу: information_schema.table_constraints то вижу там CONSTRAINT_TYPE = UNIQUE.
            И вообще, почему они так считают в мускуле - это их личное, персональное горе. Если добавлял констрейнт, то почему констрейнт нельзя так же удалить?
            Ответить
            • Значит, я глупость сморозил...

              Синтаксис описан тут: http://dev.mysql.com/doc/refman/5.7/en/alter-table.html

              Любые манипуляции с индексом (за исключением FOREIGN KEY) только через удаление. Я не копался во внутренностях MySQL, но может быть, у них для уникального и неуникального индекса физическая структура разная, поэтому требуется удалять и перестраивать с нуля?

              P.S. Хотя всё равно странно. Они же могли бы и перестроить индекс за пользователя.
              Ответить
              • прошу прощения у почтенной публики, но сослепу подумал, что речь идёт в топике про m$$ql

                а т.к. это всего лишь дерьмускул, то
                > могли бы
                нет, не могли

                это как кагпин не тгенег, так и mysql не субд
                Ответить
                • mysql не субд

                  Чего ? Ты кого на хуй послал?
                  Ответить
                  • Разработчиков мускуля

                    Вася, не бугурть, все знают, что мускуль говно
                    Ответить
                    • кто знает?
                      Я вот не знаю. Я хочу вот, что бы для дураков. мускуль говно потому, что .......
                      А то пацаны сказали, что Машка проститутка, и всё.
                      Были претензии от @roman-kashitsyn но я не согласен сним есть в мускуле констрейнты, джоины и транзакции.

                      В него даже триггеры завезли хрен знает с какой версии. И умеет он INSERT ... ON DUPLICATE KEY UPDATE кто еще так умеет?


                      А то года два назад только и разговоров было NoSql, NoSql. И чего кто нить юзает только NoSql СУБД ? да хрен.

                      РАзговоры стихли теперь вот слышу постоянно mysql говно. Ок говно тогда покажи как ты его "готовишь" и он говно.

                      А то блядь заведут таблиц в myisam а потом бургутят транзакций нет. Вот Я всё сказал.
                      Ответить
                      • Почему количество человк использующие какой-то продукт влияет на качество этого продукта?
                        В истории программирования предостаточно случаев, когда говнотехнологии продолжают существовать десятилетиями после того, как появились лучшие аналоги (ПХП, Кобол, С++, Ява, формат пересылки эл. почты и т.д.).

                        Примеров с Мускулом дофига, ну вот что-то простенькое:

                        MariaDB [test]> create table test (id int not null auto_increment primary key, test text);
                        Query OK, 0 rows affected (0.24 sec)
                        
                        insert into test (id, test) values (0, 'test');
                        MariaDB [test]> insert into test (id, test) values (0, 'test');
                        Query OK, 1 row affected (0.06 sec)
                        
                        select * from test;
                        MariaDB [test]> select * from test;
                        +----+------+
                        | id | test |
                        +----+------+
                        |  1 | test |
                        +----+------+
                        1 row in set (0.00 sec)


                        test=# create table test (id serial primary key, data text);
                        CREATE TABLE
                        test=# insert into test (id, data) values (0, 'test');
                        INSERT 0 1
                        test=# select * from test;
                         id | data 
                        ----+------
                          0 | test
                        (1 row)


                        Т.е. по версии Мускула 0=1.
                        Ответить
                        • в первом случае auto_increment если в поле id записать 0 или null сработает авто инкримент

                          во втором случае нет поэтому писать можно чего хочешь
                          Ответить
                          • Ну хоть бы заглянул в документацию...

                            serial serial4 autoincrementing four-byte integer
                            http://www.postgresql.org/docs/8.1/static/datatype.html
                            Ответить
                            • ок. Так в чем говно mysql в том, что у него авто инкримент по дефолту с 1 а не с 0 ?
                              Ответить
                              • > если в поле id записать 0 или null
                                пыхологика?

                                > И умеет он INSERT ... ON DUPLICATE KEY UPDATE кто еще так умеет?
                                что совсем не то же самое, что merge
                                а в insert ... returning id into :foobar мускул уже научился?
                                Ответить
                                • ох
                                  а что там с mysql с индексами от функций?
                                  а с иерархическими запросами?
                                  а check constraint так сложно завезти в 2015-то году?

                                  я уж не говорю про ынтерпрайзные всякие техники ускорения доступа к данным
                                  постгрес уже на десятилетие впереди мускула
                                  Ответить
                                  • а с иерархическими запросами?
                                    А это что такое ?
                                    Ответить
                                    • create table fs_folder (
                                        id number primary key,
                                        parent_folder_id number references foobar(id),
                                        name ...
                                      );
                                      требуется получить все записи, которые находятся в этом дереве, начиная с id = :1

                                      ну или хотя бы вывести для каждой папки её путь в виде /foo/bar/baz/thisfolder

                                      ========

                                      ну оконных функций тоже в мускуле нет
                                      незачем это всё для пыхостраниц на вордпрессе, баловство
                                      Ответить
                                      • ну бля
                                        вот что значит редактировать свой пост не глядя..
                                        create table fs_folder (
                                          id number primary key,
                                          parent_folder_id number references fs_folder (id),
                                          name ...
                                        );
                                        Ответить
                                • last_id
                                  умеет
                                  Ответить
                                  • в отдельном запросе, а не в том, который я исполнил

                                    и это мне ещё надо поковырять документацию, чтобы убедиться, что эти криворукие дибилы не догадались хранить это значение один раз на всю систему, а хотя бы в per-session

                                    а если я захочу сделать returning foo, bar into :1, :2, то тем более второй запрос придется делать
                                    Ответить
                              • Нет, проблема в том что:
                                1. Пользовательские данны без предупреждений похерились (я записывал ноль, а записали единицу).
                                2. У автоинкремента имеет место быть задокументированое неопределенное поведение (запиши отрицательное число - х.з. что будет), но при этом никаких предупреждений!

                                И нет, проблема не в том, что автоинкремент начинается с единицы, если записать любое другое число в эту колонку, то запишется именно это число, и только ноль превратится в единицу (х.з. что там с переполнением).

                                Ну, вобщем, смысл в том, что они, по всей видимости, сначала написали процедуру, а потом, когда уже продуктом стали активно пользоваться, заметили, что... есть нюанс, но менять что-то было поздно.
                                Ответить
                                • не только 0. если -1 тоже самое будет. можно сказать что и -1 заменяется на 1
                                  Ответить
                                  • ппц
                                    у меня бывают таблицы с отрицательными значениями в первичном ключе
                                    я плохой человек
                                    Ответить
                                  • Я кажется начинаю понимать логику ПХП-разработчика:

                                    Х: имеет место быть задокументированое неопределенное поведение (запиши отрицательное число - х.з. что будет)
                                    У: если -1 тоже самое будет. можно сказать что и -1 заменяется на 1

                                    Т.е. дедукция и индукция заменяются интуицией и мышлением по образцу. Дедукция бы сработала так:
                                    P = для отрицательных чисел поведение не определено.
                                    Q = -1 является отрицательным.
                                    Дано: P, Q
                                    Вывод (с применением implication elimination, aka modus ponens): для -1 поведение не определено.
                                    Ответить
                                    • А что меншает самым что не наесть дедуктивным образом понять что есть набор значений подходящих для AI а есть не подходящие. Так вот пихая туда любое не подходящее СУБД меняет его на max+1. Сколько высших образований нужно иметь, что бы это понять ?
                                      Ответить
                                      • Любое? А слабо́ для BIGINT проверить?
                                        Ответить
                                      • Мои бурные и несмолкаемые апплодисменты. Я думал такое бывает только в стендап комедии.
                                        Ответить
                      • > INSERT ... ON DUPLICATE KEY UPDATE кто еще так умеет?

                        Все, только через MERGE, входящий в стандарт SQL 2008.
                        Ответить
                        • все, но не постгрес
                          че то пилят, вроде

                          я вот удивлён, уже 9.х версия
                          9!
                          а кучи вещей до сих пор нет в постгресе

                          на проде у нас на одном проекте стоит 9.2 из репозитория, хотел поделать мат вьюх и обломился
                          оказалось, появились только в 9.3, и то кастрированные
                          ёбаный стыд
                          Ответить
                          • Да, только в 9.5 завезли и то с нестандартным синтаксисом. Я только в оракле merge пробовал писать.
                            Ответить
                  • Все правильно сделал. Квадратичная сортировка.
                    Ответить
                • Фейспук как-то признался, что использует mysql как хранилище битов. Им не нужны констрейнты, джоины и транзакции, только персистентность и репликация.
                  Но ФЕЙСПУК ИСПОЛЬЗУЕТ MYSQL, следовательно, mysql - невпупенная база, давайте все её юзать! А ведь есть вполне вменяемый postgresql.
                  Ответить
                  • следовательно, mysql - невпупенная база
                    Не поэтому. мускул умеет нужны констрейнты, джоины и транзакции
                    Ответить
                    • Да ладно, градус неадеквата в мускуле зашкаливает, особенно по стравнению со слоном.
                      Мускуль жив благодаря уже завоёванной популярности. Типа работает - не трогай.
                      Ответить
                      • особенно? да любая субд не без говна, даже постгрес
                        но mysql - это говно со следами субд
                        Ответить
                      • его же развивают вон mariadb развивается. Разные полигоны и прочие геометрии хранить умеет. Ну и отклик быстрей чем у слона. Хотя я сам не проверял.
                        ЗЫ знаю разный софт на пхп который перестал поддерживать постгрю. Тоже наверное не просто так.
                        Ответить
                      • В моем случае Мускул выбран потому что у Сфинкса хорошая интеграция.
                        Ответить
                        • > у Сфинкса хорошая интеграция.
                          как и с постгресом

                          это как хуй с пальцем сравнивать, `ей`-`богу`
                          Ответить
                          • К Мускулу у него есть консолька, через которую я восновном и работаю. В Постгресе такую консольку нужно писать самому.
                            Ответить
                        • А я бы и рад мож со слоником но последние 2 года только и делаю что чужое говно разгребаю.
                          А когда разгребаешь говнишко в коде какая там БД внимания не особо обращаешь. Ну и почему то не могу понять вот чем псостгрей лучше mysql.

                          Зы если у кого есть бенчи поделитесь. А то я щас переписываю проект один может и БД поменяю. Один фиг там все переписывать надо.
                          Ответить
                          • бля у меня есть проект на балансе, который студенты писали, используя мускул
                            я заебался просто ебать себе мозги с сопровождением этого говна

                            мускул постоянно жрёт свой дата файл
                            когда он доходит до 20 гигов, начинается полный пиздос в системе
                            при этом реальных данных там хранится ну мегабайт
                            мегабайт, карл!

                            когда это уёбище сломало себе свой же датафайл, оно не могло создать таблицы, которые, как ему казались есть, но нет, или восстановиться из бекапа

                            mysql workbench это отдельный разговор, хотя вполне тут паритет с говнищем pgadmin

                            я бы зарёкся вообще связываться с mysql, это реально удел пыхоблядских проектов, где вместо субд можно и .csv поюзать
                            Ответить
                            • google: innodb_file_per_table
                              Ответить
                            • >mysql workbench
                              Это да это говно
                              Я юзаю вот эту штуку.
                              https://www.devart.com/ru/dbforge/sql/studio/
                              У неё только одни недостаток она только под винду приходится на линь ставить виртуалку с 7
                              Ответить
                              • Я сначала прочитал ссылку как deviart. Подумал - "Василий решил нарисовать скрин ИДЕ своей мечты"
                                Ответить
                                • у той IDE должны быть сиськи. поэтому ссылки на неё фото/видео будут содержать ключевые слова porn, vk
                                  Ответить
                            • >> когда он доходит до 20 гигов, начинается полный пиздос в системе
                              >> при этом реальных данных там хранится ну мегабайт
                              >> мегабайт, карл!

                              Я предлагаю пиздить студентов. Говорите 5 по субд? 20 гигов места на диске при мегабайтах полезной информации? Вам предстоит удивительная поездка в лес в компании 4 крепких мужиков.
                              Ответить
                              • им повезло, что они оказались на субподряде в правильное время
                                а мы с этим уже 2 года живём
                                Ответить
                          • Где еще Мускук себя замечательно проявил: изменения в системных таблицах, а особенно в том, что касается пользователей, от версии к версии. Не скажу точно когда, но на каком-то этапе в таблицу с пользователями так удачно добавили колонок, что все пароли из Мускула прошлой версии попали в другую колонку. Не уверен, скорее всего это как-то можно было починить, но большинство пострадавших просто регистрировались по-новой.
                            Ответить
                  • Я тут слышал мол фейсбук на NoSQL переезжает потихоньку, на редиску в частности. Врут?
                    Ответить
                    • У них там своя атмосфера. Про редиску не слышал, они всю жизнь плотно на memcached + mysql сидели. Если интересно, почитай их статью про TAO (TAO: Facebook’s Distributed Data Store for the Social Graph). Для фидов и presence в чатике у них свои in-memory велики написаны были.

                      На редисе плотно сидит Птичер (https://www.youtube.com/watch?v=rP9EKvWt0zo)

                      Кассандру FB сам написал, но она у них не особо пошла. Вроде дальше inbox search не убежала, кластер машин на 150-200.
                      Ответить
    • Парень оказался гораздо сильнее, чем казался. Олег потратил все свои силы, чтобы зафиксировать его в станке на четвереньках. Тяжело дыша, он наконец-то смог оценить результат своего труда. Запястья и лодыжки пристёгнуты к креплениям в полу. Паренёк абсолютно беспомощен.
      Ответить

    Добавить комментарий