Общие вопросы и ответы на собеседованиях по MySQL

MySQL

1. Какие типы блокировок существуют в MySQL?

1. Блокировки на уровне таблицы: низкие накладные расходы и быстрая блокировка, отсутствие взаимоблокировок, большая степень детализации блокировок, самая высокая вероятность конфликтов блокировок и самый низкий уровень параллелизма.

2. Блокировки на уровне строк: большие накладные расходы, медленная блокировка, возникают взаимоблокировки, степень детализации блокировок наименьшая, вероятность конфликтов блокировок наименьшая, параллелизм самый высокий.

3. Блокировки страниц: накладные расходы и время блокировки находятся между блокировками таблиц и блокировками строк, могут возникать взаимоблокировки, степень детализации блокировок находится между блокировками таблиц и блокировками строк, а степень параллелизма средняя.

2. Какие разные таблицы существуют в MySQL?

Существует 5 типов таблиц: 1, MyISAM2, Heap 3, Merge 4, INNODB 5, MISAM

3. Кратко опишите разницу между MyISAM и InnoDB в базе данных MySQL.

МойISAM:

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

Таблица MYISAM состоит из трех файлов: индексный файл, файл структуры таблицы, файл данных;

При использовании филиппинского кластерного индекса в поле данных файла индекса хранится указатель на файл данных. Вторичный индекс в основном такой же, как первичный индекс, но вторичный индекс не обязан гарантировать уникальность.

Innodb:

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

Механизм InnoDb хранится в файловом пространстве (общее табличное пространство, размер таблицы не контролируется операционной системой,

Таблица может быть распределена по нескольким файлам), а может быть и множественной (установлена ​​как независимая пустая таблица, размер таблицы ограничен размером файла операционной системы, обычно 2G), и ограничен размером файла операционная система;

Индекс первичного ключа принимает кластеризованный индекс (поле данных индекса хранит сам файл данных), а поле данных вторичного индекса хранит значение первичного ключа, поэтому, чтобы найти данные из вторичного индекса, вам нужно чтобы сначала найти значение первичного ключа через вторичный индекс, а затем получить доступ к вторичному индексу; Используйте автоинкрементный первичный ключ, чтобы предотвратить большую корректировку файла, чтобы сохранить древовидную структуру B+ при вставке данных.

4. Четыре имени уровня изоляции транзакций, поддерживаемые InnoDB в MySQL, и

Разница между уровнями? Четыре уровня изоляции, определенные стандартом SQL:

1. читать незафиксированные: читать незафиксированные данные

2. зафиксированное чтение: грязное чтение, неповторяемое чтение

3. Повторяемое чтение: Повторяемое чтение

4, сериализуемые: серийные вещи

5. В чем разница между CHAR и VARCHAR?

1. Типы CHAR и VARCHAR отличаются хранением и поиском

2. Длина столбцов CHAR фиксируется до длины, объявленной при создании таблицы, а значение длины находится в диапазоне от 1 до 255. Когда значения CHAR сохраняются, они дополняются пробелами до определенной длины и конечными пробелами. необходимо удалить при получении значений CHAR.

6. В чем разница между первичным ключом и ключом-кандидатом?

Каждая строка таблицы однозначно идентифицируется первичным ключом, а таблица имеет только один первичный ключ.

Первичный ключ также является ключом-кандидатом. По соглашению ключ-кандидат может быть обозначен как первичный ключ и может использоваться для любой ссылки на внешний ключ.

7. Для чего используется myisamchk?

Он используется для сжатия таблиц MyISAM, что снижает использование диска или памяти.

В чем разница между MyISAM Static и MyISAM Dynamic?

Все поля в MyISAM Static имеют фиксированную ширину. Таблица MyISAM с динамическим изображением TEXT, поля BLOB, например, для размещения различных длин типа данных.

Myisam static легче восстановить при нарушении.

8. Что произойдет, если в таблице есть столбец, определенный как TIMESTAMP?

Всякий раз, когда строка изменяется, поле метки времени получает текущую метку времени. Что произойдет, если в таблице будет достигнуто максимальное значение, когда для столбца установлено значение AUTO INCREMENT? Он прекращает увеличиваться, и любые дальнейшие вставки будут генерировать ошибку, поскольку ключ уже используется.

Как я могу узнать, какой автоинкремент был назначен на последнюю вставку? LAST_INSERT_ID вернет последнее значение, присвоенное Auto_increment, и не требует указания имени таблицы.

9. Как вы видите все индексы, определенные для таблицы?

Индексы определяются для таблиц следующим образом:

SHOW INDEX FROM ;

10. Что означают % и _ в операторе LIKE? % соответствует 0 или более символов, _ — это просто символ в операторе LIKE.

Как преобразовать временные метки Unix и MySQL? UNIX_TIMESTAMP — это команда для преобразования временной метки MySQL в временную метку Unix. FROM_UNIXTIME — команда для преобразования временной метки Unix в временную метку MySQL.

11. Что такое оператор сравнения столбцов?

Используйте операторы =, , =, >, >, , AND, OR или LIKE при сравнении столбцов в инструкциях SELECT.

12. В чем разница между BLOB и TEXT?

BLOB — это двоичный объект, который может содержать переменный объем данных. TEXT — это BLOB-объект без учета регистра.

Единственная разница между типами BLOB и TEXT заключается в учете регистра при сортировке и сравнении значений BLOB и отсутствии учета регистра для значений TEXT.

13. В чем разница между MySQL_fetch_array и MySQL_fetch_object?

Ниже приведен разница между mysql_fetch_array и mysql_fetch_object:

MySQL_fetch_array() — возвращает результирующие строки в виде ассоциативного массива или обычного массива из базы данных. MySQL_fetch_object — возвращает строку результата из базы данных как объект.

14. Где будут храниться таблицы MyISAM, а также указать формат их хранения?

Каждая таблица MyISAM хранится на диске в трех форматах:

Определение таблицы хранения файлов ".frm"

· Файл данных имеет ".MYD" (MYData)

индексные файлы расширений имеют расширение «.MYI» (MYIndex)

15. Как MySQL оптимизирует DISTINCT?

DISTINCT преобразуется в GROUP BY для всех столбцов и используется вместе с предложением ORDER BY. ВЫБЕРИТЕ ОТЛИЧНЫЕ t1.a ОТ t1,t2, где t1.a=t2.a;

16. Как отобразить первые 50 строк?

В MySQL запросите отображение первых 50 строк со следующим кодом: SELECT*FROM TABLE LIMIT 0,50;

17. Сколько столбцов можно использовать для создания индекса?

Любая стандартная таблица может создать до 16 индексных столбцов.

18. В чем разница между NOW() и CURRENT_DATE()?

Команда NOW() используется для отображения текущего года, месяца, даты, часа, минуты и секунды. CURRENT_DATE() отображает только текущий год, месяц и день.

19. Что такое нестандартный строковый тип?

1. МАЛЕНЬКИЙ ТЕКСТ

2. ТЕКСТ

3. СРЕДНЕТЕКСТ

4. ДЛИННЫЙ ТЕКСТ

20, что такое общая функция SQL?

1. CONCAT(A, B) — объединяет два строковых значения для создания одной выходной строки. Обычно используется для объединения двух или более полей в одно.

2. FORMAT(X, D) — форматирование чисел от X до D со значащими цифрами.

3. ТЕКУЩАЯДАТА(), ТЕКУЩАЯВРЕМЯ() - возвращает текущую дату или время.

4. NOW() — возвращает текущую дату и время в качестве значения.

5. МЕСЯЦ(), ДЕНЬ(), ГОД(), НЕДЕЛЯ(), ДЕНЬ НЕДЕЛИ() — извлекает указанные данные из значения даты.

6. ЧАС(), МИНУТА(), СЕКУНД() – извлекает данные из значения времени.

7, DATEDIFF (A, B) - определение разницы между двумя датами, обычно используется для расчета возраста

8. SUBTIMES(A, B) – определяет разницу между двумя значениями времени.

9. FROMDAYS (INT) — Преобразует целое число дней в значение даты.

21. Поддерживает ли MySQL транзакции?

В режиме по умолчанию MySQL находится в режиме автоматической фиксации, все операции обновления базы данных будут зафиксированы немедленно, поэтому по умолчанию MySQL не поддерживает транзакции.

Но если ваш тип таблицы MySQL должен использовать таблицы InnoDB или таблицы BDB, ваш MySQL может использовать обработку транзакций, используйте SET

AUTOCOMMIT=0 заставит MySQL разрешить режим без автоматической фиксации в режиме без автоматической фиксации.

В режиме автоматической фиксации вы должны использовать COMMIT для фиксации изменений или ROLLBACK для отката изменений.

22. Какой тип поля используется для записи валюты в MySQL

Типы NUMERIC и DECIMAL реализованы MySQL как один и тот же тип, что разрешено стандартом SQL92. Они используются для хранения значений, точная точность которых чрезвычайно важна, например данных, связанных с деньгами. При объявлении класса одним из этих типов точность и масштаб могут быть указаны (и обычно указываются).

Например:

salary DECIMAL(9,2)

В этом примере 9 (точность) представляет собой общее количество десятичных разрядов, которое будет использоваться для хранения значения, а 2 (масштаб) представляет количество десятичных разрядов, которое будет использоваться для хранения значения. Следовательно, в данном случае диапазон значений, которые можно хранить в столбце зарплаты, составляет от -9999999,99 до 9999999,99.

23. Сколько таблиц о разрешениях есть в MySQL?

Сервер MySQL контролирует доступ пользователей к базе данных через таблицу привилегий, которая хранится в базе данных MySQL и инициализируется сценарием MySQL_install_db. Этими таблицами привилегий являются user, db, table_priv, columns_priv и host соответственно.

24. Каким может быть строковый тип столбца?

Тип строки: 1. SET

2. БЛОБ

3. ПЕРЕЧИСЛЕНИЕ

4. СИМВОЛ

5. ТЕКСТ

25. Для хранения издательской системы используется база данных MySQL.Приращение более 50 000 в день.Предполагается, что она будет эксплуатироваться и поддерживаться в течение трех лет.Как ее оптимизировать?

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

2. Выберите соответствующий тип данных поля таблицы и механизм хранения, а также соответствующим образом добавьте индексы.

3. Разделение чтения и записи библиотеки MySQL между ведущим и ведомым.

4. Найдите обычные таблицы, чтобы уменьшить объем данных в одной таблице и повысить скорость запросов. 5. Добавьте механизмы кэширования, такие как memcached, apc и т. д.

6. Для страниц, которые не часто изменяются, создайте статические страницы.

7. Напишите эффективный SQL. Например, SELECT * FROM TABEL заменяется на SELECT field_1, field_2, field_3 FROM TABLE.

26. Стратегия оптимизации блокировки

1. Разделение чтения и записи

2. Блокировка сегмента

3. Сокращение времени удержания блокировки

  1. Несколько потоков пытаются получить ресурсы в одном и том же порядке.

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

27, основной принцип и оптимизация индекса

B+ дерево, оптимизированное B+ дерево

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

28. При каких обстоятельствах индекс установлен, но не может быть использован?

1. Операторы LIKE, начинающиеся с «%», нечеткое соответствие

2. Индекс не используется до и после оператора ИЛИ одновременно.

3. Неявное преобразование типа данных (например, varchar без одинарных кавычек может быть автоматически преобразовано в тип int)

29. Как оптимизировать MySQL на практике

Оптимизировать лучше всего в следующем порядке:

1. Оптимизация операторов и индексов SQL

2. Оптимизация структуры таблиц базы данных

3. Оптимизация конфигурации системы

4. Аппаратная оптимизация

30. Как оптимизировать базу данных

1. Выберите наиболее подходящий атрибут поля, максимально уменьшите заданную ширину поля и попытайтесь установить для поля значение NOTNULL, например «провинция», «пол», лучше всего использовать ENUM.

2. Используйте соединения (JOIN) вместо подзапросов

3. Используйте UNION вместо временных таблиц, созданных вручную

4. Обработка транзакций

5. Блокируйте таблицы и оптимизируйте обработку транзакций

6. Применяйте внешние ключи и оптимизируйте заблокированные таблицы

7. Создайте индекс

8. Оптимизировать утверждение запроса

31. Кратко опишите MySQL, индекс, первичный ключ, уникальный индекс, совместный индекс.

Разница и какое влияние она оказывает на производительность базы данных (как при чтении, так и при записи)

Индексы — это специальные файлы (индексы таблиц InnoDB являются неотъемлемой частью табличного пространства), которые содержат указатели на ссылки на все записи в таблице.

Единственная задача обычного индекса (индекса, определяемого ключевыми словами KEY или INDEX) — ускорить доступ к данным.

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

Первичный ключ — это специальный уникальный индекс. В таблице может быть определен только один индекс первичного ключа. Первичный ключ используется для уникальной идентификации записи и создается с помощью ключевого слова PRIMARY KEY.

Индекс может охватывать несколько столбцов данных, например, такой индекс, как INDEX(columnA, columnB), который является совместным индексом.

Индекс может значительно повысить скорость запроса данных, но замедлит скорость вставки, удаления и обновления таблицы, поскольку файл индекса также работает при выполнении этих операций записи.

32. Что такое транзакция в базе данных?

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

Особенности сделки:

1. Атомарность: то есть неделимость, транзакции либо выполняются все, либо ни одна из них не выполняется.

2. Консистенция или последовательность. Выполнение транзакции приводит к переходу базы данных из одного правильного состояния в другое.

3. Изоляция. Любые изменения данных, сделанные транзакцией, не могут быть доступны для любой другой транзакции до тех пор, пока транзакция не будет должным образом зафиксирована,

4. Настойчивость. После корректного совершения транзакции ее результаты будут постоянно храниться в базе данных, даже если после совершения транзакции возникнут другие сбои, результаты обработки транзакции будут сохранены. Или понимайте это так: транзакция — это группа операторов SQL, которые связаны друг с другом как логическая единица работы. или есть узел. Чтобы убедиться, что он либо выполняется, либо не выполняется, можно использовать транзакции. Чтобы рассматривать сгруппированный оператор как транзакцию, он должен пройти тесты ACID, а именно атомарность, непротиворечивость, изоляцию и надежность.

33. Что вызывает уязвимости SQL-инъекций? Как это предотвратить?

Причины внедрения SQL: В процессе разработки программы мы не уделили внимание стандартизации написания операторов SQL и фильтрации специальных символов, чтобы клиент мог отправлять некоторые операторы SQL через глобальные переменные POST и GET для нормального выполнения. Способы предотвращения внедрения SQL:

Включите настройки magic_quotes_gpc и magic_quotes_runtime в файле конфигурации.

При выполнении операторов SQL используйте добавочные черты для преобразования операторов SQL Старайтесь не опускать двойные и одинарные кавычки при написании операторов SQL.

Оператор Sql для фильтрации некоторых ключевых слов: обновить, вставить, удалить, выбрать, *.

Совершенствуйте навыки именования таблиц и полей базы данных, а также назовите некоторые важные поля в соответствии с характеристиками программы, которые нелегко угадать.

34. Выберите подходящий тип данных для полей в таблице.

Приоритет типа поля: integer>date,time>enum,char>varchar>blob,text

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

35. Срок хранения

Datetime: сохраняет время эпохи в формате YYYY-MM-DD HH:MM:SS, с точностью до секунд, занимает 8 байт дискового пространства, тип datatime не имеет ничего общего с часовым поясом

Временная метка: Хранится в формате временной метки, занимает 4 байта, диапазон небольшой от 1970-1-1 до 2038-1-19, отображение зависит от указанного часового пояса, значение по умолчанию может быть получено автоматически, когда данные в первом столбце строка изменена Измените столбец метки времени, чтобы получить значение Дата: (день рождения) Количество занятых байтов меньше, чем при использовании строки .datatime.int для хранения, требуется только 3 байта для использования даты, а также даты и месяца Вы также можете использовать функцию даты и времени, чтобы получить период даты Рассчитать время: сохранить временную часть данных

Примечание. Не используйте строковый тип для хранения данных даты и времени (обычно он занимает меньше места для хранения, чем строка, вы можете использовать функцию даты при поиске и фильтрации) использование int для хранения даты и времени не так хорошо, как использование тип метки времени

36. Для реляционных баз данных очень важным понятием является индексация, пожалуйста, ответьте

Несколько вопросов по индексам:

1. Какова цель индекса?

Более быстрый доступ к определенной информации в таблицах данных для более быстрого поиска

Создайте уникальный индекс, чтобы гарантировать уникальность каждой строки данных в таблице базы данных. Ускорение таблиц и соединений между таблицами

При использовании предложений группировки и сортировки для выборки данных время группировки и сортировки в запросах может быть значительно сокращено 2. Каково негативное влияние индексов на системы баз данных?

Негативное влияние:

Для создания и обслуживания индексов требуется время, и это время увеличивается по мере увеличения объема данных; индексы требуют физического пространства, не только пространства данных для таблиц, но и физического пространства для каждого индекса; при добавлении и удалении таблиц изменения индекса также должны поддерживаться динамически, что снижает скорость обслуживания данных.

3. Каковы принципы индексации таблиц данных?

Создавайте индексы для наиболее часто используемых полей, чтобы сузить запрос. Создавайте индексы для часто используемых полей, которые необходимо отсортировать.

4. В каких случаях нецелесообразно создавать индекс?

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

37. Объясните разницу между внешним соединением MySQL, внутренним соединением и самосоединением.

Давайте сначала поговорим о перекрестном соединении: перекрестное соединение также называется декартовым произведением, оно относится к прямому сопоставлению всех записей одной таблицы со всеми записями другой таблицы без использования каких-либо условий. Внутреннее соединение — это перекрестное соединение только с условием.По определенному условию записи, удовлетворяющие условию, отфильтровываются, а записи, не соответствующие условию, не будут отображаться в результирующем наборе, т. е. внутренний join объединяет только совпадающие строки.

Внешнее соединение Результирующий набор содержит не только строки, удовлетворяющие условиям соединения, но также левую таблицу, правую таблицу или обе таблицы.

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

38. Обзор механизма отката транзакций в Myql

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

39, язык SQL, в том числе какие части? Какие ключевые слова действия есть в каждом разделе?

Язык SQL включает четыре части: определение данных (DDL), манипулирование данными (DML), управление данными (DCL) и запрос данных (DQL).

Определение данных: создание таблицы, изменение таблицы, удаление таблицы, создание/удаление индекса и т. д. Обработка данных: выбор, вставка, обновление, удаление, управление данными: предоставление, отмена Запрос данных: выбор

40. Каковы ограничения целостности?

Целостность данных относится к точности и надежности данных.

Делится на следующие четыре категории:

1. Целостность объекта: каждая строка указанной таблицы является уникальным объектом в таблице.

2. Целостность домена: это означает, что столбцы в таблице должны соответствовать определенному ограничению типа данных, и ограничение также включает диапазон значений, точность и другие правила.

3. Ссылочная целостность: это означает, что данные первичного ключа и внешнего ключа двух таблиц должны быть согласованы, что обеспечивает согласованность данных между таблицами и предотвращает потерю данных или распространение бессмысленных данных в базе данных.

4. Целостность, определяемая пользователем. Различные системы реляционных баз данных часто требуют некоторых специальных ограничений в зависимости от среды их приложений. Определяемая пользователем целостность — это ограничение для конкретной реляционной базы данных, отражающее семантические требования, которым должно соответствовать конкретное приложение.

Ограничения, связанные с таблицами: включая ограничения столбцов (NOT NULL (ненулевые ограничения)) и ограничения таблиц (PRIMARY KEY, внешний ключ, проверка, UNIQUE).

Сбор благосостояния Чтобы узнать больше вопросов об интервью, обратите внимание на публичный аккаунт брата Б: java2b (поиск WeChat)