вторник, 22 мая 2012 г.

Вопросы по MySQL при подготовке на собеседование

  1. Как запустить, остановить MySQL под Windows? - используя команды в консоле: net start MySQL, net stop MySQL
  2. Как запустить, остановить MySQL под Linux? - /etc/init.d/mysql start, или service mysql start.
  3. Объясните разницу между mysql и mysqli интерфейсами в PHP? - mysqli является объектно ориентированной версией, mysql является библиотекой функций.
  4. Какой порт по умолчанию у СУБД MySQL? - 3306
  5. Что выполняет команда tee в MySQL? - tee используется с аргументом, который указывает файл. Команда включается логирование в указанный файл. Может быть остановлено командой notee.
  6. Возможно ли сохранить настройки вашего соединения в conf файл? - Да в ~/.my.conf. Вам желательно установить права доступа 600 к файлу, чтоб другие ничего не могли с ним сделать.
  7. Как изменить пароль для существующего пользователя
  8. используя mysqladmin? - mysqladmin -u root -p password "newpassword"
  9. Как создать копию базы данных используя mysqldump? - mysqldump -h mysqlhost -u username -p mydatabasename > dbdump.sql
  10. Использовали ли вы MySQL Administrator и MySQL Query Browser? Опишите задание, которые выполняли.
  11. Какие основные принципы безопасности относительно пользователей в MySQL? - Не должно быть пользователей без паролей. Запретить пользователям подключаться с различных хост, а лучше точнее определить, или запретить удаленное управление. Отдельные пользователи для определённых баз дынных с различными разрешениями.
  12. Объясните различия между статическим MyISAM и динамическим MyISAM – в статическом MyISAM поля имеют статические размеры. Динамический MyISAM содержит динамические поля, такие как TEXT, BLOB и другие. Поля которые приспосабливаются к данным различных размеров. Статический MyISAM легче восстановить в следствии нарушения целостности, даже при потере некоторого участка данных, возможно восстановить данные, так как возможно точно определить начало следующей записи.
  13. Для чего используются утилита myisamchk? - Утилита проверяет целостность таблиц, оптимизирует таблицы, что уменьшает использование диска.
  14. Объясните преимущества InnoDB перед MyISAM? - Блокировка на уровне строк, транзакции transactions, ограничения по внешним ключам, лучшая способность восстановления при нарушении целостности базы данных.
  15. Преимущества MyISAM перед InnoDB? - более консервативный подход в использоваии дискового пространства – каждая MyISAM таблица сохраняется в отдельном файле, и может быть оптимизирована с помощью myisamchk, если необходимо. Таблицы в InnoDB сохраняются в местах памяти таблиц, что не позволяет их оптимизировать. В InnoDB отсутствует индексирование полнотекстовых полей. Конструкция COUNT(*) в InnoDB выполняется медленнее чем в MyISAM из-за сложности структуры файла базы данных.
  16. Что за HEAP таблицы в MySQL? - HEAP таблицы находятся в памяти. Они обычно используются как временные хранилища с быстрым доступом к данным, не поддерживают такие поля, как TEXT, BLOB, возможно использовать только такие операторы сравнения, как =, <, =>. HEAP таблицы не поддерживают AUTO_INCREMENT, индексы должны быть NOT NULL.
  17. Как контролировать максимальный размер HEAP таблицы? - конфигурационная MySQL переменная max_heap_table_size.
  18. Что за CSV таблицы? - Таблицы, которые сохраняются в файле, значения полей таблицы записываются через запятую. Эти таблицы не могут быть проиндексированы.
  19. Объясните значение федеративные таблицы? - Представлены в MySQL 5.0, таблицы, которые могут размещаться в других базах данных других серверов.
  20. Что за тип поля SERIAL в MySQL? - BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT.
  21. Что произойдёт с колонкой типа AUTO INCREMENT, когда достигнет максимального значения? - Остановится инкре
  22. иментирование. Перескок через 0 не произойдёт, что б предотвратить потерю данных, каждая следующая вставка будет вызывать ошибку - такой ключ уже используется.
  23. Объясните разницу между BOOL, TINYINT and BIT. - Это синонимы.
  24. Объясните разницу между FLOAT, DOUBLE и REAL. - FLOAT сохраняет точность до 8 знаков, что использует 4 байта. DOUBLE сохраняет точность до 16 знаков, что использует 8 байт. REAL это синоним к FLOAT.
  25. Если вы переделите DECIMAL (5,2), какой диапазон значений возможно использовать? - 999.99 to -99.99. Заметьте, что в отрицательных числах минус считается за цифру.
  26. Что произойдёт если в таблице объявлена колонка с типом данных TIMESTAMP? - При сохранении данных в поле данные конвертируются в UTC. При запросе данных они конвертируются обратно относительно установленного часового пояса. При изменении часового пояса мы будем получать другие значения.
  27. Какая разница между Datetime или timestamp? - Разница заключается в способе хранения информации и в других мелочах. DATETIME хранит время в виде целого числа вида YYYYMMDDHHMMSS, используя для этого 8 байтов. Это время не зависит от временной зоны. Оно всегда отображается при выборке точно так же, как было сохранено, независимо от того какой часовой пояс установлен в MySQL. TIMESTAMP хранит 4-байтное целое число, равное количеству секунд, прошедших с полуночи 1 января 1970 года по усреднённому времени Гринвича (т.е. нулевой часовой пояс, точка отсчёта часовых поясов). При получении из базы отображается с учётом часового пояса. Часовой пояс может быть задан в операционной системе, глобальных настройках MySQL или в конкретной сессии.
  28. Объясните тип данных TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP? – При создании устанавливается в NULL, при обновлении устанавливает время обновления.
  29. Как ведёт себя данный тип TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ? - При создании заполняется текущим временем, при обновлении устанавливает время обновления.
  30. Как ведёт себя данный тип TIMESTAMP DEFAULT ‘2006:09:02 17:38:44′ ON UPDATE CURRENT_TIMESTAMP? - При создании заполняется установленным временем, при обновлении устанавливает время обновления.
  31. Если создадите поле VARCHAR(3), что предполагаете увидеть в MySQL таблице? - CHAR(3), MySQL автоматически преобразует тип.

8 комментариев:

  1. > Объясните разницу между mysql и mysqli интерфейсами в PHP? - mysqli является объектно ориентированной версией, mysql является библиотекой функций.
    И всё?!

    ОтветитьУдалить
    Ответы
    1. В написании кода есть два основных направления: функциональное программирование и ООП программирование, есть также и другие, которые мы не будем сейчас затрагивать. mysql интерфейс представляем собой набор простых функций представляющие идиому функционального программирования. mysqli представляет собой интерфейс работы используя принципы ООП. Походу они используют разные драйвера работы с СУБД. Но в mysqli есть синонимы - функции, которые дают работать с этим новым драйвером используя принципы функционального программирования. Потому функции с обеих интерфейсов имеют почти одинаковые функции для работы, отличаются только одной буквой.
      http://php.net/manual/en/book.mysqli.php

      Удалить
  2. > Заметьте, что в отрицательных числах минус считается за цифру.
    За символ.

    ОтветитьУдалить
    Ответы
    1. Если вы говорите про поля типа integer. Использования чистового byte(as integer к примеру) даёт в возможность сохранять числа от -128 до +127. Если вы используете безнаковый тип UNSIGNED, то без отрицательный значений, значения в пложительной области становиться в два раза больше от 0 до 255. Так знак числа обычно храниться в старшем разряде - один бит. + 1 бит - текущее количество * 2. А хранить числовые значения в строках где 1 символ 1 байт необычно, но бывают разные ситуации.

      Удалить
  3. > TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    > При создании устанавливается в NULL
    Да ну? :)
    mysql> create table a(b TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
    Query OK, 0 rows affected (0.04 sec)

    mysql> show create table a;
    +-------+------------------------------------------------------------------------------------------------------------------------------------------+
    | Table | Create Table |
    +-------+------------------------------------------------------------------------------------------------------------------------------------------+
    | a | CREATE TABLE `a` (
    `b` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
    +-------+------------------------------------------------------------------------------------------------------------------------------------------+
    1 row in set (0.00 sec)

    ОтветитьУдалить
    Ответы
    1. Я вижу, что вы создаете таблици, но ничего в них не вносите и не изменяете.

      Если про CURRENT_TIMESTAMP, то работвет.
      mysql> select name, CURRENT_TIMESTAMP from users;
      +---------+---------------------+
      | name | CURRENT_TIMESTAMP |
      +---------+---------------------+
      | | 2012-10-17 09:45:08 |
      | admin | 2012-10-17 09:45:08 |
      | manager | 2012-10-17 09:45:08 |
      +---------+---------------------+
      3 rows in set (0,00 sec)

      Удалить
  4. Автор, почини нумерацию в посте, а то не очень хорошо смотрится.

    ОтветитьУдалить