• Как задать свой тип?

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

    Можно просто добавить ограничение (CHECK constraint) - тогда любое не соответствующее ограничению значение приведёт к ошибке вставки/обновления:

    CREATE TABLE video (
      id INTEGER,
       ...,
      type VARCHAR CHECK (type IN ('FILM', 'SERIAL')),
      ...
    );
    Ответ написан
    Комментировать
  • Как получить значения и вставить в функцию?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Как-то вот так:
    SELECT *
    FROM table t1 
    JOIN table t2
    WHERE t1.id > t2.id
      AND ST_Intersect(t1.geom, t2.geom)
    Ответ написан
    Комментировать
  • Установка mysql - ошибка 1045(28000)?

    @Akina
    Сетевой и системный админ, SQL-программист.
    - ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)


    Выделенный фрагмент чётко указывает на причину - использованная строка запуска не настроена на передачу пароля.

    Дословно сообщение означает: пользователя 'root'@'localhost' не получилось аутентифицировать с пустым паролем. Всё, не больше и не меньше. А по какой причине - пароль не пуст, такого юзера нет, или вообще это роль, а не юзер - сообщение установить не позволяет.

    Как фиксить - уже сказано в комментарии, который сделал Максим Припадчев.
    Ответ написан
    Комментировать
  • Как сделать проверку базы данных, на наличие новых записей?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Если количество новых записей невелико (в пределах тысячи), то возможное решение - триггер на основной таблице, который копирует свежевставленные записи в дополнительную таблицу. Тупо один к одному. А процедура проверки на свежие записи столь же тупо выгребает из этой дополнительной таблицы всё туда упавшее, после чего чистит её.
    Ответ написан
  • Как работать с файлом SQL объемом 20 ГБ?

    @Akina
    Сетевой и системный админ, SQL-программист.
    В комментариях выше фиксируются следующие факты:
    • используемая СУБД - MySQL
    • (вероятно) дамп - MySQL либо MariaDB
    • дамп поделен на несколько частей
    • задача - периодическая

    Соответственно некоторые соображения в дополнение к сказанному ранее.

    Если дамп выполнялся штатной утилитой (вряд ли иначе), то он содержит кучу комментариев, которые позволяют без особых проблем поделить дамп на отдельные файлы - дамп только структуры и дамп только данных. Даже в автоматическом режиме (программно), и уж тем более вручную. Поскольку нужны данные только по пользователям, то после описанного выше разделения можно безболезненно вырезать всё ненужное из дампа структуры (лишние таблицы, всякие процедуры-функции-триггеры, индексы и внешние ключи - всё это нафиг не нужно при восстановлении, а если нужно для эффективности выборки, лучше создать индексы после заливки данных), а также просто убрать дампы данных ненужных таблиц. И скорее всего объём информации для восстановления после такой чистки уменьшится на порядок, а то и больше.
    Ответ написан
    Комментировать
  • Что лучше, по одной или несколько записей при INSERT?

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

    PS. 40 записей в секунду - это в общем-то ни о чём..
    Ответ написан
    Комментировать
  • Как поставить кастомную скорость Ethernet?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Видел на ноутбуке (сетевая карта 100 на 100) как он по сети давал 125 на 75.

    Ты тупо не понял, что видел. Отключи кэширования со стороны дисковой и сетевой подсистем - и хрен ты увидишь такие значения.

    Хотелось бы на сервере и на потребителе выставить настройки сетевого порта 1950 на 50, чтобы при скачивании с сервера скорость была в два раза выше.

    Невозможно даже теоретически.

    Канал приёма и канал передачи в режиме полного дуплекса практически независимы, это два однонаправленных канала, и у каждого предельная скорость передачи составляет 1 Гбит. То есть свыше этой скорости передавать не получится - даже если другой канал простаивает, он просто не умеет слать в обратном направлении.

    А в полудуплексе они синхронны в рамках общей, суммарной, скорости в 1 Гбит - т.е. когда один канал работает, встречный отдыхает.

    -----------------

    Для увеличения скорости обмена можно доставить по второй сетевой карте и агрегировать эти два канала в один логический. Впрочем, до 1950 добраться всё равно не получится.

    Либо (самое правильное решение) докупить и поставить более высокоскоростные сетевые карты. Стоимость решения в случае 10G портов - порядка 9 тыр за порт.
    Ответ написан
    Комментировать
  • Какой sql запрос нужен чтобы получить последнюю дату события для каждого домена?

    @Akina
    Сетевой и системный админ, SQL-программист.
    WITH cte AS (
        SELECT *, ROW_NUMBER() OVER (PARTITION BY domain ORDER BY date DESC) AS rn
        FROM Crawl_Datetime
    )
    SELECT * 
    FROM cte
    WHERE rn = 1
    Ответ написан
    Комментировать
  • Почему очень долго выполняеться alter table в mysql 8 ubuntu?

    @Akina
    Сетевой и системный админ, SQL-программист.
    1. Вставьте в запрос явное создание индекса для работы внешнего ключа.
    2. Выполните действия тремя отдельными ALTER TABLE и выясните, какая именно операция занимает так много времени. Попробуйте явно указать для неё алгоритм выполнения.
    3. Спецификация CHAR(36) BINARY намекает, что там будет текстовое представление UUID. Да и имя поля намекает на то же самое. Но если так - то какой смысл в BINARY? чтобы потом надо было думать, что делать с регистрозависимостью? И вообще - почему бы не упаковать UUID в BINARY(16)? да, потребуется преобразование при вводе-выводе, зато ускорится обработка.
    4. ON UPDATE NO ACTION - это что, `billInc` (`uuid`) неуникальное, что ли? А сколько вообще записей в `billInc`?
    Ответ написан
    Комментировать
  • Как узнать позицию записи в базе?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT COUNT(*) AS row_position
    FROM table_name t1
    JOIN table_name t2 ON t1.ordering_column >= t2.ordering_column
    WHERE t2.identifying_column = 'Объявление 7'
    Ответ написан
    Комментировать
  • Как создать порядковый номер для заказа конкретного заведения?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Пример реализации.
    -- рабочая таблица
    CREATE TABLE orders (
      id INT AUTO_INCREMENT PRIMARY KEY,
      project_id INT,
      project_number INT
      );

    -- опорная таблица для генерации номеров в разрезе проектов
    CREATE TABLE generate_project_number (
      project_id INT,
      project_number INT AUTO_INCREMENT,
      PRIMARY KEY (project_id, project_number)
      ) ENGINE = MyISAM;

    -- триггер-генератор
    CREATE TRIGGER generate_project_number
    BEFORE INSERT ON orders
    FOR EACH ROW
    BEGIN
      -- вставить хапись в опорную таблицу для генерации номера
      INSERT INTO generate_project_number (project_id) VALUES (NEW.project_id);
      -- вставить сгенерированный номер в рабочую таблицу
      SET NEW.project_number = LAST_INSERT_ID();
      -- почистить опорную таблицу от лишних записей
      DELETE FROM generate_project_number 
      WHERE project_id = NEW.project_id
        AND project_number < NEW.project_number;
    END

    DEMO fiddle
    Ответ написан
    Комментировать
  • В чем состоит разница между "WHERE" и "AND" в LEFT JOIN?

    @Akina
    Сетевой и системный админ, SQL-программист.
    В чем состоит разница между "WHERE" и "AND" в LEFT JOIN?

    Тем, что AND operator может использоваться в том месте запроса, где он оказывает влияние на связывание с использованием LEFT JOIN (в составе выражения в ON clause), тогда как WHERE keyword в принципе не может использоваться в таком месте.
    Ответ написан
    Комментировать
  • "Incorrect syntax near '18'. Unclosed quotation mark after the character string ')'." что с этим делать?

    @Akina
    Сетевой и системный админ, SQL-программист.
    $" Values(N'{NAZVD.Text}', N'{SLOZHD}', '{dateTimePicker2.Value.ToString("yyyy/MM/dd")}, N'{comboBox1.SelectedValue}', N'{VIDD.Text}')";
               ^---- 1 -----^   ^--- 2 --^  ^----------------------- 3 -----------------------^                         ^-4-^           ^----- ???
    Ответ написан
    1 комментарий
  • Как работать с двумя и более базами данных одновременно?

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

    PDO подключается не к базе данных, а к серверу. Просто в процессе подключения некоторая база сервера назначается текущей, и в случаях, когда в имени таблицы отсутствует алиас базы данных, считается, что данная таблица лежит в текущей БД. Кстати, в процессе работы текущая БД может быть и изменена - запросом USE new_default_database_name

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

    А если ещё подключить внешние таблицы (используя FEDERATED ENGINE) - то можно работать и с данными из баз на другом инстансе (сервере) MySQL.
    Ответ написан
    Комментировать
  • Какой выбрать маршрутизатор для сети из 500 пк и 12 VLAN?

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

    Пардон, в каком месте тупит? С микротика в кабинеты и обратно, или между кабинетами?
    Если первое - то none7 скорее всего прав. Всё же у этого Длинка производительность матрицы 128 Гбит, так что десятку она должна пропускать со свистом, используя всего около 15% своей производительности.
    Если второе - то при большом трафике межкабинет может запросто сожрать эти 128Г и не подавиться.
    А ещё я не исключаю, что причина в том, что один кабинет просто делит на всех 1 Гбит. Если его раскидать на сотню клиентов - каждому достанутся слёзы.

    Так что я бы начал с подключения ещё одной оптики-десятки от микротика до длинка и агрегирования этих двух десяток. И аналогично удвоить каналы до клиентских коммутаторов. Даже просто в качестве эксперимента.
    Ответ написан
    Комментировать
  • Адреса сети, ip адреса?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Адрес подсети и адрес роутера от которого идет эта сеть - это одно и тоже?

    Нет.

    Адрес сети - это вообще IPадрес или это просто номер?

    Это IP-адрес.

    Под что уходят адреса 192.168.1.0 и 192.168.1.255 и 192.168.1.256 при маске 255.255.255.0

    192.168.1.0 - адрес подсети;
    192.168.1.255 - адрес бродкаста подсети;
    192.168.1.256 - не существует.
    Ответ написан
    Комментировать
  • Как вычитать таблицу после JOIN?

    @Akina
    Сетевой и системный админ, SQL-программист.
    NOT IN в большинстве случаев - самая медленная реализация. Лучше использовать, в зависимости от объёма данных и наличия индексов, либо WHERE NOT EXISTS, либо LEFT JOIN WHERE IS NULL.

    SELECT * 
    FROM `table1` 
    JOIN `table2` ON `title`=`sometitle` 
    WHERE NOT EXISTS ( SELECT NULL
                       FROM table3
                       WHERE table1.id = table3.id )
    ORDER BY `date`


    SELECT * 
    FROM `table1` 
    JOIN `table2` ON `title`=`sometitle` 
    LEFT JOIN table3 ON table1.id = table3.id
    WHERE table3.id IS NULL
    ORDER BY `date`


    Что именно использовать - надо смотреть по построенному плану запроса и практическому сравнению производительности запросов.
    Ответ написан
    Комментировать
  • Является ли приемлимой практикой использование JSON обьектов в столбцах таблицы базы данных PostgreSQL?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Если говорить об общем подходе - JSON в БД должен использоваться только и исключительно в случае, когда вся работа с JSON ограничивается простейшим "записать в БД" - "извлечь из БД". При этом модификация в момент записи/извлечения можно не учитывать.

    Если же JSON используется более нагруженно (поиск, сравнение, частичная модификация и пр.), то в большинстве случаев от его использования следует отказываться в пользу нормализованных plain-структур. При правильном индексировании они выиграют у JSON по потреблению ресурсов сервера. Хотя, конечно, в каждом отдельном случае нужно смотреть конкретные условия - тип использования, возможности оптимизации этого процесса в конкретной (версии) СУБД и пр. Да и то, JSON тут реально может конкурировать разве что с EAV.
    Ответ написан
    2 комментария
  • Как отсортировать по столбцу данные, при этом чтобы имя столбца было взято из другого столбца?

    @Akina
    Сетевой и системный админ, SQL-программист.
    В коде SQL запрос выглядит так:
    SELECT ANY_VALUE(title) AS title_list,
           SUM(count_model) AS count_model,
           COUNT(*) AS total,
           ANY_VALUE(created_at) AS `date`
    FROM mymodels
    GROUP BY name_list
    ORDER BY name_list;

    https://dbfiddle.uk/tiX1HDll

    Возможно вместо ANY_VALUE использовать MIN/MAX, это не изменит результата, хотя и противоречит логике.
    Ответ написан
    3 комментария
  • Связи в Mysql, как исправить ошибку 1215?

    @Akina
    Сетевой и системный админ, SQL-программист.
    К самим скриптам есть только одна претензия - в таблице photos отсутствует индекс по product_id, который необходим для создания внешнего ключа. После исправления этого косяка запрос на создание FOREIGN KEY выполняется без проблем.

    FIDDLE

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

    =========================

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