Серия персональных кровавых рвот - сводка MySQL

интервью

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

MySQL面试常见问题
Часто задаваемые вопросы об интервью с MySQL

Разница между движком базы данных innodb и myisam

InnoDB

MySQL по умолчанию"Транзакционный"Подсистема хранения. Рассмотрите возможность использования других подсистем хранения только в том случае, если вам нужны функции, которые она не поддерживает.

Реализовано четыре стандартных уровня изоляции, уровень по умолчанию"повторяемое чтение"(ПОВТОРЯЕМОЕ ЧТЕНИЕ). На уровне изоляции повторяющегося чтения"Предотвратите фантомное чтение с помощью управления параллелизмом нескольких версий (MVCC) + блокировка промежутка (блокировка следующего ключа)."

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

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

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

MyISAM

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

Предоставляет большое количество функций, в том числе"Компрессионный стол","Индекс пространственных данных"Ждать.

"Транзакции не поддерживаются".

"Блокировки на уровне строк не поддерживаются.", можно заблокировать только всю таблицу, при чтении добавит разделяемую блокировку ко всем таблицам, которые нужно прочитать, а при записи добавит монопольную блокировку к таблице. Однако пока в таблице есть операции чтения, новые записи также могут быть вставлены в таблицу, что называется параллельной вставкой (CONCURRENT INSERT).

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

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

сравнивать

  • "дела": InnoDB является транзакционной и может использовать операторы Commit и Rollback.
  • "параллелизм": MyISAM поддерживает блокировки только на уровне таблицы, а InnoDB также поддерживает блокировки на уровне строк.
  • "иностранный ключ": InnoDB поддерживает внешние ключи.
  • "резервный": InnoDB поддерживает оперативное резервное копирование в режиме онлайн.
  • "аварийное восстановление": MyISAM имеет гораздо более высокую вероятность повреждения после сбоя, чем InnoDB, а восстановление происходит медленнее.
  • "Другие особенности": MyISAM поддерживает сжатые таблицы и индексы пространственных данных.

Как MySQL выполняет SQL

SQL执行的全部过程
Весь процесс выполнения SQL

"MySQL можно разделить на две части: сервисный уровень и уровень механизма хранения:"

  1. "Сервисный уровень включает коннекторы, кэши запросов, анализаторы, оптимизаторы, исполнители и т. д.", охватывающий большинство основных сервисных функций MySQL, а также все встроенные функции (такие как дата, время, математические функции и функции шифрования и т. д.), на этом уровне реализованы все функции кросс-хранилища, такие как хранимые процедуры, триггеры, просмотры и т.д.
  2. **Уровень механизма хранения отвечает за хранение и извлечение данных. ** Его архитектурный режим является подключаемым и поддерживает несколько механизмов хранения, таких как InnoDB, MyISAM и Memory. Наиболее часто используемым механизмом хранения сегодня является InnoDB, который является механизмом хранения по умолчанию, начиная с MySQL 5.5.5.

"Шаги для уровня сервера для последовательного выполнения sql:"

Клиентский запрос -> коннектор (аутентификация пользователя, предоставление разрешений) -> кеш запроса (возврат напрямую, если кеш есть, и выполнение последующих операций, если он не существует) -> анализатор (выполнение лексического анализа и синтаксического анализа на SQL) -> Оптимизатор (в основном выбирает оптимальный метод плана выполнения для выполняемой оптимизации SQL) -> исполнитель (при выполнении он сначала проверяет, есть ли у пользователя полномочия на выполнение, и только если у вас есть интерфейс, предоставляемый этим движком) -> перейти на уровень движка для получения данных Возврат (если кэширование запросов включено, результаты запроса будут кэшироваться)

"Краткое содержание":

  • "Соединитель": Управление подключением, проверка разрешений;
  • "кэш запросов": при попадании в кеш результат будет возвращен напрямую;
  • "Анализатор": выполнить лексический анализ и синтаксический анализ SQL; (на этом этапе также определяется, существует ли поле SQL запроса)
  • "оптимизатор": Генерация плана выполнения, выбор индекса;
  • "Актуатор": запустить двигатель, вернуть результат;
  • "механизм хранения": Храните данные и предоставляйте интерфейсы чтения и записи.

Кислотный принцип mysql

"КИСЛОТА, Атомарность, Консистенция, Изоляция, Долговечность!"

Давайте возьмем пример перевода 50 юаней со счета A на счет B, чтобы проиллюстрировать четыре основные характеристики ACID.

атомарность

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

"Что, если атомарность не может быть гарантирована?"

ОК, появится"несогласованность данных"В случае, когда счет A минус 50 юаней, а счет B добавляет 50 юаней, операция не выполняется. Система без причины потеряет 50 юаней~

изоляция

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

"Что делать, если изоляция не может быть гарантирована?"

Хорошо, предположим, что на счете А 200 юаней, а на счете Б 0 юаней. Счет А переводит деньги на счет Б дважды, сумма составляет 50 юаней, и они выполняются двумя транзакциями. Если изоляция не может быть гарантирована, могут возникнуть следующие ситуации.

事务隔离性
изоляция транзакций

Как показано на рисунке, если изоляция не гарантирована, А вычтет платеж дважды, а Б увеличит платеж только один раз, 50 юаней исчезнут из ниоткуда и все равно появятся."несогласованность данных"ситуация!

Упорство

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

"Что делать, если постоянство не может быть гарантировано?"

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

Представьте, что система сообщает вам, что перевод прошел успешно. Однако вы обнаружите, что сумма не изменилась. В настоящее время данные находятся в недопустимом состоянии данных. Мы рассматриваем это состояние как"несогласованность данных"ситуация.

последовательность

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

"Что делать, если согласованность не может быть гарантирована?"

  • Пример 1: На счете А есть 200 юаней, и на него переведено 300 юаней.В настоящее время баланс счета А составляет -100 юаней. Вы, естественно, обнаружили, что данные на данный момент несовместимы, почему? Поскольку вы определяете состояние, столбец баланса должен быть больше 0.
  • Пример 2: На счете А 200 юаней, а на счет Б переведено 50 юаней. Деньги на счете А списаны, но остаток на счете Б не увеличился из-за различных происшествий. Вы также знаете, что данные в настоящее время противоречивы, почему? Поскольку вы определяете состояние, баланс A+B должен оставаться неизменным.

Как mysql обеспечивает согласованность?

Хорошо, этот вопрос разделен на два уровня."С уровня базы данных", база данных обеспечивает согласованность за счет атомарности, изоляции и надежности. Другими словами, среди четырех характеристик ACID C (согласованность) является целью, A (атомарность), I (изоляция) и D (постоянство) являются средствами, которые предоставляются базой данных для обеспечения согласованности. . База данных должна реализовать три характеристики AID для достижения согласованности. Например, не гарантируется атомарность и, очевидно, непротиворечивость.

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

"С уровня приложения", оцените корректность данных базы данных с помощью кода, а затем решите откатить или отправить данные!

Как mysql гарантирует атомарность

Хорошо, используя Innodbundo log.undo logНазываемый журналом отката, он является ключом к достижению атомарности, которую можно использовать при откате транзакции."Отменить все операторы SQL, которые были успешно выполнены", ему необходимо записать соответствующую информацию журнала, которую вы хотите откатить. Например

  • (1) Когда вы удаляете часть данных, вам необходимо записать информацию об этой части данных.При откате вставьте эту часть старых данных
  • (2) При обновлении фрагмента данных необходимо записать предыдущее старое значение, а при откате выполнить операцию обновления в соответствии со старым значением.
  • (3) При вставке части данных этого года вам нужен первичный ключ этой записи.При откате выполните операцию удаления в соответствии с первичным ключом.

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

Как mysql обеспечивает постоянство

Хорошо, используя Innodbredo log. Как упоминалось ранее, Mysql сначала загружает данные с диска в память, изменяет данные в памяти, а затем сбрасывает их обратно на диск. Если в это время машина внезапно выйдет из строя, данные в памяти будут потеряны.Как решить эту проблему?Это просто, просто запишите данные прямо на диск перед тем, как транзакция будет зафиксирована.Что плохого в этом?

  • Чтобы изменить только один байт на странице, необходимо сбросить всю страницу на диск, что является пустой тратой ресурсов. В конце концов, страница имеет размер 16 КБ, и если вы только немного измените ее, вам придется сбрасывать содержимое 16 КБ на диск, что звучит неразумно.
  • Ведь SQL в транзакции может подразумевать модификацию нескольких страниц данных, и эти страницы данных могут быть не смежными, то есть принадлежать случайному вводу-выводу. Очевидно, что работа со случайным вводом-выводом будет медленнее.

Поэтому было принято решение использоватьredo logРешите вышеуказанную проблему. Когда данные изменяются, они обрабатываются не только в памяти, но и вredo logзафиксировать эту операцию. Когда транзакция будет зафиксирована, она будетredo logЛог сброшен(redo logчасть в памяти, часть на диске). Когда база данных отключена и перезапущена, онаredo logСодержимое базы данных восстанавливается в базу данных, а затем в соответствии сundo logиbinlogСодержимое решает, следует ли откатить данные или зафиксировать данные.

"Каковы преимущества использования журнала повторов?"

На самом деле преимущество в том, чтоredo logЭффективность очистки страницы данных высока, а удельная производительность следующая.

  • redo logНебольшой по размеру ведь только какая страница была изменена, поэтому она маленькая по размеру и быстро прошивается.
  • redo logЭто добавление в конец, который принадлежит последовательному вводу-выводу. Эффективность явно выше, чем у случайного ввода-вывода.

Как mysql обеспечивает изоляцию

Используется механизм блокировки и MVCC.

Проблемы с одновременными транзакциями

грязное чтение

脏读
грязное чтение

отменить модификацию

Обе транзакции T1 и T2 изменяют часть данных,"T1 модифицируется первым, T2 модифицируется позже, а модификация T2 перезаписывает модификацию T1.". Например: транзакция 1 считывает данные A=20 в таблице, транзакция 2 также считывает A=20, транзакция 1 изменяет A=A-1, транзакция 2 также изменяет A=A-1, окончательный результат A=19, транзакции 1 модификации теряются.

丢弃修改
отменить модификацию

неповторяемое чтение

"T2 читает данные, а T1 изменяет данные. Если T2 снова считывает эти данные, результат, считанный в это время, отличается от результата первого чтения.".

不可重复读
неповторяемое чтение

галлюцинации

"T1 считывает данные в определенном диапазоне, T2 вставляет новые данные в этот диапазон, T1 снова считывает данные в этом диапазоне, и результат, считанный в это время, отличается от результата первого чтения.".

幻读
галлюцинации

Разница между неповторяемым чтением и фантомным чтением

"Фокус неповторяемого чтения — изменение, фокус фантомного чтения — добавление или удаление.".

Пример 1 (те же условия, данные вы прочитали, прочтите еще раз и обнаружите, что значение другое): г-н А в транзакции 1 не завершил операцию чтения своей зарплаты в 1000, г-н Б в транзакции 2 Это изменил зарплату А на 2000, в результате чего А прочитал свою зарплату как 2000; это неповторяемое чтение.

Пример 2 (те же условия, количество записей, прочитанных в первый и второй раз, разное): в поддельной таблице зарплаты 4 человека, чья зарплата больше 3000, и транзакция 1 читает всех людей, чья зарплата больше 3000. Всего найдено записей 4. В это время транзакция 2 вставляет еще одну запись с окладом больше 3000. Когда транзакция 1 снова читает ее, найденных записей становится 5, что приводит к фантомному чтению.

уровень изоляции базы данных

  1. Незафиксированное чтение, в транзакции есть модификация, даже если она не зафиксирована, видны другие транзакции, например, для числа А исходное 50 изменено на 100, но я не зафиксировал модификацию, другую транзакцию видит эта модификация, и на этот раз исходная транзакция была отменена, и A все еще 50 в это время, но A 100 замечено другой транзакцией."Может вызвать грязное чтение, фантомное чтение или неповторяющееся чтение."
  2. Фиксация для чтения, для транзакции от начала до фиксации любые изменения, сделанные другими транзакциями, не видны другим транзакциям, например, для числа A, которое изначально было 50, а затем зафиксировано и изменено на 100, в это время другая транзакция до того, как A зафиксирует модификацию, чтение A равно 50. Сразу после чтения A изменяется на 100. В это время другая транзакция читает и обнаруживает, что A внезапно становится 100;"Грязные чтения можно предотвратить, но фантомные или неповторяющиеся чтения все же могут происходить."
  3. Повторяющееся чтение означает, что одна и та же запись для записи читается несколько раз.Например, если читается число A, это всегда A, а A из двух считанных до и после согласуется;"Грязные чтения и неповторяющиеся чтения можно предотвратить, но фантомные чтения все еще могут возникать."
  4. Сериализуемое чтение, в случае параллелизма результат сериализованного чтения одинаков, разницы нет, например, грязное чтение и фантомное чтение не произойдет;"Этот уровень предотвращает грязное чтение, неповторяемое чтение и фантомное чтение."
уровень изоляции грязное чтение неповторяемое чтение Фантомное чтение
READ-UNCOMMITTED
READ-COMMITTED ×
REPEATABLE-READ × ×
SERIALIZABLE × × ×

Поддерживаемый по умолчанию уровень изоляции для механизма хранения MySQL InnoDB — REPEATABLE-READ (повторяемый).

"Здесь следует отметить, что": отличие от стандарта SQL заключается в том, что механизм хранения InnoDB использует уровень изоляции транзакций REPEATABLE-READ."Блокировка следующей клавиши"алгоритм, поэтому он может избежать создания фантомных операций чтения, которые отличаются от других систем баз данных (таких как SQL Server). Поэтому уровень изоляции по умолчанию, поддерживаемый механизмом хранения InnoDB, — это REPEATABLE-READ (повторяемый), который может полностью гарантировать требования к изоляции транзакций, то есть он достиг уровня изоляции SERIALIZABLE (сериализуемый) стандарта SQL.

Поскольку чем ниже уровень изоляции, тем меньше блокировок запросов транзакций, поэтому уровень изоляции большинства систем баз данных READ-COMMITTED:, но вам нужно знать, что механизм хранения InnoDB использует уровень по умолчанию."REPEATABLE-READ без потери производительности".

Механизм хранения InnoDB обычно использует уровень изоляции SERIALIZABLE (сериализуемый) в случае распределенных транзакций.

Зачем использовать индекс

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

У индексов так много преимуществ, почему бы не создать индекс для каждого столбца таблицы?

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

Как индексы улучшают скорость запросов

Превратите неупорядоченные данные в относительно упорядоченные данные (например, проверку с целью)

Примечания по использованию индексов

  • В столбцах, которые необходимо часто искать, это может ускорить поиск;
  • Создайте индекс для столбца, который часто используется в предложении where, чтобы ускорить определение условия.
  • Создайте индекс для столбца, который часто нужно сортировать, потому что индекс уже отсортирован, чтобы запрос мог воспользоваться преимуществами сортировки индекса, ускорив время запроса сортировки.
  • Индексы очень эффективны в средних и больших таблицах, но очень большие таблицы дороги в обслуживании и не подходят для индексации.
  • В часто используемых непрерывных столбцах эти столбцы в основном состоят из некоторых внешних ключей, которые могут ускорить соединение.
  • Избегайте применения функций к полям в предложении where, что приведет к сбою индекса.
  • При использовании InnoDB используйте в качестве первичного ключа самоувеличивающийся первичный ключ, не связанный с бизнесом, то есть используйте логический первичный ключ вместо бизнес-первичного ключа.
  • "Установите для индексируемого столбца значение NOT NULL, иначе движок откажется от использования индекса и выполнит полное сканирование таблицы."
  • Удаляйте индексы, которые давно не используются. Наличие неиспользуемых индексов приведет к ненужной потере производительности.
  • При запросе кеша с ограничением смещения вы можете использовать индексы для повышения производительности.

Две основные структуры данных, используемые индексами MySQL

  • "хэш-индекс", для хэш-индекса базовой структурой данных должна быть хэш-таблица, поэтому, когда большинство требований относится к запросу с одной записью, вы можете выбрать хэш-индекс, который имеет самую высокую производительность запроса; для большинства других сценариев это рекомендуется выбрать индекс BTree
  • "Индекс BTree", индекс Mysql BTree использует B+Tree в B-дереве, но реализация двух основных механизмов хранения (MyISAM и InnoDB) отличается.

Разница между тем, как myisam и innodb реализуют индекс btree

  • MyISAM,"Поле данных листового узла B+Tree хранит адрес записи данных.", Во время извлечения индекса сначала выполните поиск индекса в соответствии с алгоритмом поиска B+Tree, если указанный ключ существует, извлеките значение его поля данных, а затем используйте значение поля данных для чтения соответствующей записи данных в адресная область чтения, которая называется «Некластеризованный индекс»
  • InnoDB, его файл данных сам по себе является индексным файлом по сравнению с MyISAM,"Файлы индексов и файлы данных разделены","Сам файл данных таблицы представляет собой структуру индекса, организованную B+Tree, а поле данных узла дерева сохраняет полные записи данных.", ключ этого индекса является первичным ключом таблицы данных, поэтому сам файл данных таблицы InnoDB является первичным индексом. Это называется "кластеризованный индекс" или кластеризованный индекс, а остальные индексы используются как вспомогательные индексы. Поле данных вспомогательного индекса хранит значение первичного ключа соответствующей записи вместо адреса. Это также отличается от MyISAM Поиск по первичному индексу При извлечении данных путем непосредственного нахождения узла, в котором находится ключ, при поиске по вспомогательному индексу нужно сначала получить значение первичного ключа, а затем перейти через первичный индекс. Поэтому при проектировании таблицы не рекомендуется использовать слишком длинное поле в качестве первичного ключа, а также не рекомендуется использовать в качестве первичного ключа немонотонное поле, что приведет к частому разбиению первичного индекса.

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

  • "Парадигмальная оптимизация": например, устранение избыточности (экономия места..)
  • "Антипарадигмальная оптимизация": например, соответствующим образом добавить избыточность (уменьшить объединение).
  • "Ограничьте диапазон данных": Обязательно запрещайте операторы запросов без каких-либо условий, ограничивающих диапазон данных. Например: когда пользователи запрашивают историю заказов, мы можем контролировать ее в течение месяца.
  • "разделение чтения/записи": Классическая схема разделения базы данных, основная библиотека отвечает за запись, а подчиненная библиотека отвечает за чтение;
  • "разделенный стол": Разделы физически разделяют данные, и данные в разных разделах могут храниться в файлах данных на разных дисках. Таким образом, при запросе этой таблицы нужно сканировать только раздел таблицы, а не полный просмотр таблицы, что значительно сокращает время запроса, кроме того, разделы на разных дисках также распределят передачу данных этой таблицы в Различный дисковый ввод-вывод, тщательно настроенный раздел может равномерно распределить конкуренцию по передаче данных за дисковый ввод-вывод. Этот метод можно использовать для расписаний с большим объемом данных. Автоматически создавать разделы таблицы по месяцам.

"Разделение на самом деле делится на вертикальное разделение и горизонтальное разделение:"

  • Случай: Простая система покупок временно включает следующую таблицу:
  • 1. Таблица продуктов (объем данных 10 Вт, стабильный)
  • 2. Таблица заказов (объем данных составляет 200 Вт, и есть тенденция к увеличению)
  • 3. Пользовательская таблица (объем данных составляет 100 Вт, и есть тенденция к увеличению)
  • Взяв mysql в качестве примера для описания горизонтального и вертикального разделения, порядок величины, которую может выдержать mysql, составляет миллионы статических данных и может достигать десятков миллионов.
  • "Разделить по вертикали:"
    • Решаем проблему: io конкуренция между таблицами
    • Не решает проблему: давление роста объема данных в одной таблице
    • Схема: поместите таблицу продуктов и таблицу пользователей на один сервер, а таблицу заказов поместите на отдельный сервер.
  • "Разделить по горизонтали:"
    • Решить проблему: давление увеличения количества данных в одной таблице
    • Не решает проблему: конфликт io между таблицами
  • план:"пользовательская таблица"Разделение на таблицу пользователей мужского пола и таблицу пользователей женского пола по полу,"форма заказа"Разделив выполненные и завершенные заказы на выполненные и незавершенные,"Лист продукта"Поместите незавершенные заказы на один сервер, выполненные заказы и таблицы пользователей-мужчин на один сервер, а таблицы пользователей-женщин на один сервер (женщины любят делать покупки, ха-ха).

Что такое первичный ключ, суперключ, потенциальный ключ, внешний ключ

  • "супер ключ": однозначно идентифицируется в отношении"набор атрибутов кортежей"суперключ называется реляционной схемой

  • "ключ-кандидат": не содержит"Суперключи для избыточных свойств"называются ключами-кандидатами. То есть в ключе-кандидате, если атрибут удален, это не ключ!

  • "первичный ключ":"Пользователь выбирает в качестве ключа-кандидата первичный ключ программы идентификации кортежа."

  • "иностранный ключ": если реляционная схема"Атрибут K в R является первичным ключом других схем.",Так"k называется внешним ключом в схеме R".

"Пример":

Студенческий билет Имя Пол возраст отделение Профессиональный
20020612 Ли Хуэй мужчина 20 компьютер разработка программного обеспечения
20060613 Чжан Мин мужчина 18 компьютер разработка программного обеспечения
20060614 Ван Сяоюй Женский 19 физика механика
20060615 Ли Шухуа Женский 17 биология зоология
20060616 Чжао Цзин мужчина 21 Химическая пищевая химия
20060617 Чжао Цзин Женский 20 биология ботаника
  1. Супер ключ: Таким образом, мы можем найти из примера, что идентификатор студента является уникальным идентификатором, который идентифицирует сущность студента. Тогда суперключ кортежа — это номер студента. В дополнение к этому мы можем комбинировать его с другими свойствами, такими как :(学号,性别), (学号,年龄)
  2. Ключ-кандидат: в этом примере идентификатор учащегося является уникальным идентификатором, который может однозначно идентифицировать кортеж, поэтому идентификатор учащегося является ключом-кандидатом.На самом деле, ключ-кандидат является подмножеством суперключа, например (идентификатор учащегося , возраст) является суперключом, но не потенциальным ключом. Потому что у него есть дополнительные свойства.
  3. Первичный ключ: Проще говоря, потенциальным ключом кортежа в примере является номер студента, но мы выбираем его как уникальный идентификатор кортежа, тогда номер студента является первичным ключом.
  4. Внешний ключ связан с первичным ключом. Например, в записи учащегося первичным ключом является идентификатор учащегося, а в таблице стенограммы также есть поле идентификатора учащегося, поэтому идентификатор учащегося является внешним ключом стенограммы. table и первичный ключ таблицы student.

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

Разница между удалением, удалением и усечением

  • drop напрямую удаляет таблицу;
  • truncate удаляет данные в таблице, а самоувеличивающийся идентификатор начинается с 1 при повторной вставке;
  • удалить удалить данные в таблице, вы можете добавить предложение where.
  1. Процесс удаления инструкции DELETE заключается в одновременном удалении строки из таблицы и одновременном сохранении операции удаления строки в качестве записи транзакции в журнале для операции отката. TRUNCATE TABLE удаляет все данные из таблицы одновременно и не записывает отдельные записи операции удаления в журнал для сохранения, а удаленные строки не могут быть восстановлены. И триггер удаления, связанный с таблицей, не будет активирован во время процесса удаления. Быстрое исполнение.
  2. Табличное и индексное пространство. Когда таблица TRUNCATE, пространство, занимаемое таблицей и индексом, будет восстановлено до исходного размера, а операция DELETE не уменьшит пространство, занимаемое таблицей или индексом. Оператор drop освобождает все пространство, занимаемое таблицей.
  3. В общем, удалить> обрезать> удалить
  4. Область применения. TRUNCATE можно использовать только для TABLE, DELETE можно использовать для таблицы и представления.
  5. TRUNCATE и DELETE удаляют только данные, а DROP удаляет всю таблицу (структуру и данные).
  6. обрезать и удалить без где: удалить только данные, а не структуру (определение) таблицы.Операция drop удалит ограничение (ограничение), триггер (триггер) индекс (индекс), от которого зависит структура таблицы ( constrain), триггер (триггер) index (индекс); зависит от таблицы Хранимая процедура/функция будет сохранена, но ее статус изменится на: недействителен.
  7. Оператор удаления — это DML (язык манипулирования данными), и эта операция будет помещена в сегмент отката и вступит в силу после фиксации транзакции. Если есть соответствующий тигр, он будет запущен при выполнении.
  8. Усечение и удаление — это DDL (язык определения данных), операция вступает в силу немедленно, исходные данные не помещаются в сегмент отката и не могут быть отброшены.
  9. Используйте удаление и усечение экономно без резервного копирования. Чтобы удалить некоторые строки данных, используйте команду «Удалить» и обратите внимание на комбинирование с «где», чтобы ограничить область влияния. Сегмент отката должен быть достаточно большим. Для удаления таблицы используйте drop, если вы хотите сохранить таблицу и удалить данные в таблице, если это не имеет никакого отношения к транзакции, вы можете использовать truncate. Если это связано с транзакцией или вы всегда хотите активировать триггер, используйте удаление.
  10. Truncate table имя таблицы работает быстро и эффективно, потому что: truncate table функционально такой же, как оператор DELETE без предложения WHERE: оба удаляют все строки в таблице. Но TRUNCATE TABLE быстрее, чем DELETE, и использует меньше системных ресурсов и ресурсов журнала транзакций. Оператор DELETE удаляет одну строку за раз и записывает запись в журнал транзакций для каждой удаленной строки. TRUNCATE TABLE удаляет данные, освобождая страницы данных, используемые для хранения данных таблицы, и записывает только освобождение страниц в журнале транзакций.
  11. TRUNCATE TABLE удаляет все строки в таблице, но оставляет структуру таблицы и ее столбцы, ограничения, индексы и т. д. без изменений. Значение счетчика, используемое для идентификации новой строки, сбрасывается до начального значения для этого столбца. Если вы хотите сохранить значение счетчика идентификаторов, используйте вместо этого DELETE. Если вы хотите удалить определение таблицы и ее данные, используйте оператор DROP TABLE.
  12. Для таблиц, на которые ссылаются ограничения FOREIGN KEY, нельзя использовать TRUNCATE TABLE, а можно использовать оператор DELETE без предложения WHERE. Поскольку TRUNCATE TABLE не регистрируется, он не может активировать триггеры.

Роль представления, можно ли изменить представление?

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

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

Создайте представление:create view xxx as xxxx

Для некоторых представлений, таких как функция группового агрегирования Distinct Union, которая не использует подзапросы соединения, ее можно обновить, и обновление представления обновит базовую таблицу; но представление в основном используется для упрощения поиска, защиты данных. , и не используется для обновления. , и большинство представлений не могут быть обновлены.

парадигма базы данных

первая нормальная форма

В любой реляционной базе данных первая нормальная форма (1NF) является основным требованием к реляционной схеме, и база данных, не удовлетворяющая первой нормальной форме (1NF), не является реляционной базой данных. Так называемая первая нормальная форма (1НФ) означает, что каждый столбец таблицы базы данных является неделимым базовым элементом данных, и в одном и том же столбце не может быть нескольких значений, то есть атрибут в сущности не может иметь несколько значений или повторяющиеся атрибуты. . При наличии повторяющихся атрибутов может потребоваться определение новой сущности.Новая сущность состоит из повторяющихся атрибутов, и новая сущность имеет отношение "один ко многим" с исходной сущностью. Каждая строка таблицы в первой нормальной форме (1NF) содержит информацию только об одном экземпляре. короче,"Первая нормальная форма — это столбец без повторений.".

вторая нормальная форма

Вторая нормальная форма (2НФ) устанавливается на основе первой нормальной формы (1НФ), то есть для выполнения второй нормальной формы (2НФ) сначала должна выполняться первая нормальная форма (1НФ). Вторая нормальная форма (2NF) требует, чтобы каждый экземпляр или строка в таблице базы данных были однозначно различимы. Для достижения различия обычно требуется добавить в таблицу столбец для хранения уникального идентификатора каждого экземпляра. Этот уникальный столбец атрибутов называется первичным ключом или первичным ключом, первичным ключом. Вторая нормальная форма (2NF) требует, чтобы атрибуты объекта полностью зависели от первичного ключа. Так называемая полная зависимость означает, что не может существовать атрибут, который зависит только от части первичного ключа, если он существует, то этот атрибут и эта часть первичного ключа должны быть разделены, чтобы образовать новую сущность, и новый объект и исходный объект являются отношениями "один ко многим". Для достижения различия обычно требуется добавить в таблицу столбец для хранения уникального идентификатора каждого экземпляра. короче,"Вторая нормальная форма заключается в том, что непервичный атрибут частично не зависит от первичного ключа.".

третья нормальная форма

Удовлетворение третьей нормальной форме (3НФ) должно сначала удовлетворять второй нормальной форме (2НФ). Короче говоря, третья нормальная форма (3NF) требует, чтобы ни одна таблица базы данных не содержала информации, отличной от первичного ключа, которая уже содержится в других таблицах. Например, ** есть таблица информации об отделе, в которой каждый отдел имеет такую ​​информацию, как номер отдела (dept_id), название отдела, описание отдела и так далее. Затем, после того как номер отдела указан в таблице сведений о сотрудниках, больше невозможно добавить информацию, относящуюся к отделу, такую ​​как название отдела и профиль отдела, в таблицу сведений о сотрудниках. Если таблицы сведений об отделе не существует, ее также следует построить по третьей нормальной форме (3НФ), иначе будет много избыточности данных. ** Проще говоря, третья нормальная форма — это когда свойство не зависит от других непервичных свойств. (я понимаю, чтобы удалить избыточность)

Что такое индекс покрытия

Если индекс содержит (или покрывает) значения всех полей, которые необходимо запросить, мы называем его «покрывающим индексом». Мы знаем, что в механизме хранения InnoDB, если это не индекс первичного ключа, конечный узел хранит первичный ключ + значение столбца. В конце необходимо «вернуться к таблице», то есть заново искать по первичному ключу, что будет медленнее. Покрывающий индекс должен сопоставить запрашиваемый столбец с индексом, не возвращаясь к таблице!

различные деревья

Я не буду много вводить здесь, если вам интересно, вы можете посмотреть это здесьразличные деревья

Это не легко создать, если вы найдете это полезным, дайте маленькую звезду. адрес гитхаба 😁😁😁

В этой статье используетсяmdniceнабор текста