Използване на MySQL с основни SQL команди

Кратко: Научете се да използвате основни SQL команди в системата за управление на база данни с отворен код MySQL.

MySQL е най-често използваният мениджър на релационни бази данни . Лесната му употреба и лицензът с отворен код допринесоха за тази популярност.

Миналата седмица покривах инсталирането и конфигурирането на MySQL в Ubuntu. В тази статия ще ви представя няколко функции на MySQL, които най-вече се придържат към основите .

Забележка: MySQL запитванията (командите) не са чувствителни към регистъра ; все пак, обичайната практика е да се използват ВСИЧКИ КАРТИ за действителните ключови думи и малки букви за останалите .

Основни SQL команди

Свързване към и прекъсване на връзката с MySQL сървъра

За да можете да въвеждате заявки, първо трябва да се свържете със сървъра с MySQL и да използвате MySQL подканата. Командата за това е:

mysql -h host_name -u user -p 

-h се използва за задаване на име на хост (ако сървърът е разположен на друга машина; ако не е, просто го пропуснете), -u споменава потребителя и -p указва, че искате да въведете парола .

Въпреки че не се препоръчва (поради съображения за безопасност), можете да въведете паролата директно в командата, като я въведете веднага след -p . Например, ако паролата за test_user е 1234 и се опитвате да се свържете с машината, която използвате, можете да използвате:

 mysql -u test_user -p1234 

Ако успешно въведете необходимите параметри, ще бъдете посрещнати от командния ред на MySQL ( mysql> ):

За да прекъснете връзката със сървъра и да оставите командата mysql, въведете:

 QUIT 

Типичното отказване (MySQL е регистър без значение) или q също ще работи. Натиснете Enter, за да излезете.

Можете също така да извеждате информация за версията с проста команда:

 sudo mysqladmin -u root version -p 

Забележка: Уверете се, че сте свързани към сървъра, преди да въведете някоя от заявките, които ще покривам.

Ако искате да видите списък с опции, използвайте:

 mysql --help 

Използване на заявки в MySQL

MySQL съхранява данни в таблици и използва команди наречени queries ( SQL = език за структурирани заявки). Преди да се заровим в съхранението, достъпа и промяната на данни, ще разгледам основните запитвания, за да можете да се справите с тях.

Тъй като MySQL използва таблици, изходът на заявките също ще бъде показан в таблици . Всички SQL изрази трябва да бъдат последвани от точка и запетая ( ; ), въпреки че има изключения (най-вече: QUIT). Можете да разделите колони със запетая ( , ). Ето няколко основни примера:

 mysql> SELECT VERSION(); mysql> SELECT CURRENT_DATE; mysql> SELECT VERSION(), CURRENT_DATE; 

Например, третата заявка ще отпечата нещо подобно на това:

 +-----------+--------------+ | VERSION() | CURRENT_DATE | +-----------+--------------+ | 8.0.15 | 2019-04-13 | +-----------+--------------+ 1 row in set (0, 41 sec) 

Тъй като точка и запетая ( ; ) бележи края на оператор, можете да напишете и няколко израза в един ред.

Например вместо:

 mysql> SELECT VERSION(); mysql> SELECT CURRENT_DATE; 

Можете също да напишете:

 mysql> SELECT VERSION(); SELECT CURRENT_DATE; 

Можете също да въведете многоредови заявки (ако не включите точка и запетая в края на реда, преди да натиснете Enter ). В този случай, MySQL просто ще въведе различен ред, за да ви позволи да продължите командата си. Например:

 mysql> SELECT -> VERSION() ->, -> CURRENT_DATE; 

Многоредовите заявки също ще се появят, ако не сте завършили низ в ред (дума, заобиколена от или ).

Ако искате да отмените заявка, въведете c и натиснете Enter .

Има подкани с различни значения:

  • mysql> = готов за нова заявка
  • -> = изчакване на следващия ред от многоредовната заявка
  • '> = изчакване на следващия ред, изчакващ завършване на низ, който започва с единичен цитат ( ' )
  • “> = Чака следващия ред, чакащ завършване на низ, който започва с двойно цитиране ( )
  • `> = изчакване на следващия ред, изчакване за завършване на идентификатор, който е започнал с обратен запис ( ` )
  • / *> = изчакване на следващия ред, чакащ завършване на коментар, започнал с /*

Можете също да отпечатате текущото време ( hh: mm: ss ) заедно с текущата дата с NOW (), както и потребителя, с който сте свързани, като използвате USER () :

 mysql> SELECT NOW(); mysql> SELECT USER(); 

Това ще изведе нещо подобно на това:

 +---------------------+ | NOW() | +---------------------+ | 2019-04-13 23:53:48 | +---------------------+ 1 row in set (0, 00 sec) +----------------+ | USER() | +----------------+ | [email protected] | +----------------+ 1 row in set (0, 00 sec) 

MySQL ви позволява да изчислявате и математически изчисления :

 mysql> SELECT COS(PI()/3), (10-2+4)/3; 

Извеждане на:

 +--------------------+------------+ | COS(PI()/3) | (10-2+4)/3 | +--------------------+------------+ | 0.5000000000000001 | 4.0000 | +--------------------+------------+ 

Използване на бази данни в MySQL

1. Получаване на информация за бази данни

Първо, можете да изброите наличните бази данни с:

 mysql> SHOW DATABASES; 

Можете също да видите избраната база данни с:

 mysql> SELECT DATABASE(); 

Това ще изведе NULL, ако не е избрана база данни. Ето примерен изход за двете споменати твърдения:

 +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ +------------+ | DATABASE() | +------------+ | NULL | +------------+ 

2. Създаване на бази данни

Това става чрез просто въвеждане на команда:

 mysql> CREATE DATABASE example_db; 

Забележка: В Ubuntu 18.04 (или всяка друга Unix-базирана система) имената на базата данни и таблиците са чувствителни към малки и големи букви .

3. Избиране на бази данни

За да изберете база данни, трябва да споменете, че искате да я използвате :

 mysql> USE example_db; 

Ако успеете, ще получите съобщението:

 Database changed 

Ако не успеете, ще получите обратно грешка, която ви казва, че MySQL не може да намери посочената база данни.

Можете също да изберете база данни, когато се свързвате със сървъра, като споменете името на съществуваща база данни в края на командата connect:

 mysql -h host_name -u user_name -p example_table 

Например:

 mysql -u root -p example_table 

Използване на таблици в SQL

1. Получаване на информация за таблици

За да изведете таблиците в текущата база данни, използвайте:

 mysql> SHOW TABLES; 

Забележка: Уверете се, че сте избрали база данни.

Ако базата данни е празна (например новосъздадена), изходът ще бъде:

 Empty set (0, 00 sec) 

След създаване на таблици, изходът ще бъде по линията на:

 +----------------------+ | Tables_in_example_db | +----------------------+ | table_1 | | table_2 | +----------------------+ 1 row in set (0, 00 sec) 

2. Създаване на таблици

За да създадете таблици, трябва да посочите оформлението - колоните и какъв тип данни трябва да съхраняват.

В моя пример ще съхранявам информация за група хора: име, дата на раждане, пол, държава. Ето как мога да създам тази таблица:

 mysql> CREATE TABLE table_1 (name VARCHAR(30), birth_date DATE, sex CHAR(1), country VARCHAR(40)); 

Забележка: Можете да напишете командата и на няколко реда .

Можете да видите, че споменах името на таблицата ( table_1 ) и името на колоните ( име, дата на раждане, пол, държава ). След имената на колоните посочих типа данни, който съхраняват. VARCHAR (n) са низове с най-много n знака по дължина, DATE е ясно за себе си ( CCYY-MM-DD формат) и CHAR (1) означава един символ (конкретно, възнамерявам да използвам 'm' и 'f). за мъже и жени ). Други често срещани типове са INT (цели числа), BOOL (booleans), TIME (hh: mm: ss), има много типове данни, които могат да се използват в MySQL (число, низ, дата и час). Можете да използвате и по-сложни типове данни, като AUTO_INCREMENT .

След това таблицата ще се появи, ако покажете таблици .

Ако желаете, можете да промените оформлението на таблица с помощта на ALTER TABLE :

 mysql> ALTER TABLE table_1 ADD email VARCHAR(50); mysql> ALTER TABLE table_1 DROP birth_date; 

Тези примери добавят колона (първи пример) и изтриват колона (втори пример). Можете да проверите повече информация за ALTER TABLE тук, тъй като има и по-разширено използване.

3. Описание на таблици

Можете да видите структурата на таблица по всяко време с:

 mysql> DESCRIBLE table_name; 

Например:

 mysql> DESCRIBE table_1; 

ще излезе:

 +------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+-----+---------+-------+ | name | varchar(30) | YES | | NULL | | | birth_date | date | YES | | NULL | | | sex | char(1) | YES | | NULL | | | country | varchar(40) | YES | | NULL | | +------------+-------------+------+-----+---------+-------+ 4 rows in set (0, 00 sec) 

4. Изтриване на таблици

Изявлението за изтриване на таблици е:

 DROP TABLE table_name; 

5. Вмъкване на данни в таблици

За да вмъкнете данни, трябва да посочите стойностите, които ще бъдат въведени във всяка колона (в същия ред, както в дефиницията на таблицата). За празни или неизвестни стойности трябва да използвате NULL . Уверете се, че не-числовите стойности са с кавички ( ' ) или двойни кавички ( ). Стойностите трябва да бъдат разделени със запетаи ( , ).

Ето примери за Смит и Емили:

 mysql> INSERT INTO table_1 VALUES ('Smith', '1980-04-24', 'm', 'Argentina'); mysql> INSERT INTO table_1 VALUES ('Emily', '1994-07-19', 'f', NULL); 

6. Изпразване на таблици

Ако искате да изпразните таблица (изтрийте всички записи), използвайте:

 DELETE FROM table_name; 

Използвайки WHERE, можете да изтривате конкретни редове :

 DELETE FROM table_name WHERE col_name = value 

Ще отида по-задълбочено в следващите раздели.

7. Актуализиране на записите в таблицата

Синтаксисът за актуализиране на запис е:

 UPDATE table_name SET col = 'value' WHERE conditions 

Например:

 UPDATE table_1 SET country = 'France' WHERE name = 'Emily' 

Ако не укажете условия, всички записи ще бъдат променени.

8. Извличане на данни от таблици

Командата MySQL, използвана за извличане на данни от таблици, е SELECT . Структурата на такова изявление е:

 SELECT what FROM where WHERE conditions; 

Ще прегледам някои общи приложения, за да разберете как да извлечете от базата данни точно какво искате.

а. Избиране на всички данни

Първо, най-простата употреба е да се покажат всички данни от таблицата . Например:

 mysql> SELECT * FROM table_1; 

Шаблонът ( * ) означава всичко, table_1 е таблицата, от която извличам. Можете да видите, че съм пропуснал част WHERE ; не е задължително да имате условия за избраните данни.

б. Избиране на конкретни данни

Първо ще прегледам избора на редове .

За да изберете конкретни редове, трябва да посочите условия, които ограничават данните:

 mysql> SELECT * FROM table_1 WHERE name = 'Smith'; mysql> SELECT * FROM table_1 WHERE sex = 'm'; mysql> SELECT * FROM table_1 WHERE birth_date SELECT * FROM table_1 WHERE sex = 'f' AND birth_date > '1991-1-1'; mysql> SELECT * FROM table_1 WHERE sex = 'm' OR country = 'France'; mysql> SELECT * FROM table_1 WHERE country IS NOT NULL; 

В първите два примера просто сравнявам струни ( нечувствителни към регистър ). Можете също да сравнявате стойности като дати и цели числа с оператори за сравнение ( >, =, <=, = ). се използва за обозначаване „ не е равно “. Можете да зададете множество условия, като използвате логически оператори ( AND, OR ). И има по-висок приоритет от OR . Най-добре е да използвате скоби, когато имате по-сложни условия.

IS NOT NULL е начин да се покажат само редове, които нямат стойност за посочената колона. Не можете да използвате аритметични оператори за сравнение с NULL, тъй като представлява липсваща стойност (резултатът ще бъде също NULL ). Трябва да използвате IS NULL и НЕ е NULL .

Както NULL, така и се третират като FALSE, останалите като TRUE .

Сега ще ви покажа конкретни колони .

За да направите това, трябва да посочите колоните, които искате да покажете, разделени със запетаи. Например:

 mysql> SELECT name, birth_date FROM table_1; 

Можете също така да се отървете от повтарящите се данни . Например, ако искам да получа всички дати на раждане (без да получавам същата стойност няколко пъти, ако са родени повече хора на тази дата), ще използвам:

 mysql> SELECT DISTINCT birth_date FROM table_1; 

Това ще покаже само DISTINCT резултати.

За да станете още по- конкретни, можете да комбинирате показването на определени колони с условия ( WHERE ):

 mysql> SELECT name, sex FROM table_1 WHERE country = 'France' AND birth_date < '1991-1-1'; 

° С. Сортиране на данни

За да сортирате данните, използвате ORDER_BY :

 mysql> SELECT name FROM table_1 ORDER BY birth_date; 

Можете да видите, че съм комбинирал това с избора на конкретни данни. Горната команда ще покаже имената от всички записи, подредени във възходящ ред по дата на раждане.

Можете също да поръчате в низходящ ред:

 mysql> SELECT name FROM table_1 ORDER BY birth_date DESC; 

Сортирането може да се приложи за няколко колони . Например, за да подредите в низходящ ред по дата на раждане и хората, родени на една и съща дата във възходящ ред по име, бих използвал:

 mysql> SELECT name FROM table_1 ORDER BY birth_date DESC, name; 

д. Управление на датите

Можете да получите текущата дата, като използвате CURDATE () . Използвайки тази и друга година, можете да изчислите разликата (напр. Да получите възрастта на дадено лице) с TIMESTAMPDIFF () :

 mysql> SELECT name, birth_date, CURDATE(), -> TIMESTAMPDIFF(YEAR, birth_date, CURDATE()) AS age -> FROM table_1 ORDER BY age; 

Ето изхода за примерна таблица_1 :

 +--------+------------+------------+------+ | name | birth_date | CURDATE() | age | +--------+------------+------------+------+ | Emily | 1994-07-19 | 2019-04-13 | 24 | | Danny | 1992-08-04 | 2019-04-13 | 26 | | Joanna | 1992-08-04 | 2019-04-13 | 26 | | Joe | 1985-03-11 | 2019-04-13 | 34 | | Smith | 1980-04-24 | 2019-04-13 | 38 | +--------+------------+------------+------+ 

TIMESTAMPDIFF () приема като аргументи единицата да използва за резултата (YEAR) и две дати (birth_date, CURDATE ()), за които да изчисли разлика. Ключовата дума AS ( псевдоним) определя произтичащата колона и улеснява работата с нея (в този пример: сортиране по възраст).

За препращане към определени части от дати можете да използвате YEAR (), MONTH () и DAYOFMONTH (), като използвате датата като аргумент . Например:

 mysql> SELECT name, birth_date, MONTH(birth_date) FROM table_1; 

Можете да сравнявате резултатите (месеци, години, дни) точно както нормалните числа. Въпреки това, за да ги сравните с неща като например следващия месец, не можете просто да добавите към CURDATE (), тъй като това може да ви накара да проверите за месец 13 или друг такъв без смисъл. Заобиколното решение за това е INTERVAL и DATE_ADD () :

 mysql> SELECT name, birth_date FROM table_1 WHERE MONTH(birth_date) = MONTH(DATE_ADD(CURDATE(), INTERVAL 1 MONTH)); 

Можете също да използвате оператора modulo ( MOD ):

 mysql> SELECT name, birth_date FROM pet WHERE MONTH(birth_date) = MOD(MONTH(CURDATE()), 12) + 1; 

Използването на невалидни дати ще върне NULL и ще произведе ПРЕДУПРЕЖДЕНИЯ, наблюдавани с:

 mysql> SHOW WARNINGS; 

д. Използване на съвпадение на шаблон

В MySQL _ означава всеки един символ и % за 0+ знака и шаблони (по подразбиране) не са чувствителни към букви . Вместо = и , за да използвате шаблони, трябва да използвате LIKE и NOT LIKE :

 mysql> SELECT birth_date FROM table_1 WHERE name LIKE '%a%'; mysql> SELECT birth_date FROM table_1 WHERE name LIKE '%b'; mysql> SELECT birth_date FROM table_1 WHERE name LIKE 'c%'; mysql> SELECT * FROM table_1 WHERE name LIKE '___'; 

Тези примери избират датите на раждане на записите, където името съдържа ' a ' (първи пример), завършва с ' b ' (втори пример) или започва с ' c ' (трети пример). Последният пример избира редове, в които името има точно три знака (три инстанции на ' _ ').

Можете също да използвате разширени регулярни изрази с REGEXP_LIKE () (също REGEXP и RLIKE оператори). Редовните изрази са извън обхвата на това ръководство, но можете да проверите повече информация тук.

е. Преброяване на резултатите

Преброяването на данни е важно и има много приложения в реалния свят. MySQL използва COUNT () за такива задачи. Най-простият пример е преброяването на записите в таблицата :

 mysql> SELECT COUNT(*) FROM table_1; 

Можете също да разделите броя между групите . Например, бих могъл да ГРУПА по държава и да покажа колко записи са във всяка страна:

 mysql> SELECT country, COUNT(*) FROM table_1 GROUP BY country; 

Можете да споменете още по-конкретни групи, като въведете повече колони за групиране по . Например:

 mysql> SELECT country, sex, COUNT(*) FROM table_1 GROUP BY country, sex; 

Тези резултати биха могли да се използват заедно с WHERE, за да се стесни изхода.

Бъдете внимателни, когато преброявате. Ако посочите нещо друго за печат освен COUNT () и не споменавате тези колони след GROUP BY, може да получите грешка или неочаквани резултати (вижте ONLY_FULL_GROUP_BY ).

гр. Използване на няколко таблици

Това е нещо, което бихте искали да направите в малко по-сложен контекст.

Например, представете си, че има друга таблица ( table_2 ), в която се съхранява датата ( датата ) на хората, които ( име ) присъстваха на срещи ( срещи ).

Можете да покажете на колко години са били хората в тези таблици, когато са посещавали срещите:

 mysql> SELECT table_1.name, TIMESTAMPDIFF(YEAR, birth_date, date) AS age, meeting FROM table_1 INNER JOIN table_2 ON table_1.name = table_2.name; 

Това ще изведе нещо като:

 +-------+------+-----------------+ | name | age | meeting | +-------+------+-----------------+ | Emily | 21 | Dog Lovers Club | | Emily | 22 | Dog Lovers Club | | Emily | 23 | Hackathon | | Smith | 36 | TED Talk | | Smith | 38 | Footbal Match | +-------+------+-----------------+ 

Ще се опитам да обясня синтаксиса . За името трябваше да споменем имена на table_1.name и table_2.name, тъй като колоната присъства в двете таблици (за рождена дата, дата и среща не е необходимо да посочваме таблицата, тъй като те са уникални за една от тях). Това използва изявленията, които вече съм обхванал.

Интересното е това:

  FROM table_1 INNER JOIN table_2 ON table_1.name = table_2.name; 

INNER JOIN поставя таблиците заедно и взима реда, който има нещо общо, състояние, определено от ключовата дума ON ; в този случай, когато имената съвпадат.

Забележка: Можете също така да съберете същата таблица със себе си, може би за да сравните два SELECT резултата.

Използване на пакетния режим в MySQL

Друга опция е пакетния режим . Вместо интерактивната обвивка, можете да поставите изразите във файл и да ги изпълните :

 mysql -h host_name -u user_name -p < batch_file 

След това ще бъдете подканени да въведете парола (ако е необходима за потребителя). Ако искате да продължите да работите, вместо да спрете при грешки, използвайте –force .

Можете дори да пренасочите изхода към друга програма или към файл:

 mysql -h host_name -u user_name -p < batch_file | less mysql -h host_name -u user_name -p output_file 

Можете също да получите интерактивен изход с -t или ехо изход с -v параметри.

Ако сте в интерактивната MySQL обвивка и искате да стартирате скрипт, използвайте някое от тези две:

 mysql> source batch_file; mysql> \. batch_file; 

Обобщавайки

В тази статия разгледах различни начини, по които можете да използвате MySQL за работа с таблични бази данни, дори да се занимавате с по- разширени функции.

Ще се радвам, ако това ръководство помага на потребителите и на начинаещите. Дори и да не сте начинаещ, надявам се да прочетете нещо, за което не сте знаели. Ако ви е помогнало, уведомете ни в коментарите!

Препоръчано

Алтернативи на операционната система с отворен код към Android
2019
$ 2400 Ценен Въведение към Linux Курсът е достъпен безплатно за edX
2019
Албанската конференция с отворен код търси лектори
2019