Достаточно хорошо изучить MySQL после прочтения этой статьи (рекомендуемый сборник)

Оглавление

1. Введение в MySQL:

2. Термины РСУБД:

3. Тип данных:

4. Работа с базой данных

проиллюстрировать:

5. Ограничения MySQL:

6. Механизм хранения

7. Работа с таблицей данных:

1. Просмотрите структуру таблицы

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

 3. Изменить таблицу

8. Добавьте данные в таблицу

9. Запросить все данные в таблице 

10. Изменить данные таблицы 

11. Удалить данные таблицы 

 1. Используйте Удалить, чтобы удалить

2. Используйте усечение, чтобы очистить данные таблицы

12. Скопируйте данные таблицы

1. Таблица B не существует

(1) Скопируйте данные и структуру таблицы A в (вновь созданную) таблицу B. 

(2) Скопируйте структуру таблицы A в (вновь созданную) таблицу B.

2. Таблица B уже существует

13. Экспорт данных таблицы

14. Импорт данных таблицы

1. Используйте оператор LOAD DATA INFILE:

2. Используйте оператор INSERT INTO для вставки данных в пакетах:

15. Запрос данных одной таблицы

1. Общая структура оператора запроса выглядит следующим образом: 

 2. Список полей запроса

(1) Запросить все поля

(2) Запросить указанное поле 

(3) Установите псевдоним столбца

(4) Используйте ключевое слово DISTINCT, чтобы удалить повторяющиеся строки результатов.

3. Условный запрос 

(1) Реляционные операторы:

(2) Логические операторы:

(3) Установить операторы:

(4) Оператор диапазона:

(5) Нулевой оператор:

(6) Нечеткий запрос:

4. Групповой статистический скрининг

(1) Группировка 

(2) Статистика

(3) скрининг

5. Сортировка

6. Ограничьте количество строк результатов запроса

16. Запрос соединения нескольких таблиц 

1. Внутреннее соединение (INNER JOIN):

2. Левое соединение (LEFT JOIN):

3. Правое соединение (RIGHT JOIN):

4. Полное соединение (FULL JOIN):

5. Перекрестное соединение:

17. Расширенный запрос (подзапрос)

1. Концепция и использование

2. Подзапросы пакетного сравнения

3. Подзапрос с использованием existsits

4. Для слияния двух наборов результатов запроса

18. Регулярные выражения

19. SQL-инъекция 


1. Введение в MySQL:

MySQL — это система управления реляционными базами данных с открытым исходным кодом (RDBMS), разработанная и поддерживаемая шведской компанией MySQL AB, а затем приобретенная корпорацией Oracle. MySQL известен своей превосходной производительностью, стабильностью и простотой использования и широко используется при разработке различных приложений и веб-сайтов.

Ниже приведены некоторые особенности и функции MySQL:

 1. Реляционная база данных: MySQL — это реляционная база данных, которая организует данные в виде таблиц и управляет данными, определяя отношения между таблицами.

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

 3. Многоплатформенная поддержка: MySQL может работать в нескольких операционных системах, включая Windows, Linux, macOS и т. д., и поддерживает несколько языков. Эти языки программирования включают, среди прочего, C, C++, Python, Java, Perl, PHP, Eiffel, Ruby и Tcl. Имеет хорошую кроссплатформенную совместимость.

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

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

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

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

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

2. Термины РСУБД:

Прежде чем мы начнем изучать базу данных MySQL, давайте разберемся с некоторыми терминами СУБД:

  • База данных:  база данных представляет собой набор связанных таблиц.
  • Таблица данных:  таблица представляет собой матрицу данных. Таблица в базе данных выглядит как простая электронная таблица.
  • Столбец:  столбец (элемент данных) содержит данные одного типа, например данные почтового индекса.
  • Строка: Строка (кортеж или запись) — это группа связанных данных, например фрагмент данных, подписанный пользователем.
  • Избыточность : храните в два раза больше данных, избыточность снижает производительность, но повышает безопасность данных.
  • Первичный ключ : Первичный ключ уникален. Таблица данных может содержать только один первичный ключ. Вы можете использовать первичный ключ для запроса данных.
  • Внешний ключ: внешний ключ используется для связи двух таблиц.
  • Составной ключ . Составной ключ (составной ключ) использует несколько столбцов в качестве ключа индекса, который обычно используется для составных индексов.
  • Индексы. Используйте индексы для быстрого доступа к определенной информации в таблицах базы данных. Индекс — это структура, которая упорядочивает значения одного или нескольких столбцов в таблице базы данных. Похоже на каталог книг.
  • Ссылочная целостность:  ссылочная целостность требует, чтобы в отношениях не разрешалось ссылаться на несуществующие объекты. Целостность объекта — это условие ограничения целостности, которому должна удовлетворять реляционная модель, целью которого является обеспечение согласованности данных.

3. Тип данных:

4. Работа с базой данных

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

-- 1,删除数据库
	drop database if exists 数据库名;
-- 2,创建数据库
	create database 数据库名;
-- 3,修改数据库编码方式和字符集排列顺序
	alter database 数据库名 character set utf8 collate utf8_bin;
-- 4,使用数据库
	use 数据库名;
-- 5,查看当前所有数据库
	show databases;

2: Создайте таблицу данных

语法:create table 数据表名(
		列名1   数据类型  [列级约束],
		列名2   数据类型  [列级约束],
		.......
		列名n   数据类型  [列级约束]
		[, 表级约束1[,......,  表级约束n]]
	           )[存储引擎]

проиллюстрировать:

     Часть, заключенная в [], является необязательной, и нет необходимости писать [] в реальном коде
    (1) Имя столбца соответствует спецификации (английские буквы, цифры, символы подчеркивания и т. д.) и имеет смысл
    (2) В таблице нет двух столбцов с одинаковыми именами, столбец Имя не может совпадать с системным ключевым словом (показано синим цветом)
    (3) Для каждого столбца должен быть установлен соответствующий тип данных
    (4) Ограничение состоит в том, чтобы ограничить являются ли данные, хранящиеся в каждом столбце, научными, без дублирования и т. д.
    Вы можете установить уровень столбца за столбцом Ограничения, вы также можете установить ограничения на уровне таблицы единообразно после того, как все столбцы будут записаны,
    или вы можете напрямую создать таблицу без записи ограничения и установить связанные ограничения столбца, изменив таблицу позже

5. Ограничения MySQL:

1. Ограничение первичного ключа (первичный ключ): Таблица данных может иметь только один первичный ключ. Первичный ключ может быть одним столбцом (первичный ключ одного столбца) или несколькими столбцами (объединенный первичный ключ). Столбец, установленный в качестве первичного ключа, имеет уникальное значение и не является пустым (должны быть данные), обычно задают первичный ключ для столбцов без повторяющихся значений, таких как числа.

Формат грамматики:

情况1:设置单列主键:直接在列后写primary key
CREATE TABLE table_name (
    column1 datatype PRIMARY KEY,
    column2 datatype,
    ...
);
情况2:设置多列主键,在所有列的后方写主键
CREATE TABLE table_name (
    column1 data_type,
    column2 data_type,
    ...
    PRIMARY KEY (column1, column2, ...)
);

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

Формат грамматики:

CREATE TABLE table_name (
    column1 datatype,
    column2 datatype,
    ...
    UNIQUE (column1, column2, ...)
);

3. (столбец идентификаторов) столбец автоинкремента (auto_increament): это специальное ограничение, используемое для автоматического создания уникального инкрементного значения при вставке новой записи. Столбец с автоматическим ростом обычно используется в качестве первичного ключа, и каждая таблица может иметь только один столбец с автоматическим ростом, а тип данных столбца с автоматическим ростом обычно представляет собой целочисленный тип (например, INT, BIGINT и т. д.). .

Формат грамматики:

CREATE TABLE table_name (
    column_name data_type AUTO_INCREMENT,
    ...
    PRIMARY KEY (column_name)
);

4. Ограничение Not null (не null): при добавлении данных убедитесь, что значение в столбце не пустое.

Формат грамматики:

CREATE TABLE table_name (
    column1 datatype NOT NULL,
    ...
);

5. Ограничение значения по умолчанию (по умолчанию): Установите значение по умолчанию в столбце, которое будет использоваться, если значение не указано.

Формат грамматики:

CREATE TABLE table_name (
    column1 datatype DEFAULT default_value,
    ...
);

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

Формат грамматики:

CREATE TABLE table_name (
    column1 datatype,
    ...
    CHECK (condition)
);

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

Формат грамматики:

CREATE TABLE table_name1 (
    column1 data_type,
    column2 data_type,
    ...
    FOREIGN KEY (column1, column2, ...)
    REFERENCES table_name2 (ref_column1, ref_column2, ...)
    ON DELETE action
    ON UPDATE action
);

6. Механизм хранения

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

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

InnoDB: это один из наиболее часто используемых механизмов хранения для MySQL.Он обеспечивает поддержку транзакций ACID (атомарность, согласованность, изоляция и устойчивость) и поддерживает расширенные функции, такие как блокировка на уровне строк и контроль параллелизма нескольких версий.

ПАМЯТЬ: также известная как HEAP, хранит данные в памяти с очень высокой скоростью чтения и записи. Однако он подходит только для хранения временных данных, так как данные будут потеряны после перезапуска базы данных.

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

В дополнение к механизмам хранения, перечисленным выше, MySQL также имеет другие механизмы хранения, такие как Archive, CSV, Blackhole и т. д. Каждый механизм хранения имеет свои характеристики и применимые сценарии, и выбор подходящего механизма хранения может определяться в соответствии с конкретными бизнес-требованиями.

7. Работа с таблицей данных:

1. Просмотрите структуру таблицы

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

Формат грамматики:

DESCRIBE 数据表名;
DESCRIBE 数据库名.数据表名;
desc 数据库名.数据表名

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

Используйте оператор SHOW CREATE TABLE для просмотра оператора создания таблицы: Этот оператор вернет набор результатов, содержащий оператор создания таблицы, включая полный оператор CREATE TABLE, который может отображать структуру таблицы и подробную информацию, такую ​​как ограничения и индексы. Примечание. Просмотрите текущую базу данных, не записывая имя базы данных. 

Формат грамматики:

SHOW CREATE TABLE 数据表名;

 3. Изменить таблицу

  1. Измените имя таблицы: используйте оператор ALTER TABLE, чтобы изменить старое имя таблицы на новое имя таблицы с помощью предложения RENAME.
    Формат грамматики:

    ALTER TABLE 表名
    RENAME 新表名;
  2. Измените тип данных поля: используйте оператор ALTER TABLE, чтобы изменить тип данных поля в указанной таблице с помощью предложения MODIFY.
    Формат грамматики:

    ALTER TABLE 表名
    MODIFY 列名 新数据类型;
    
  3. Измените имя поля и тип данных: используйте оператор ALTER TABLE, чтобы изменить имя и тип данных поля в указанной таблице с помощью предложения CHANGE.
    Формат грамматики:

    ALTER TABLE 表名
    CHANGE 旧列名 新列名 新数据类型;
  4. Добавьте поля:

    • Последний столбец: используйте оператор ALTER TABLE, чтобы добавить новое поле в конец существующей таблицы с помощью предложения ADD.
      Формат грамматики:
      alter table 数据库名.数据表名 add 新字段名 数据类型
    • Первый столбец: используйте оператор ALTER TABLE, чтобы добавить новые поля в заголовок существующей таблицы с помощью предложения ADD.
      Формат грамматики:
      alter table 数据库名.数据表名 add 新字段名 数据类型 first
    • После указания столбца: используйте оператор ALTER TABLE, чтобы добавить новое поле после поля в существующей таблице с помощью предложения ADD.
      Формат грамматики:
      alter table 数据库名.数据表名 add 新字段名 数据类型 after 现有字段名
  5. Удалить поля: используйте оператор ALTER TABLE, чтобы удалить поля в указанной таблице с помощью предложения DROP. Обратите внимание, что за один раз можно удалить только одно поле.
    Формат грамматики:

    ALTER TABLE 表名
    DROP 列名;
  6. Измените порядок полей:

    • Поместите поле в первый столбец: используйте оператор ALTER TABLE, чтобы переместить указанное поле в первый столбец таблицы с помощью предложения MODIFY.
      Формат грамматики:
      ALTER TABLE 表名
      MODIFY 列名 列定义 FIRST;
    • Поместите поле после указанного столбца: используйте оператор ALTER TABLE, чтобы переместить указанное поле после указанного столбца с помощью предложения MODIFY.
      Формат грамматики:
      ALTER TABLE 表名
      MODIFY 列名 列定义 AFTER 某一列名;
  7. Изменить механизм хранения таблицы: используйте оператор ALTER TABLE, чтобы изменить механизм хранения указанной таблицы с помощью предложения механизма.
    Формат грамматики:

    ALTER TABLE 表名
    ENGINE = 新存储引擎;
  8. Измените ограничения таблицы:

    • Добавьте ограничения: используйте оператор ALTER TABLE, чтобы добавить ограничения к существующим таблицам с помощью предложения ADD CONSTRAINT.
      Формат грамматики:
      ALTER TABLE 表名
      ADD CONSTRAINT 约束名 约束条件;
      
    • Удаление ограничений: используйте оператор ALTER TABLE, чтобы удалить ограничения, которые уже существуют в таблице, с помощью предложения DROP CONSTRAINT.
      Формат грамматики:
      ALTER TABLE 表名
      DROP CONSTRAINT 约束名;
      

8. Добавьте данные в таблицу

1. Добавляйте данные по одной за раз
Чтобы добавить по одной части данных в таблицу MySQL за раз, вы можете использовать упрощенную форму оператора INSERT INTO VALUES.
Ниже приведен основной синтаксис:

INSERT INTO 表名 VALUES (值1, 值2, 值3, ...);

2. Одновременное добавление нескольких фрагментов данных 
Чтобы одновременно добавить в таблицу MySQL несколько фрагментов данных, вы можете использовать однострочную форму вставки оператора INSERT.
Ниже приведен основной синтаксис:

INSERT INTO 表名 (列1, 列2, 列3, ...)
VALUES (值1, 值2, 值3, ...);

9. Запросить все данные в таблице 

1. Чтобы запросить все данные в таблице MySQL, вы можете использовать оператор SELECT. Ниже приведен основной синтаксис:

SELECT * FROM 表名;

2. "*" означает выбор всех столбцов. Если вы хотите выбрать только определенные столбцы, вы можете указать имена столбцов, разделенные запятыми: 

SELECT 列1, 列2, 列3, ... FROM 表名;

10. Изменить данные таблицы 

Чтобы изменить данные в таблице MySQL, вы можете использовать оператор UPDATE. Ниже приведен основной синтаксис: 

UPDATE 表名 SET 列1=值1, 列2=值2, ... WHERE 条件;

Описание:
        изменение данных таблицы не может нарушать связанные ограничения (первичный ключ, внешний ключ, ненулевой, проверка).
        Вы можете изменить значение одного поля или нескольких полей (несколько полей разделены запятыми).
        Если не добавлено условие, он будет изменен по умолчанию.Если условие where добавлено к данным всех строк в столбце
        , измените часть данных в столбце, которая соответствует условию.Условие
    where
        часто используется при модификации, удалении и запросе ,
        Условное выражение может быть выражением отношения или
        оператором отношения логического выражения. :>,>=,<,<=,=,!=,<>
        Логические операторы: логическое и и, логическое или или, логическое не не

11. Удалить данные таблицы 

 1. Используйте Удалить, чтобы удалить

Чтобы удалить данные в таблице MySQL, вы можете использовать оператор DELETE. (Если условие «где» не добавлено, все данные таблицы будут удалены по умолчанию, а если добавлено условие «где», строки данных, соответствующие условию, будут удалены. Если на данные главной таблицы ссылается подчиненная таблица, его нельзя удалить напрямую (сначала удалите соответствующие данные из ведомой таблицы), а позже вы можете передать Установить триггер для таблицы, чтобы автоматически удалить данные в связанной таблице.Если на данные в основной таблице нет ссылок из таблицу, вы можете удалить ее напрямую.Для столбцов с автоинкрементом удаление не очистит номер (данные, добавленные позже, все равно будут назначены в соответствии с предыдущим номером) ) является основным синтаксисом: 

DELETE FROM 表名 WHERE 条件;

2. Используйте усечение, чтобы очистить данные таблицы

Оператор TRUNCATE TABLE может использоваться для очистки данных в таблице MySQL. Он быстро удаляет все строки в таблице и не откатывает журнал транзакций, поэтому он более эффективен, чем оператор DELETE. (Для главной таблицы, на которую ссылается внешний ключ, вы не можете использовать усечение для очистки данных, даже если в подчиненной таблице нет данных, вы можете только изменить и удалить внешний ключ из таблицы перед усечением) Ниже приведены основные синтаксис оператора TRUNCATE TABLE:

TRUNCATE TABLE 表名;

12. Скопируйте данные таблицы

 Как скопировать данные таблицы A в таблицу B при копировании внутри базы данных? Есть две основные ситуации

1. Таблица B не существует

(1) Скопируйте данные и структуру таблицы A в (вновь созданную) таблицу B. 

Создайте новую таблицу B с помощью инструкции CREATE TABLE и скопируйте данные и структуру из таблицы A в таблицу B. Обратите внимание, что этот метод не копирует первичные ключи, внешние ключи и атрибуты автоинкремента. 
Основной синтаксис:

CREATE TABLE 新表B SELECT * FROM 表A

(2) Скопируйте структуру таблицы A в (вновь созданную) таблицу B.

Этот оператор SQL создаст новую таблицу B в базе данных, копируя структуру таблицы A, но без каких-либо данных. Если таблица A существует и содержит необходимую структурную информацию, после выполнения этого оператора новая таблица B будет иметь те же определения столбцов, типы данных и ограничения, что и таблица A.

 Основной синтаксис:

CREATE TABLE 表B SELECT * FROM 表A WHERE 1=0;

2. Таблица B уже существует

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

  Основной синтаксис:

INSERT INTO 表B SELECT * FROM 表A;

13. Экспорт данных таблицы

Вы можете использовать следующую инструкцию SQL для экспорта таблицы данных в виде внешнего файла:

SELECT * FROM 数据表名 INTO OUTFILE '文件路径';

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

SHOW VARIABLES LIKE '%secure%';

Если значение secure_file_priv пусто, вы можете экспортировать файлы по любому пути. Но если значение содержит определенный путь, файл можно экспортировать только в папки по этому пути.

Примечание. Файл Excel может быть открыт как искаженные символы (формат MYSQL utf8, формат Excel по умолчанию — GBK).Например
, чтобы t_stuinfoэкспортировать данные таблицы информации о студентах в виде внешнего файла, вы можете использовать следующую инструкцию:

SELECT * FROM t_stuinfo INTO OUTFILE 'D:/1.txt';
SELECT * FROM t_stuinfo INTO OUTFILE 'D:/2.html';
SELECT * FROM t_stuinfo INTO OUTFILE 'D:/3.xls';

14. Импорт данных таблицы

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

1. Используйте оператор LOAD DATA INFILE:

1. В клиенте MySQL импортируйте данные, используя следующий синтаксис:

LOAD DATA INFILE '路径/文件名' INTO TABLE 表名 [选项];

2. Замените «путь/имя файла» на фактический путь и имя файла, содержащего импортируемые данные.
3. Замените «ИМЯ_ТАБЛИЦЫ» на фактическое имя целевой таблицы.
Вы также можете указать другие параметры, такие как разделители полей, разделители строк и т. д. При необходимости можно внести коррективы.

2. Используйте оператор INSERT INTO для вставки данных в пакетах:

1. Подготовьте текстовый файл, в котором каждая строка представляет часть данных для вставки. Каждое значение должно быть разделено запятой или табуляцией.
2. Сохраните файл на сервере MySQL (например, /tmp/data.txt).
3. В клиенте MySQL импортируйте данные, используя следующий синтаксис:

INSERT INTO 表名 (列1, 列2, ...) VALUES
(数据行1的列1值, 数据行1的列2值, ...),
(数据行2的列1值, 数据行2的列2值, ...),
...
;

4. Замените «ИМЯ_ТАБЛИЦЫ» на фактическое имя целевой таблицы.
5. Перечислите значения в столбцах и строках данных в круглых скобках, соответствующих вашей структуре таблицы и данным.

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

15. Запрос данных одной таблицы

1. Общая структура оператора запроса выглядит следующим образом: 

SELECT [all | distinct] * 或字段列表
FROM 表名1 [, 表名2, ... 表名n]
[WHERE 条件表达式]
[GROUP BY 分组字段列表 [HAVING 条件表达式]]
[ORDER BY 排序字段列表 [ASC | DESC]]
[LIMIT [起始行,] 行数]

Среди них значение каждой части:

  • SELECT: выберите имя столбца для запроса и возврата, вы можете использовать «*», чтобы выбрать все столбцы, или указать определенный список полей.
  • FROM: Укажите имя запрашиваемой таблицы данных.Можно указать несколько таблиц одновременно и разделить их запятыми.
  • WHERE: необязательный параметр, используемый для добавления условного выражения для фильтрации данных и возврата только тех данных, которые соответствуют условию.
  • GROUP BY: Необязательный параметр, используемый для группировки результатов, необходимо указать список полей для группировки.
  • HAVING: необязательный параметр, после использования GROUP BY вы можете добавить условные выражения в предложение HAVING для дальнейшей фильтрации результатов группировки.
  • ORDER BY: необязательный параметр, используемый для сортировки результатов. По умолчанию используется восходящий порядок, а ключевое слово «DESC» также может использоваться для указания убывающего порядка.
  • LIMIT: необязательный параметр, используемый для ограничения количества возвращаемых строк. Вы можете указать начальную строку и количество возвращаемых строк или просто количество возвращаемых строк.

 2. Список полей запроса

(1) Запросить все поля

SELECT * FROM 表名;

(2) Запросить указанное поле 

SELECT 列1, 列2, ...
FROM 表名;

(3) Установите псевдоним столбца

Существует два способа установки псевдонимов столбцов: псевдоним столбца или псевдоним столбца AS. 

Например, чтобы просмотреть имя, пол и день рождения таблицы информации об учащихся и установить псевдоним:

SELECT sname 姓名, ssex 性别, sbirthday 生日
FROM student;

или:

SELECT sname AS 姓名, ssex AS 性别, sbirthday AS 生日
FROM student;

(4) Используйте ключевое слово DISTINCT, чтобы удалить повторяющиеся строки результатов.

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

SELECT DISTINCT ssex 性别, sclass 班级
FROM student;

В качестве альтернативы, посмотрите на пол в таблице информации о студентах и ​​удалите повторяющиеся результаты:

SELECT DISTINCT ssex 性别
FROM student;

3. Условный запрос 

(1) Реляционные операторы:

Операторы отношения: >, >=, <, <=, =, !=, <> 

Формат кода:

SELECT * FROM 表名 WHERE 字段名 运算符 值;

(2) Логические операторы:

Логическое и и, логическое или или, логическое не не  

Формат кода:

SELECT * FROM 表名 WHERE 条件1 运算符 条件2 AND/OR/NOT 条件3;

(3) Установить операторы:

in и not in
определяют, находится ли значение поля в определенном диапазоне, диапазон включает значение A и значение B, и меньшее значение A записывается впереди (в противном случае данные не могут быть запрошены).
Формат кода:

SELECT * FROM 表名 WHERE 字段名 IN(值1, 值2, 值3) 或 NOT IN(值1, 值2, 值3);

(4) Оператор диапазона:

между ... и...
формат кода:

SELECT * FROM 表名 WHERE 字段名 BETWEEN 值A AND 值B;

(5) Нулевой оператор:

Значение полей null и is not null
        пусто: Поле равно null
        Значение поля не пусто: Поле не равно null
Формат кода:

SELECT * FROM 表名 WHERE 字段名 IS NULL 或 IS NOT NULL;

(6) Нечеткий запрос:


Подстановочные знаки, обычно используемые для слов «нравится» и «не нравится» :
            % Совпадают символы любой длины (0-n)
            _ Совпадают символы одной длины
Формат кода:

SELECT * FROM 表名 WHERE 字段名 LIKE '关键信息和通配符';

4. Групповой статистический скрининг

(1) Группировка 

SELECT 查询字段列表 FROM 表名 GROUP BY 分组字段列表;

Уведомление:

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

Пример: -- Подсчитайте количество и имена мальчиков и девочек.

SELECT ssex 性别, COUNT(*) 人数,GROUP_CONCAT(sname) 姓名
FROM student GROUP BY ssex WITH ROLLUP;	

(2) Статистика

В соответствии со значением поля группировки выполнить статистическую сводку по результатам нескольких строк столбца. Обычно используемые агрегатные функции:

  • COUNT (имя поля или *): Подсчитайте количество строк. Если указано имя поля, оно будет подсчитывать количество строк с ненулевыми значениями в поле; если используется «*», оно будет подсчитывать количество всех строк.
  • SUM (имя поля): суммирование, поле должно быть числового типа, пустые значения не учитываются.
  • AVG (имя поля): среднее значение, это поле должно быть числового типа, пустые значения не учитываются.
  • MAX (имя поля): максимальное значение и не учитывает нулевые значения.
  • MIN (имя поля): минимальное значение, пустые значения не учитываются.

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

SELECT sid,COUNT(*),SUM(score),AVG(score),MAX(score),MIN(score)
FROM sc GROUP BY sid;

(3) скрининг

Используйте условное выражение HAVING для фильтрации результатов после группировки статистики, которое необходимо использовать вместе с GROUP BY. Выражение поля после HAVING может содержать только столбцы агрегатных функций или поля группировки. Разница между HAVING и WHERE заключается в следующем:

  • Тот же момент: оба используются для фильтрации данных, если фильтровать только по полю группировки, результат тот же.
  • разница:
    • Расположение отличается: ГДЕ фильтровать данные перед группировкой, а ИМЕТЬ — фильтровать данные после группировки.
    • Выражения полей отличаются: столбцы агрегатных функций не разрешены в условиях WHERE, но только столбцы агрегатных функций или поля группировки могут использоваться в условиях HAVING.
    • Ограничения на использование: WHERE можно использовать отдельно, но HAVING необходимо использовать в сочетании с GROUP BY.

 Пример: -- Таблица статистических результатов Количество предметов, которые прошел каждый учащийся, общий балл, средний балл, наивысший балл, самый низкий балл, а также отображение статистической информации только для учащегося с номерами 10101001 и 10101002.

//HAVING条件表达式
SELECT sid,COUNT(*),SUM(score),AVG(score),MAX(score),MIN(score)
FROM sc GROUP BY sid HAVING sid IN('10101001','10101002');
//WHERE条件表达式
SELECT sid,COUNT(*),SUM(score),AVG(score),MAX(score),MIN(score)
FROM sc  WHERE sid IN('10101001','10101002') GROUP BY sid;

5. Сортировка

В MySQL вы можете использовать оператор «ORDER BY», чтобы изменить порядок строк данных. Этот оператор сортирует строки данных в соответствии со значением указанного поля.По умолчанию MySQL сортирует в соответствии со значением столбца первичного ключа.

Вот синтаксис для «ORDER BY»:

SELECT 查询字段列表 FROM 表名 ORDER BY 排序字段列表 [ASC|DESC];

Чтобы объяснить каждую часть:

  • SELECT список полей запроса: укажите список полей, который вы хотите запросить.
  • FROM имя таблицы: укажите имя таблицы, которую вы хотите запросить.
  • Список полей сортировки ORDER BY: укажите, по каким полям вы хотите выполнить сортировку. Может быть одно или несколько имен полей, разделенных запятыми. Если полей несколько, MySQL сначала сортирует по значению первого поля, если они совпадают, сортирует по значению второго поля и так далее.
  • ASC|DESC: необязательный параметр, используемый для указания порядка сортировки. По умолчанию используется восходящий порядок (ASC), также можно выбрать убывающий порядок (DESC).

Вот некоторые примеры:

  • Чтобы отсортировать в порядке возрастания по полю:
    SELECT * FROM 表名 ORDER BY 字段名 ASC;
    
  • Чтобы отсортировать по нескольким полям, сначала выполните сортировку по возрастанию по полю 1, а затем по убыванию по полю 2:
    SELECT * FROM 表名 ORDER BY 字段1 ASC, 字段2 DESC;
    

6. Ограничьте количество строк результатов запроса

Вы можете использовать оператор «LIMIT», чтобы ограничить количество строк в результате запроса. Синтаксис «LIMIT» следующий:

SELECT 查询字段列表 FROM 表名 [WHERE 条件] ORDER BY 排序字段列表 LIMIT [起始行,] n;

Чтобы объяснить каждую часть:

  • SELECT список полей запроса: укажите список полей, который вы хотите запросить.
  • FROM имя таблицы: укажите имя таблицы, которую вы хотите запросить.
  • Условие WHERE (необязательно): используется для указания условия запроса, если вам нужно отфильтровать определенные строки данных.
  • ORDER BY список полей сортировки: используется для указания списка полей сортировки.
  • LIMIT [начальная строка,] n: используется для ограничения количества строк результатов запроса. По умолчанию первые n строк, начиная с первой строки; если задана начальная строка, после этой строки будут запрашиваться n строк.

 Пример: подсчитайте количество предметов, выбранных каждым учащимся, общий балл, средний балл, наивысший балл и самый низкий балл, отсортируйте по среднему баллу и выберите 3 лучших с наивысшим средним баллом:

SELECT sid, COUNT(*), SUM(score), AVG(score), MAX(score), MIN(score)
FROM 表名 GROUP BY sid ORDER BY AVG(score) DESC LIMIT 3;

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

SELECT cid, COUNT(*), SUM(score), AVG(score), MAX(score), MIN(score)
FROM 表名 GROUP BY cid;

16. Запрос соединения нескольких таблиц 

Запрос объединения нескольких таблиц — это операция запроса, которая устанавливает отношение ассоциации между несколькими таблицами и извлекает связанные данные. Общие типы объединения нескольких таблиц включают внутреннее соединение (INNER JOIN), левое соединение (LEFT JOIN), правое соединение (RIGHT JOIN), перекрестное соединение (Cross Join) и полное соединение (FULL JOIN). Вот краткое описание каждого типа подключения:

1. Внутреннее соединение (INNER JOIN):

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

SELECT 列列表
FROM 表1
INNER JOIN 表2 ON 连接条件;

2. Левое соединение (LEFT JOIN):

Возвращает все строки из левой таблицы и соответствующие строки из правой таблицы. 

SELECT 列列表
FROM 表1
LEFT JOIN 表2 ON 连接条件;

3. Правое соединение (RIGHT JOIN):

Возвращает все строки из правой таблицы и соответствующие строки из левой таблицы. 

SELECT 列列表
FROM 表1
RIGHT JOIN 表2 ON 连接条件;

4. Полное соединение (FULL JOIN):

Возвращает все строки из левой и правой таблиц или заполняет значениями NULL, если нет совпадающих строк.  

SELECT 列列表
FROM 表1
FULL JOIN 表2 ON 连接条件;

5. Перекрестное соединение:

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

Декартово произведение: количество строк результата умножения двух матриц (A и B)
        = количество строк A * количество строк B и количество
        столбцов = количество столбцов A + количество столбцов из Б 

SELECT *
FROM 表1
CROSS JOIN 表2;

17. Расширенный запрос (подзапрос)

1. Концепция и использование

Подзапрос — это метод запроса, в котором инструкция запроса SELECT вложена в другой запрос. Его можно использовать как часть условия WHERE родительского запроса, также можно использовать как временную таблицу для соединения с другими таблицами, а также можно использовать как столбец в основном запросе.

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

Общие сценарии применения подзапросов включают:

  1. Результаты подзапроса включаются как часть условия WHERE родительского запроса.
  2. Подзапрос используется как временная таблица (псевдоним таблицы) для объединения нескольких таблиц с другими таблицами.
  3. Подзапрос как столбец запроса SELECT.

Если результат подзапроса имеет только одно значение, для сопоставления можно использовать знак равенства (=); если значений несколько, для сопоставления рекомендуется использовать ключевое слово IN. Следует отметить, что при использовании подзапроса убедитесь в правильности синтаксиса подзапроса и соблюдении соответствующих условий между таблицами базы данных для получения точных результатов запроса.
Грамматические конструкции:

SELECT 字段1, 字段2, ...
FROM 表1
WHERE 字段1 IN (SELECT 字段1 FROM 表2 WHERE 条件);

2. Подзапросы пакетного сравнения

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

SELECT * FROM sc WHERE cid='c001' AND score > SOME
		(SELECT score FROM sc WHERE cid='c002');

SELECT * FROM sc WHERE cid='c001' AND score > ANY
		(SELECT score FROM sc WHERE cid='c002');

3. Подзапрос с использованием existsits

Синтаксис: оператор родительского запроса WHERE EXISTS подзапрос. Если подзапрос имеет результаты (количество строк не равно 0), вернуть true и запустить родительский запрос; если подзапрос не имеет результатов (количество строк равно 0), вернуть false и не выполнять родительский запрос. Подзапрос exists возвращает только логический тип и не возвращает конкретные результаты запроса. Подходит для использования, когда вам не нужно возвращать конкретный результат. 

4. Для слияния двух наборов результатов запроса

1. Используйте UNION для слияния и дедупликации: слейте результаты запросов 1 и 2 в один набор и удалите повторяющиеся данные строк.

SELECT 查询1 UNION SELECT 查询2

2. Используйте UNION ALL, чтобы объединить и сохранить повторяющиеся строки: объединить результаты запроса 1 и запроса 2 в один набор и сохранить данные повторяющихся строк.

SELECT 查询1 UNION ALL SELECT 查询2

18. Регулярные выражения

MySQL поддерживает два оператора регулярных выражений, а именно REGEXP и RLIKE. Их можно использовать для сопоставления с образцом в запросах.

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

В MySQL вы можете использовать оператор REGEXP для сопоставления регулярных выражений. Вот некоторые распространенные шаблоны регулярных выражений:

^ Соответствует началу входной строки. ^ также соответствует позиции после '\n' или '\r', если установлено свойство Multiline объекта RegExp.
$ Соответствует концу входной строки. Если установлено свойство Multiline объекта RegExp, $ также соответствует положению перед '\n' или '\r'.
. Соответствует любому одиночному символу, кроме "\n". Чтобы соответствовать любому символу, включая '\n', используйте шаблон, например '[.\n]'.
[...] коллекция персонажей. Соответствует любому из содержащихся символов. Например, «[abc]» будет соответствовать «a» в слове «обычный».
[^...] Отрицательный набор символов. Соответствует любому не содержащемуся символу. Например, «[^abc]» будет соответствовать «p» в слове «обычный».
п1|п2|п3 Соответствует p1, p2 или p3. Например, «z|food» будет соответствовать «z» или «food». '(z|f)ood' соответствует "zood" или "food".
* Соответствует предыдущему подвыражению ноль или более раз. Например, zo* будет соответствовать как «z», так и «zoo». * эквивалентно {0,}.
+ Соответствует предыдущему подвыражению один или несколько раз. Например, «zo+» будет соответствовать «zo» и «zoo», но не «z». + эквивалентно {1,}.
{п} n — целое неотрицательное число. Совпадает ровно n раз. Например, "о{2}" не будет соответствовать "о" в слове "Боб", но будет соответствовать обеим буквам "о" в слове "еда".
{н, м} И m, и n — неотрицательные целые числа, где n <= m. Соответствует не менее n раз и не более m раз.

Ниже приведены несколько примеров сопоставления регулярных выражений с использованием оператора REGEXP в MySQL:
1. Найдите все имена, начинающиеся с буквы «A»:

SELECT name FROM person_tbl WHERE name REGEXP '^A';

2. Найдите все адреса электронной почты, заканчивающиеся цифрами:

SELECT email FROM person_tbl WHERE email REGEXP '[0-9]$';

3. Найдите все строки, содержащие три последовательных повторяющихся символа:

SELECT text FROM data_tbl WHERE text REGEXP '(.)\\1\\1';

4. Найдите все имена пользователей, которые начинаются с заглавной буквы, за которой следуют 5 цифр:

SELECT username FROM user_tbl WHERE username REGEXP '^[A-Z][0-9]{5}$';

19. SQL-инъекция 

MySQL — это популярная система управления реляционными базами данных для хранения и управления структурированными данными. SQL (Structured Query Language) — это стандартный язык запросов для взаимодействия с базами данных.

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

Вот несколько рекомендаций по предотвращению атак путем внедрения кода SQL:

1. Используйте параметризованные запросы (подготовленные операторы). Использование параметризованных запросов позволяет механизму базы данных обрабатывать вводимые пользователем данные как данные, а не как код, тем самым избегая атак путем внедрения.
Пример (с использованием подготовленных операторов):

$stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username AND password = :password');
$stmt->bindParam(':username', $username);
$stmt->bindParam(':password', $password);
$stmt->execute();

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

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

4. Избегайте динамического объединения SQL-запросов: не объединяйте пользовательский ввод с SQL-запросами напрямую, а используйте параметризованные запросы или безопасные методы, предоставляемые инфраструктурой базы данных.
Пример (избегает динамической конкатенации):

$stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username');
$stmt->bindParam(':username', $username);
$stmt->execute();

5. Регулярные обновления базы данных и серверного программного обеспечения. Поддерживайте базу данных и серверное программное обеспечение в актуальном состоянии для получения последних исправлений и улучшений безопасности.
Эти меры могут значительно снизить риск атак путем внедрения кода SQL и повысить безопасность приложения.

Guess you like

Origin blog.csdn.net/m0_74293254/article/details/131534386