Rusau LearnВойти

Базы данных

SQL для тестировщика: зачем он нужен и как создать таблицу в MySQL

SQL – язык запросов к реляционным базам данных. С его помощью тестировщик проверяет, что приложение действительно записало данные в базу, готовит тестовые данные и находит записи для воспроизведения бага, а на собеседовании junior-тестировщика почти всегда просят написать SELECT. Начинают с основных команд: CREATE создаёт базу и таблицу, INSERT добавляет строки, UPDATE меняет их, DELETE удаляет, а SELECT показывает содержимое.

Мой видеоурок: Урок 20. SQL для тестировщика. Как создать таблицы в MySQL для QAОткрыть на YouTube
SELECT и JOIN
по моему опыту, их просят написать почти на каждом собеседовании
MySQL Community
бесплатная версия сервера, на которой я показываю команды
Песочница
учебная база в браузере: запросы пишутся без установки и регистрации

Зачем тестировщику SQL

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

SQL экономит время и при подготовке к проверке. Чтобы протестировать заказ в статусе "Отменён", не обязательно проходить весь путь через интерфейс: на тестовом стенде нужную строку добавляют или правят запросом. Так же по таблицам находят данные, на которых воспроизводится баг.

Ещё SQL спрашивают на собеседовании. По моему опыту, SELECT и JOIN просят написать почти на каждом интервью: дают таблицы с данными и задание вроде "покажите значения такого-то поля, где они больше пяти". Команды создания таблиц звучат реже, но без них не собрать себе базу для тренировки.

Типы данных в MySQL

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

Кроме типа у колонки есть признак NULL или NOT NULL. Он говорит, может ли значение остаться пустым: колонку NOT NULL при добавлении строки заполнять обязательно.

  • INT

    Целые числа: идентификаторы, количество, номер курса.

  • DECIMAL, FLOAT и DOUBLE

    DECIMAL хранит десятичную дробь точно, с заданным числом знаков после запятой, поэтому суммы денег держат в нём. FLOAT и DOUBLE – числа с плавающей точкой, они хранят значение приближённо.

  • Пример: сумма заказа в FLOAT

    Тестировщик выполняет DESC orders и видит, что сумма заказа хранится в колонке FLOAT. В MySQL две строки с суммами 0.1 и 0.2 в такой колонке дают SUM(amount) = 0.30000000447034836, и сравнение с 0.3 возвращает 0, то есть ложь. В колонке DECIMAL(10,2) та же сумма равна 0.30, поэтому FLOAT у денежной колонки – повод для баг-репорта ещё до того, как расхождения появятся в отчётах.

  • CHAR и VARCHAR

    Строки ограниченной длины. Предел пишут в скобках: в колонку VARCHAR(55) поместится не больше 55 символов.

  • TEXT

    Длинный текст, до 65 535 байт. Для текста ещё длиннее есть MEDIUMTEXT и LONGTEXT.

  • DATE, TIME, DATETIME и YEAR

    Дата, время, дата вместе со временем и год.

  • TIMESTAMP

    Момент времени. MySQL хранит его как число секунд от полуночи 1 января 1970 года по UTC, а показывает в часовом поясе текущего соединения. Им удобно отмечать, когда запись создали или изменили.

  • BOOLEAN

    Истина или ложь. В MySQL это синоним TINYINT(1): true хранится как 1, false как 0.

Основные команды: базы, таблицы и строки

Команды SQL делят на группы. Команды определения данных (DDL) создают, меняют и удаляют саму структуру, то есть базы, таблицы и колонки. Команды работы с данными (DML) добавляют, меняют и удаляют строки внутри таблиц. В уроке я разбираю обе группы, а SELECT с условиями и JOIN оставляю на два следующих урока.

Каждый запрос заканчивается точкой с запятой. Без неё консольный клиент MySQL не выполнит команду и будет ждать продолжения, поэтому длинный запрос можно спокойно разбить на несколько строк. Стрелка вверх возвращает предыдущие команды, и длинный запрос не приходится набирать заново.

  • SHOW DATABASES

    Показывает базы на сервере. Часть из них система создаёт сама при установке.

  • CREATE DATABASE и DROP DATABASE

    Создают и удаляют базу: CREATE DATABASE students; и DROP DATABASE test;.

  • USE

    Выбирает базу для работы. Без него CREATE TABLE courses выдаст ошибку No database selected: сервер не знает, к какой базе относится таблица.

  • SHOW TABLES и DESC

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

  • Пример: длина имени

    Форма регистрации пропускает имя длиной 100 символов, а DESC users показывает у колонки name тип VARCHAR(50). Тестировщик вводит 51 символ: MySQL в строгом режиме, который включён по умолчанию, отвечает ошибкой Data too long for column 'name' at row 1, и вместо понятного сообщения пользователь видит сбой. В баг-репорте указывают оба лимита, чтобы команда решила, какой из них верный.

  • CREATE TABLE, ALTER TABLE и DROP TABLE

    Создают таблицу, меняют набор её колонок и удаляют таблицу целиком.

  • INSERT, UPDATE и DELETE

    Добавляют строки, меняют значения в них и удаляют строки.

  • SELECT

    Показывает данные. SELECT * FROM courses; выводит все строки и колонки таблицы courses.

Пример: таблица курсов с нуля

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

  • 1. Создать базу и перейти в неё

    CREATE DATABASE students; и затем USE students;. Команда SHOW TABLES; после этого вернёт пустой список, потому что таблиц ещё нет.

  • 2. Создать таблицу

    CREATE TABLE courses (id INT NOT NULL PRIMARY KEY, faculty VARCHAR(55) NULL, number INT NULL);. Колонка id – первичный ключ, она обязательна и уникальна, а факультет и номер можно оставить пустыми.

  • 3. Проверить структуру

    DESC courses; покажет три колонки, их типы и пометку PRI у первичного ключа. SELECT * FROM courses; пока ничего не выведет: строк в таблице нет.

  • 4. Добавить строки

    INSERT INTO courses VALUES (1, 'bio', 1);. Значения идут в том же порядке, что колонки в таблице, а строки берут в кавычки. Так же добавляют остальные факультеты.

  • 5. Изменить значение

    UPDATE courses SET faculty = 'chem' WHERE id = 2; меняет факультет только в строке с id = 2.

  • 6. Удалить строку

    DELETE FROM courses WHERE faculty = 'chem'; удаляет строки с этим факультетом. Без WHERE команда очистит всю таблицу.

  • 7. Убрать и вернуть колонку

    ALTER TABLE courses DROP COLUMN id; убирает колонку, а ALTER TABLE courses ADD COLUMN id INT AFTER number; добавляет её после колонки number. Чтобы колонка встала первой, вместо AFTER number пишут FIRST.

Как тренироваться и что спросят на собеседовании

Домашнее задание из урока – поставить MySQL Community Server, создать несколько таблиц, добавить в них строки, поменять и удалить значения, а потом удалить сами таблицы и базу. Сервер бесплатный. При установке я выбираю вариант Server only, задаю пароль пользователя root и пишу запросы в консольном клиенте MySQL Command Line Client.

Без установки те же запросы выполняются в SQL-песочнице платформы. В ней лежит база интернет-магазина из курса SQL, данные можно менять и создавать свои таблицы, а кнопка возвращает базу к исходной. Песочница работает на SQLite, поэтому команд CREATE DATABASE, SHOW, USE и DESC в ней нет, новая колонка добавляется только в конец таблицы, а колонку первичного ключа, как id в примере выше, удалить нельзя: SQLite ответит ошибкой cannot drop PRIMARY KEY column. CREATE TABLE, INSERT, UPDATE, DELETE и SELECT пишутся так же, как в MySQL.

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

На собеседовании чаще дают SELECT: таблицу с данными и задание вывести значения одного поля по условию. Ответ на такое задание выглядит, например, так: SELECT faculty FROM courses WHERE number > 5;. Условия, сортировку и объединение таблиц через JOIN я разбираю в следующих уроках курса.

Видеоурок, песочница и задания

Я показываю установку MySQL и все команды этой страницы в двадцатом уроке курса "Тестировщик с нуля" на YouTube. В бесплатном базовом курсе по тестированию есть урок на эту тему, и после теории в нём идут задания.

Шпаргалка по SQL собирает SELECT, WHERE, JOIN и GROUP BY с примерами, а шпаргалка о базах данных объясняет таблицы, ключи и связи. В тренажёре запросы пишут на живых данных. Дальше, на задачах из рабочего дня тестировщика, SQL учит мой отдельный курс.

Курсы по теме

Вопросы и ответы

Зачем тестировщику знать SQL?

Чтобы проверять, что приложение действительно записало данные в базу, готовить тестовые данные без долгого пути через интерфейс и находить записи для воспроизведения бага. Кроме того, на собеседовании junior-тестировщика часто просят написать SELECT.

Какие SQL-запросы спрашивают на собеседовании тестировщика?

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

Как создать таблицу в MySQL?

Выбрать базу командой USE, затем выполнить CREATE TABLE с названием таблицы и списком колонок в скобках: имя колонки, тип данных и признаки вроде NOT NULL и PRIMARY KEY. Например: CREATE TABLE courses (id INT NOT NULL PRIMARY KEY, faculty VARCHAR(55));. Структуру готовой таблицы показывает DESC courses;.

Чем DELETE отличается от DROP?

DELETE удаляет строки, и таблица остаётся на месте. DROP TABLE удаляет таблицу целиком вместе со структурой, DROP DATABASE удаляет всю базу. DELETE без условия WHERE очищает таблицу полностью, поэтому условие перед запуском стоит перечитать.

Где бесплатно потренироваться писать SQL-запросы?

Можно поставить бесплатный MySQL Community Server и создавать таблицы в консоли, как в моём уроке. Без установки запросы пишутся в SQL-песочнице Rusau Learn: в ней учебная база интернет-магазина, и регистрация не нужна.

Посмотреть программы курсов

Программа каждого курса открыта целиком: видны все модули, уроки и число шагов.

Все курсы

Здесь используются cookies: без них сайт не работает, и по ним видно, откуда о платформе узнают.Cookies нужны для входа и учёта переходов. Подробнее