• Как гарантировать последовательную запись данных без пропусков id?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Как реализовать надежную запись списка данных без пропусков значения автоинкремента id?


    Никак НЕ РЕАЛИЗОВЫВАТЬ.

    Оставь автоинкремент в покое - он обязан обеспечивать только уникальность, и не более. Нужна непрерывная нумерация? Создай для неё ОТДЕЛЬНОЕ поле, и нумеруй программно. Триггеры в помощь.
    Ответ написан
    4 комментария
  • Как защитить данные от повреждения при INSERT?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Например, если какие-то строки смогут загрузиться, а какие-то - нет, то бд будет повреждена.

    НЕТ.

    Возможно рассогласование данных, нарушение внутренней логики системы - но никак не повреждение.

    Повреждение БД - это физическое либо логическое разрушение базы данных. Физически - например, битый сектор в теле файла таблицы. Логический (с точки зрения БД, потому как с точки зрения аппаратуры это очень даже физическое) - например, неправильное считывание номера блока данных в файле индекса вследствие наличия на диске слабого бита.

    При отсутствии аппаратных ошибок, на чистой логике повреждение БД возможно либо из-за ошибочного/злонамеренного действия, либо из-за бага/сбоя программного обеспечения. В обоих случаях - как внутри SQL-сервера, так и снаружи (ОС, третий софт, ...).
    Ответ написан
    Комментировать
  • Как защитить данные от повреждения при INSERT?

    @alexalexes
    если в Mysql какие-то строки смогут загрузиться, а какие-то - нет,

    Не бывает тут вариативности, даже случайной.
    Можете внести одну или несколько строк запросом insert (или несколькими insert-ами по одной строке, а может еще где-то update-ом или delete-ом пробежитесь). Но фиксация этих действий будет происходить, если после запросов на вставку/изменение/удаление явно будет отправлена команда commit или rollback (а может и не явно, см. что такое autocommit).
    До поступления этих транзакционных команд ваши изменения будут копиться во временном буфере СУБД и будет блокировать объекты СУБД до того момента, пока не поступит транзакционная команда (или не наступит ситуация для autocommit). Для других пользователей СУБД изменения заблокированных объектов будет недоступно, только чтение той версии объекта, которая была до наложения блокировки (не всегда таков принцип, см. что такое уровни изоляции транзакций).
    Ответ написан
    Комментировать
  • Новый тип жалобы - member GPT?

    Проблема с такими ответами в том, что они выглядят компетентными, но могут быть полной чушью. Поэтому требуется их анализ и оценка. И если «отвечающий» сам в теме не разбирается, этот анализ должен проводить кто-то другой. Это не выглядит честным.

    Поэтому мы стараемся такие ответы удалять, а людей банить на короткий срок, чтобы получше дошло. Но пока работает не со всеми, к сожалению.
    Ответ написан
    1 комментарий
  • Как получить максимальное значение ключа в JSON?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Развернуть JSON в таблицу через JSON_TABLE().
    Потом обнаружить, что запрос работает медленно, найти того, кто записал активно используемые поля в JSON и заставить его переделать на нормальную таблицу.
    Ответ написан
    4 комментария
  • Как хранить товары с различными опциями в БД?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    В стародавние времена это действительно было проблемой.

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

    Эта ситуация послужила одной из причин появления хранилищ для неструктурированных данных, таких как Монго, которые входят в очень широкую категорию NoSQL.
    Но сами по себе "документо-ориентированные базы данных" в качестве основного хранилища - это ад и проклятие, хуже EAV. Если EAV делает адом только работу с атрибутами товаров, то Монга делает проклятием работу со всей БД целиком. Забудьте об этой идее.

    Тем более что в последние годы появилось вполне достойное решение: во всех классических СУБД появилась поддержка JSON полей.
    То есть таблица товаров будет самая обычная, в которой есть общие поля типа цены, названия и прочее. А свойства хранятся в JSON поле. Беря, таким образом, лучшее из двух миров.

    На начальном этапе вы даже сможете делать поиск по атрибутам, используя нативные JSON функции. Но в дальнейшем поиск товаров, а так же фильтрацию по атрибутам на странице категории (так называемый "фасетный поиск") надо будет возложить на специальный поисковый движок (который тоже входит в широкую категорию "NoSQL", хотя ничего общего с документными БД не имеет, и БД, собственно, не является), такой как Эластик или Мантикора.

    Главное при этом хранить (либо в коде, либо в таблице категорий) эталонные структуры таких json полей, которые, во-первых, использовать как справочники для заполнения товаров (тупо чтобы помнить, что частота процессора называется freq, а не frequency), и чтобы собственно делать фасетные фильтры.
    Ответ написан
    5 комментариев
  • Как скачать видео?

    @pantsarny
    Ответ написан
    Комментировать
  • Что быстрее SQL или Javascript?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    В общем, чтобы не издеваться над девушкой, объясним на пальцах.

    Во-первых, заголовок у вопроса чудовищно некорректный. Это все равно что спросить, "что быстрее - пылесос или стиральная машина?"
    Во-вторых, ответ на вопрос "производить ли обработку данных в БД или же запросить все данные в клиентское приложение и обрабатывать там" совершенно очевиден: обработку данных следует производить в общем случае только в БД. Она для этого и придумана. Чтобы обрабатывать значительные объемы данных.

    Да, js тоже "может" обрабатывать большие объемы данных.
    Но чтобы значительный объем данных обработать, его сначала надо передать, полностью забив канал между сайтом и базой
    Чтобы значительный объем данных обработать, его надо сначала проиндексировать. Причем делать это каждый раз, а не использовать уже имеющийся набор индексов
    Чтобы значительный объем данных обработать, надо иметь значительный объем памяти или упасть из-за её недостатка
    Чтобы значительный объем данных обработать в многопоточном режиме (а сайт как раз является многопоточной системой), все вышеперечисленное надо умножить на количество посетителей сайта - при каждом запросе перегонять весь массив данных, выделять память, индексировать, считать. Если же вы оставляете все данные в памяти приложения, то их тогда надо как-то синхронизировать с БД. То есть вы себе собираете кучу проблем на пустом месте.

    Несомненно, из любого правила есть исключения. И бывают ситуации, когда приходится считать в приложении.
    Но на вопрос в общем виде ответ будет совершенно однозначный. Не "может так, может сяк", а только в БД.
    Ответ написан
    9 комментариев
  • Как получить все возможные комбинации?

    @CBET_TbMbI
    Самый простой для понимания способ - цикл в цикле. Внешним циклом меняйте один символы по порядку на Z. Во вложенном перебирайте замены оставшихся букв хоть на Z, хоть на Y.
    Ответ написан
    Комментировать
  • Какую базу данных использовать для такого проекта?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Ну, на основной вопрос уже ответили, а я освещу отдельную проблему, которая очень часто волнует умы юных падаванов.

    когда лучше реляционную и нереляционную использовать?

    Ответ на этот вопрос очень простой.
    Нереляционная БД - это НЕ база данных.
    А узкоспециализированное хранилище, которое может выполнять какую-то одну определенную функцию лучше, чем база данных. Это может быть кэширующий демон, или поисковый движок, или решение для аналитики, или какое-то подсобное хранилище для всякого мусора.

    Как только осознаёшь этот простой факт, то всё сразу становится на место:
    Если нужна база данных, то и использовать надо базу данных. Реляционную. Какую именно - в вашем случае не принципиально.

    Если вдруг проект пройдет стадию "неясные идеи", и выльется во что-то практическое, и даже появится какая-то нагрузка, то можно будет начать думать про использование одного или нескольких подсобных хранилищ в дополнение к базе данных.
    Ответ написан
    2 комментария
  • Как сделать автозаполнение поля mysql?

    rozhnev
    @rozhnev Куратор тега MySQL
    Fullstack programmer, DBA, медленно, дорого
    Правильно делить это на две таблицы: продукты и варианты. Но если хочется странного то вуаля:
    insert into products (product_id, name, variant, price) 
    select 
        coalesce (
            min(case when name = 'мышь' then product_id end ),
            coalesce(min(product_id), 0) + 1
        ) product_id
        ,'мышь', 'красная', 150 
    from products;


    https://sqlize.online/sql/mysql57/50e7ba1b33d77fa9...
    Ответ написан
    3 комментария
  • Есть ли смысл покупать RTX 3060 для моей материнки?

    xez
    @xez
    TL Junior Roo
    1. Совместима
    2. Смысл есть.
    Насчёт pcie 3.0 переживать не стоит.
    Ответ написан
    6 комментариев
  • Почему запрос SQL не проходит без GROUP BY?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Вы не указали GROUP BY, но использовали агрегирующую функцию SUM. Такая комбинация эквивалентна агрегации всей выборки в одну строку. Однако, вы выбираете поле order_id. У СУБД возникает вопрос - а из какой именно строки брать значение этого поля в итоговую выборку? Скажем, после фильтрации осталось 10 строк с разными order_id. Какое именно из этих 10 значений вы хотите увидеть после агрегации?
    Ответ написан
    Комментировать
  • Почему программы получают доступ к планировщику задач, регистру, автозапуску и службам?

    @res2001
    Developer, ex-admin
    Смотря какой доступ. Смотря из-под какой учетной записи запущена программа.
    Доступ к планировщику задач есть у всех, пользователь может создавать новые задачи, удалять старые и т.п.; доступ к реестру к пользовательской ветке есть у пользователя полный, к ветке HKLM - на чтение, к некоторым разделам доступ ограничен; автозапуск - это просто ветки реестра и каталог "Strtup" в меню пользователя, соответственно права доступа зависят от нахождения ветки/каталога - если это пользовательский реестр или меню, то доступ полный, если системный - на чтение; доступ к службам у обычного пользователя на чтение есть, на запись требуются админские права.
    Если есть доступ у пользователя, то есть доступ и у любых программ, запущенных под этим пользователем.
    Ответ написан
    Комментировать
  • Как изменить уровень яркости?

    Для десктопа можно попробовать monitorian:
    https://github.com/emoacht/Monitorian
    У него кроме GUI есть и CLI.

    Для регулировки яркости на десктопе он использует DDC/CI, который по идее должен быть у всех дислееев, даже если подключение идёт по VGA (возможно, придётся включить в настройках монитора)
    Ответ написан
    Комментировать
  • Как сделать тёмную тему в *.habr.com?

    В Твиттере её нельзя "сделать", её можно "включить". Включить то, чего нет, невозможно.
    Вы можете использовать одно из многих браузерных расширений, которые как раз добавляют тёмную тему сайтам, у которых её нет. Качество там может быть неидеальным, поскольку за результат отвечает алгоритм, а не человек-дизайнер.
    Ответ написан
    Комментировать
  • Как из столбца таблицы составить пары без одинаковых значений?

    iMedved2009
    @iMedved2009
    Не люблю людей
    Ну совсем тупой вариант
    select * from (select 
      least(city.id, city2.id) as id1, 
      greatest(city.id, city2.id) as id2
      from city 
      join city as city2 on city.id != city2.id 
      group by   least(city.id, city2.id), greatest(city.id, city2.id) 
    ) as t join city as city1 on city1.id = id1 join city as city2 on city2.id = id2;


    Если подумать то конечно можно проще
    select 
    LEAST(city.name, city1.name), GREATEST(city.name, city1.name)
    from city 
    inner join city as city1 on city1.id != city.id
    GROUP BY LEAST(city.name, city1.name), GREATEST(city.name, city1.name);
    Ответ написан
    4 комментария
  • Можно ли считать тег SQL бесполезным?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Нельзя. Если вопрос в рамках стандарта SQL и не затрагивает специфику конкретной СУБД, то куда его пихать?
    Ответ написан
    4 комментария
  • На IP моего сервера перенаправляются сотни доменов, как исправить?

    freeExec
    @freeExec
    Участник OpenStreetMap
    Да просто разные боты ходят, ищут уязвимости, а в refereer пихают разный мусор.
    Ответ написан
    1 комментарий
  • От чего могут быть артефакты на тостере в Chrome?

    Поставил в хром расширение, через которое можно налету менять стили сайта - "Stylish"

    Добавил через него:
    .question_short {
         transform-style: inherit;
    }

    и все стало нормально. У разработчиков пока ресурсов нет на исправление этого косяка.
    Ответ написан
    Комментировать