Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Introduction to databases and SQL
Search
Olga Mazur
April 28, 2016
Education
0
150
Introduction to databases and SQL
Olga Mazur
April 28, 2016
Tweet
Share
Other Decks in Education
See All in Education
【旧:ZEPメタバース校舎操作ガイド】
ainischool
0
790
KBS新事業創造体験2025_科目説明会
yasuchikawakayama
0
160
外国籍エンジニアの挑戦・新卒半年後、気づきと成長の物語
hypebeans
0
730
✅ レポート採点基準 / How Your Reports Are Assessed
yasslab
PRO
0
280
Chapitre_2_-_Partie_3.pdf
bernhardsvt
0
150
TypeScript初心者向け完全ガイド
mickey_kubo
1
120
あなたの言葉に力を与える、演繹的なアプローチ
logica0419
1
270
沖ハック~のみぞうさんとハッキングチャレンジ☆~
nomizone
1
570
The Next Big Step Toward Nuclear Disarmament
hide2kano
0
220
Leveraging LLMs for student feedback in introductory data science courses (Stats Up AI)
minecr
0
170
多様なメンター、多様な基準
yasulab
PRO
5
19k
0121
cbtlibrary
0
120
Featured
See All Featured
A better future with KSS
kneath
240
18k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.3k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.2k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.3k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.9k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.2k
Done Done
chrislema
186
16k
Accessibility Awareness
sabderemane
0
51
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.7k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
220
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
120
Transcript
None
Базы данных и SQL Ольга Мазур
План Применение в тестировании Виды баз данных Основы работы Подключение
Как сориентироваться Чтение, запись, поиск Автотесты 3
Применение: зачем всё это?
Функциональное тестирование Проверка скрытой информации Поиск данных для тестирования Создание
предусловий Подготовка тестовой среды с нуля 5
Тестирование безопасности: SQL инъекции 6
Виды баз данных
Реляционные NoSQL 8
Реляционные 9
Реляционные БД: таблицы 10
NoSQL 11
NoSQL: Key-Value …. …. 12 key1 keyN
NoSQL: документо-ориентированные 13
Основы работы с БД
None
None
None
Подключение
Клиенты mysql MySQL Workbench HeidiSQL … 19
Подключение mysql -h [хост] -P [порт] -u [пользователь] -p[пароль] 20
Ориентирование на местности
SHOW DATABASES USE SHOW TABLES SHOW COLUMNS IN 22
23
24
25
26
27
28
29
None
Чтение и поиск
Чтение по ключу SELECT [что] FROM [откуда] WHERE [условие] 32
33 Code
Поиск по образцу SELECT [что] FROM [откуда] WHERE [поле] LIKE
[регулярка] LIMIT N 34 Code
None
Поиск с агрегацией SELECT [что] FROM [откуда] GROUP BY […]
HAVING […] LIMIT N агрегаторы: count, max, min, sum, …. 36 Code
Запись
UPDATE INSERT 38
Изменение UPDATE [что] SET [поле=значение,…] WHERE [условие] 39 Code
None
Вставка INSERT INTO [куда] ([названия столбцов]) VALUES [значения] 41
SQL инъекции
SQL инъекции /get_owner?id=[id] SELECT name FROM owners WHERE id= $id
/get_owner?id=«-1 UNION SELECT password FROM admin» SELECT name FROM owners WHERE id=-1 UNION SELECT password FROM admin 43
Автотесты
Как работать с БД из Java? JDBC и java.sql.* 45
Как работать с БД из Java? JDBC и java.sql.* 46
Подключиться 47 Connection connection = DriverManager.getConnection( "jdbc:mysql://db.host.ru:3310/db_name", "user", "password"); DSLContext
create = DSL.using(connection, SQLDialect.MYSQL);
Выполнить запрос 48 Record1 result = create.select(field("name")) .from(table("table_name")) .where(field("id").equal(id)) .fetchOne();
String name = result.getValue(0, String.class);
Закрыть соединение 49 connection.close();
Как может выглядеть клиент 50 public MetrikaDatabaseClient() { //подключение }
public String getCounterName(Integer counterId){ //вызов select и разбор результата } public void close(){ //закрытие соединения }
Как может выглядеть использование в тесте 51 @Before public void
before() { dbClient = new MetrikaDatabaseClient(); } @Test public void someCounterTest() { ... String name = dbClient.getCounterName(counterId); ... } @After public void after() { dbClient.close(); }
Вопросы?
Полезные ссылки Документация по синтаксису MySQL http://bit.ly/1u09bkI Инъекции для начинающих
(хабр) http://bit.ly/1XQst7J JOOQ http://bit.ly/1OdM4eC Hibernate http://bit.ly/1WkK0Gn 53