MySQLi - szybki przewodnik
Co to jest baza danych?
Baza danych to osobna aplikacja, która przechowuje zbiór danych. Każda baza danych ma co najmniej jeden odrębny interfejs API do tworzenia, uzyskiwania dostępu, zarządzania, wyszukiwania i replikowania przechowywanych danych.
Można używać innych rodzajów magazynów danych, takich jak pliki w systemie plików lub duże tabele skrótów w pamięci, ale pobieranie i zapisywanie danych nie byłoby tak szybkie i łatwe w tego typu systemach.
Dlatego obecnie używamy systemów zarządzania relacyjnymi bazami danych (RDBMS) do przechowywania i zarządzania ogromną ilością danych. Nazywa się to relacyjną bazą danych, ponieważ wszystkie dane są przechowywane w różnych tabelach, a relacje są ustanawiane za pomocą kluczy podstawowych lub innych kluczy znanych jako klucze obce.
ZA Relational DataBase Management System (RDBMS) to oprogramowanie, które -
Umożliwia wdrożenie bazy danych z tabelami, kolumnami i indeksami.
Gwarantuje integralność referencyjną między wierszami różnych tabel.
Aktualizuje indeksy automatycznie.
Interpretuje zapytanie SQL i łączy informacje z różnych tabel.
Terminologia RDBMS
Zanim przejdziemy do wyjaśnienia systemu baz danych MySQLi, zrewidujmy kilka definicji związanych z bazą danych.
Database - Baza danych to zbiór tabel z powiązanymi danymi.
Table- Tabela to macierz z danymi. Tabela w bazie danych wygląda jak zwykły arkusz kalkulacyjny.
Column - Jedna kolumna (element danych) zawiera dane jednego i tego samego rodzaju, na przykład kod pocztowy kolumny.
Row - Wiersz (= krotka, wpis lub rekord) to grupa powiązanych danych, na przykład dane jednej subskrypcji.
Redundancy - Dwukrotne przechowywanie danych, nadmiarowo, aby przyspieszyć działanie systemu.
Primary Key- Klucz podstawowy jest unikalny. Wartość klucza nie może wystąpić dwukrotnie w jednej tabeli. Za pomocą klucza można znaleźć co najwyżej jeden wiersz.
Foreign Key - Klucz obcy to pin łączący między dwiema tabelami.
Compound Key - Klucz złożony (klucz złożony) to klucz składający się z wielu kolumn, ponieważ jedna kolumna nie jest wystarczająco unikalna.
Index - Indeks w bazie danych przypomina indeks na końcu książki.
Referential Integrity - Więzy integralności zapewniają, że wartość klucza obcego zawsze wskazuje na istniejący wiersz.
Baza danych MySQLi
MySQLi to szybki, łatwy w użyciu RDBMS używany w wielu małych i dużych firmach. Rozszerzenie MySQLi jest rozwijane, sprzedawane i obsługiwane przez MySQL. MySQL staje się tak popularny z wielu dobrych powodów -
MySQLi jest udostępniany na licencji open source. Więc nie masz nic do zapłacenia, aby go używać.
MySQLi jest sam w sobie potężnym programem. Obsługuje duży podzbiór funkcjonalności najdroższych i najbardziej wydajnych pakietów baz danych.
MySQLi używa standardowej formy dobrze znanego języka danych SQL.
MySQLi działa na wielu systemach operacyjnych iz wieloma językami, w tym PHP, PERL, C, C ++, JAVA itp.
MySQLi działa bardzo szybko i dobrze działa nawet z dużymi zestawami danych.
MySQLi jest bardzo przyjazny dla PHP, najbardziej cenionego języka do tworzenia stron internetowych.
MySQLi obsługuje duże bazy danych, do 50 milionów wierszy lub więcej w tabeli. Domyślny limit rozmiaru pliku dla tabeli wynosi 4 GB, ale można go zwiększyć (jeśli system operacyjny sobie z tym poradzi) do teoretycznego limitu 8 milionów terabajtów (TB).
MySQLi można dostosować. Licencja GPL typu open source umożliwia programistom modyfikowanie oprogramowania MySQL w celu dopasowania do ich własnych, specyficznych środowisk.
Zanim zaczniesz
Przed rozpoczęciem tego samouczka powinieneś mieć podstawową wiedzę na temat informacji zawartych w naszych samouczkach PHP i HTML.
Ten samouczek koncentruje się głównie na używaniu MySQLi w środowisku PHP. Wiele przykładów podanych w tym samouczku będzie przydatnych dla programistów PHP.
Zalecamy zapoznanie się z naszym samouczkiem PHP w celach informacyjnych.
Pobieranie MySQL
Rozszerzenie MySQLi jest przeznaczone do pracy z MySQL w wersji 4.1.13 lub nowszej, więc musisz pobrać MySQL. Wszystkie pliki do pobrania dla MySQL znajdują się na stronie MySQL Downloads . Wybierz najnowszy numer wersji dla MySQL Community Server, który chcesz i, tak dokładnie, jak to możliwe, żądaną platformę.
Instalowanie MySQL w systemie Linux / UNIX
Zalecanym sposobem instalacji MySQL w systemie Linux jest użycie RPM. MySQL AB udostępnia następujące RPM do pobrania na swojej stronie internetowej -
MySQL - Serwer bazy danych MySQL, który zarządza bazami danych i tabelami, kontroluje dostęp użytkowników i przetwarza zapytania SQL.
MySQL-client - Programy klienckie MySQL, które umożliwiają połączenie się i interakcję z serwerem.
MySQL-devel - Biblioteki i pliki nagłówkowe, które przydają się podczas kompilowania innych programów korzystających z MySQL.
MySQL-shared - Biblioteki współdzielone dla klienta MySQL.
MySQL-bench - Narzędzia do testów porównawczych i testowania wydajności serwera bazy danych MySQL.
Wymienione tutaj pakiety RPM MySQL są zbudowane w systemie SuSE Linux, ale zwykle będą działać na innych wariantach Linuksa bez żadnych trudności.
Teraz wykonaj następujące kroki, aby przejść do instalacji -
Zaloguj się do systemu za pomocą root użytkownik.
Przejdź do katalogu zawierającego RPM -
Zainstaluj serwer bazy danych MySQL, wykonując następujące polecenie. Pamiętaj, aby zastąpić nazwę pliku kursywą nazwą pliku RPM.
[root@host]# rpm -i MySQL-5.0.9-0.i386.rpm
Jest to opcjonalny, ale zalecany krok, aby zainstalować pozostałe RPM w ten sam sposób -
Powyższe polecenie zajmuje się instalacją serwera MySQL, utworzeniem użytkownika MySQL, utworzeniem niezbędnej konfiguracji i automatycznym uruchomieniem serwera MySQL.
Wszystkie pliki binarne związane z MySQL można znaleźć w / usr / bin i / usr / sbin. Wszystkie tabele i bazy danych zostaną utworzone w katalogu / var / lib / mysql.
[root@host]# rpm -i MySQL-client-5.0.9-0.i386.rpm
[root@host]# rpm -i MySQL-devel-5.0.9-0.i386.rpm
[root@host]# rpm -i MySQL-shared-5.0.9-0.i386.rpm
[root@host]# rpm -i MySQL-bench-5.0.9-0.i386.rpm
Instalowanie MySQL w systemie Windows
Domyślna instalacja w dowolnej wersji systemu Windows jest teraz znacznie łatwiejsza niż kiedyś, ponieważ MySQL jest teraz ładnie zapakowany z instalatorem. Wystarczy pobrać pakiet instalatora, rozpakować go w dowolnym miejscu i uruchomić plik setup.exe.
Domyślny instalator setup.exe przeprowadzi Cię przez trywialny proces i domyślnie zainstaluje wszystko w C: \ mysql.
Przetestuj serwer, uruchamiając go z wiersza poleceń za pierwszym razem. Przejdź do lokalizacji serwera mysqld, którym prawdopodobnie jest C: \ mysql \ bin i wpisz -
mysqld.exe --console
NOTE - Jeśli korzystasz z systemu NT, będziesz musiał użyć mysqld-nt.exe zamiast mysqld.exe
Jeśli wszystko poszło dobrze, zobaczysz komunikaty dotyczące uruchamiania i InnoDB. Jeśli nie, możesz mieć problem z uprawnieniami. Upewnij się, że katalog zawierający dane jest dostępny dla dowolnego użytkownika (prawdopodobnie mysql), w którym działają procesy bazy danych.
MySQL nie doda się do menu startowego i nie ma szczególnie przyjemnego sposobu GUI na zatrzymanie serwera. Dlatego jeśli masz tendencję do uruchamiania serwera przez dwukrotne kliknięcie pliku wykonywalnego mysqld, powinieneś pamiętać o ręcznym zatrzymaniu procesu za pomocą mysqladmin, listy zadań, menedżera zadań lub innych środków specyficznych dla systemu Windows.
Weryfikacja instalacji MySQL
Po pomyślnym zainstalowaniu MySQL, zainicjowaniu tabel podstawowych i uruchomieniu serwera, możesz sprawdzić, czy wszystko działa tak, jak powinno za pomocą kilku prostych testów.
Użyj narzędzia mysqladmin, aby uzyskać stan serwera
Posługiwać się mysqladminbinarny, aby sprawdzić wersję serwera. Ten plik binarny byłby dostępny w / usr / bin w systemie Linux oraz w C: \ mysql \ bin w systemie Windows.
[root@host]# mysqladmin --version
W systemie Linux da to następujący wynik. Może się różnić w zależności od instalacji -
mysqladmin Ver 8.23 Distrib 5.0.9-0, for redhat-linux-gnu on i386
Jeśli nie otrzymasz takiej wiadomości, może to oznaczać, że wystąpił problem z instalacją i będziesz potrzebować pomocy, aby go naprawić.
Wykonuj proste polecenia SQL za pomocą klienta MySQL
Możesz połączyć się z serwerem MySQL za pomocą klienta MySQL za pomocą mysqlKomenda. W tej chwili nie musisz podawać żadnego hasła, ponieważ domyślnie będzie ono puste.
Więc po prostu użyj następującego polecenia
[root@host]# mysql
Powinien zostać nagrodzony zachętą mysql>. Teraz masz połączenie z serwerem MySQL i możesz wykonać wszystkie polecenia SQL w wierszu polecenia mysql> w następujący sposób -
mysql> SHOW DATABASES;
+----------+
| Database |
+----------+
| mysql |
| test |
+----------+
2 rows in set (0.13 sec)
Kroki poinstalacyjne
MySQL jest dostarczany z pustym hasłem dla użytkownika root MySQL. Gdy tylko pomyślnie zainstalujesz bazę danych i klienta, musisz ustawić hasło roota w następujący sposób -
[root@host]# mysqladmin -u root password "new_password";
Teraz, aby nawiązać połączenie z serwerem MySQL, musisz użyć następującego polecenia -
[root@host]# mysql -u root -p
Enter password:*******
Użytkownicy systemu UNIX będą również chcieli umieścić katalog MySQL w swojej PATH, więc nie będziesz musiał wpisywać pełnej ścieżki za każdym razem, gdy chcesz użyć klienta wiersza poleceń. Dla basha byłoby to coś w rodzaju -
export PATH = $PATH:/usr/bin:/usr/sbin
Uruchamianie MySQL podczas rozruchu
Jeśli chcesz uruchomić serwer MySQL podczas startu, upewnij się, że masz następujący wpis w pliku /etc/rc.local.
/etc/init.d/mysqld start
Powinieneś także mieć plik binarny mysqld w katalogu /etc/init.d/.
Uruchamianie i zamykanie serwera MySQLi
MySQLi jest rozszerzeniem MySQL, więc najpierw sprawdź, czy serwer MySQL działa, czy nie. Możesz użyć następującego polecenia, aby to sprawdzić -
ps -ef | grep mysqld
Jeśli Twój MySql jest uruchomiony, zobaczysz mysqldproces wymieniony w wyniku. Jeśli serwer nie działa, możesz go uruchomić za pomocą następującego polecenia -
root@host# cd /usr/bin
./safe_mysqld &
Teraz, jeśli chcesz zamknąć już działający serwer MySQL, możesz to zrobić za pomocą następującego polecenia -
root@host# cd /usr/bin
./mysqladmin -u root -p shutdown
Enter password: ******
Konfiguracja konta użytkownika MySQLi
Aby dodać nowego użytkownika do MySQLi, która jest ulepszoną wersją MySQL, wystarczy dodać nowy wpis do user tabela w bazie danych mysql.
Poniżej przykład dodania nowego użytkownika guest z uprawnieniami SELECT, INSERT i UPDATE za pomocą hasła guest123; zapytanie SQL to -
root@host# mysql -u root -p
Enter password:*******
mysql> use mysql;
Database changed
mysql> INSERT INTO user (
host, user, password, select_priv, insert_priv, update_priv)
VALUES ('localhost', 'guest', PASSWORD('guest123'), 'Y', 'Y', 'Y');
Query OK, 1 row affected (0.20 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 1 row affected (0.01 sec)
mysql> SELECT host, user, password FROM user WHERE user = 'guest';
+-----------+---------+------------------+
| host | user | password |
+-----------+---------+------------------+
| localhost | guest | 6f8c114b58f2ce9e |
+-----------+---------+------------------+
1 row in set (0.00 sec)
Dodając nowego użytkownika pamiętaj o zaszyfrowaniu nowego hasła za pomocą funkcji PASSWORD () dostarczanej przez MySQL. Jak widać w powyższym przykładzie, hasło moje jest zaszyfrowane do 6f8c114b58f2ce9e.
Zwróć uwagę na instrukcję FLUSH PRIVILEGES. To instruuje serwer, aby ponownie załadował tabele grantów. Jeśli go nie używasz, nie będziesz mógł połączyć się z mysql przy użyciu nowego konta użytkownika, przynajmniej do czasu ponownego uruchomienia serwera.
Możesz również określić inne uprawnienia dla nowego użytkownika, ustawiając wartości kolejnych kolumn w tabeli użytkowników na „Y” podczas wykonywania zapytania INSERT lub możesz je później zaktualizować za pomocą zapytania UPDATE.
- Select_priv
- Insert_priv
- Update_priv
- Delete_priv
- Create_priv
- Drop_priv
- Reload_priv
- Shutdown_priv
- Process_priv
- File_priv
- Grant_priv
- References_priv
- Index_priv
- Alter_priv
Innym sposobem dodania konta użytkownika jest użycie polecenia GRANT SQL; Poniższy przykład doda użytkownikazara z hasłem zara123 dla określonej bazy danych o nazwie TUTORIALS.
root@host# mysql -u root -p password;
Enter password:*******
mysql> use mysql;
Database changed
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
-> ON TUTORIALS.*
-> TO 'zara'@'localhost'
-> IDENTIFIED BY 'zara123';
Spowoduje to również utworzenie wpisu w tabeli bazy danych mysql o nazwie user.
NOTE - MySQL nie przerywa polecenia, dopóki nie podasz średnika (;) na końcu polecenia SQL.
Konfiguracja pliku /etc/my.cnf
W większości przypadków nie należy dotykać tego pliku. Domyślnie będzie zawierał następujące wpisy -
[mysqld]
datadir = /var/lib/mysql
socket = /var/lib/mysql/mysql.sock
[mysql.server]
user = mysql
basedir = /var/lib
[safe_mysqld]
err-log = /var/log/mysqld.log
pid-file = /var/run/mysqld/mysqld.pid
Tutaj możesz określić inny katalog dla dziennika błędów, w przeciwnym razie nie powinieneś zmieniać żadnego wpisu w tej tabeli.
Administracyjne polecenie MySQLi
Oto lista ważnych poleceń MySQLi, których będziesz od czasu do czasu używać do pracy z bazą danych MySQL -
USE Databasename - Posłuży do wybrania określonej bazy danych w obszarze roboczym MySQLi.
SHOW DATABASES - Wyświetla listę baz danych, które są dostępne dla MySQLi DBMS.
SHOW TABLES - Pokazuje tabele w bazie danych po wybraniu bazy danych za pomocą polecenia use.
SHOW COLUMNS FROM tablename - Pokazuje atrybuty, typy atrybutów, kluczowe informacje, czy NULL jest dozwolone, wartości domyślne i inne informacje dotyczące tabeli.
SHOW INDEX FROM tablename - Przedstawia szczegóły wszystkich indeksów w tabeli, w tym KLUCZ PODSTAWOWY.
SHOW TABLE STATUS LIKE tablename\G - Raportuje szczegóły wydajności i statystyk MySQLi DBMS.
MySQLi działa bardzo dobrze w połączeniu z różnymi językami programowania, takimi jak PERL, C, C ++, JAVA i PHP. Spośród tych języków PHP jest najpopularniejszym ze względu na możliwości tworzenia aplikacji internetowych.
Ten samouczek koncentruje się głównie na używaniu MySQLi w środowisku PHP. PHP zapewnia różne funkcje dostępu do bazy danych MySQLi i manipulowania rekordami danych w bazie danych MySQLi. Wymagałbyś wywoływania funkcji PHP w ten sam sposób, w jaki wywołujesz każdą inną funkcję PHP.
Funkcje PHP używane z MySQLi mają następujący ogólny format -
mysqli_function(value,value,...);
Druga część nazwy funkcji jest specyficzna dla funkcji i zwykle jest słowem opisującym, co robi funkcja. Poniżej znajdują się dwie funkcje, których użyjemy w naszym samouczku -
mysqli_connect($connect);
mysqli_query($connect,"SQL statement");
Poniższy przykład pokazuje ogólną składnię PHP do wywoływania dowolnej funkcji MySQLi.
<html>
<head>
<title>PHP with MySQLi</title>
</head>
<body>
<?php
$retval = mysqli_function(value, [value,...]);
if( !$retval ){
die ( "Error: a related error message" );
}
// Otherwise MySQLi or PHP Statements
?>
</body>
</html>
Począwszy od następnego rozdziału, zobaczymy wszystkie ważne funkcje MySQLi wraz z PHP.
Połączenie MySQLi przy użyciu pliku binarnego mysql
Bazę danych MySQLi możesz założyć za pomocą mysql binarny w wierszu polecenia.
Przykład
Oto prosty przykład połączenia z serwerem MySQL w celu ustanowienia bazy danych mysqli z wiersza poleceń -
[root@host]# mysql -u root -p
Enter password:******
To da ci mysql> wiersz poleceń, w którym będziesz mógł wykonać dowolne polecenie SQL. Oto wynik powyższego polecenia -
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2854760 to server version: 5.0.9
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
W powyższym przykładzie użyliśmy rootjako użytkownik, ale możesz użyć dowolnego innego użytkownika. Każdy użytkownik będzie mógł wykonać wszystkie operacje SQL, które są dla niego dozwolone.
Możesz odłączyć się od bazy danych MySQL w dowolnym momencie, używając exit polecenie w mysql> prompt.
mysql> exit
Bye
Połączenie MySQLi za pomocą skryptu PHP
PHP zapewnia mysqli_connect()funkcja, aby otworzyć połączenie z bazą danych. Ta funkcja przyjmuje pięć parametrów i zwraca identyfikator łącza MySQLi w przypadku powodzenia lub FALSE w przypadku niepowodzenia.
Składnia
connection mysqli_connect(server,user,passwd,new_link,client_flag);
Sr.No. | Parametr i opis |
---|---|
1 | server Opcjonalne - nazwa hosta, na którym działa serwer bazy danych. Jeśli nie zostanie określony, wartość domyślna tolocalhost:3306. |
2 | user Opcjonalne - nazwa użytkownika uzyskująca dostęp do bazy danych. Jeśli nie zostanie określony, domyślna jest nazwa użytkownika będącego właścicielem procesu serwera. |
3 | passwd Opcjonalne - hasło użytkownika uzyskującego dostęp do bazy danych. Jeśli nie zostanie określony, domyślnie jest to puste hasło. |
4 | new_link Opcjonalne - jeśli nastąpi drugie wywołanie mysqli_connect () z tymi samymi argumentami, nowe połączenie nie zostanie nawiązane; zamiast tego zostanie zwrócony identyfikator już otwartego połączenia. |
5 | client_flags Opcjonalnie - kombinacja następujących stałych -
|
Możesz odłączyć się od bazy danych MySQLi w dowolnym momencie za pomocą innej funkcji PHP mysqli_close(). Ta funkcja przyjmuje pojedynczy parametr, który jest połączeniem zwracanym przezmysqli_connect() funkcjonować.
Składnia
bool mysqli_close ( resource $link_identifier );
Jeśli zasób nie zostanie określony, ostatnio otwarta baza danych jest zamykana. Ta funkcja zwraca prawdę, jeśli pomyślnie zamyka połączenie, w przeciwnym razie zwraca fałsz.
Przykład
Wypróbuj następujący przykład, aby połączyć się z serwerem MySQL -
<html>
<head>
<title>Connecting MySQLi Server</title>
</head>
<body>
<?php
$dbhost = 'localhost:3306'; $dbuser = 'guest';
$dbpass = 'guest123'; $conn = mysqli_connect($dbhost, $dbuser, $dbpass); if(! $conn ){
die('Could not connect: ' . mysqli_error());
}
echo 'Connected successfully';
mysqli_close($conn);
?>
</body>
</html>
Jeśli powyższy przykład jest połączony z MySQLi, to wyjście powinno wyglądać tak w Twojej przeglądarce -
Connected successfully
Utwórz bazę danych za pomocą mysqladmin
Potrzebujesz specjalnych uprawnień do tworzenia lub usuwania bazy danych MySQLi. Zakładając, że masz dostęp do użytkownika root, możesz utworzyć dowolną bazę danych za pomocą mysqlmysqladmin dwójkowy.
Przykład
Oto prosty przykład tworzenia bazy danych o nazwie TUTORIALS -
[root@host]# mysqladmin -u root -p create TUTORIALS
Enter password:******
Stworzy to bazę danych MySQLi TUTORIALE.
Utwórz bazę danych za pomocą skryptu PHP
PHP używa mysqli_queryfunkcja tworzenia lub usuwania bazy danych MySQLi. Ta funkcja przyjmuje dwa parametry i zwraca wartość TRUE w przypadku sukcesu lub FALSE w przypadku niepowodzenia.
Przykład
Wypróbuj następujący przykład, aby utworzyć bazę danych -
<html>
<head>
<title>Connecting MySQLi Server</title>
</head>
<body>
<?php
$dbhost = 'localhost:3306';
$dbuser = 'root'; $dbpass = '<password here>';
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn ){ echo 'Connected failure<br>'; } echo 'Connected successfully<br>'; $sql = "CREATE DATABASE TUTORIALS";
if (mysqli_query($conn, $sql)) {
echo "Database created successfully";
} else {
echo "Error creating database: " . mysqli_error($conn); } mysqli_close($conn);
?>
</body>
</html>
Jeśli podłączono i utworzono bazę danych pomyślnie, przykładowe dane wyjściowe powinny wyglądać następująco -
Connected successfully
Database created successfully
Usuń bazę danych za pomocą mysqladmin
Potrzebujesz specjalnych uprawnień do tworzenia lub usuwania bazy danych MySQLi. Zakładając, że masz dostęp do użytkownika root, możesz utworzyć dowolną bazę danych za pomocą mysqlmysqladmin dwójkowy.
Zachowaj ostrożność podczas usuwania jakiejkolwiek bazy danych, ponieważ utracisz wszystkie dane dostępne w bazie danych.
Oto przykład usunięcia bazy danych utworzonej w poprzednim rozdziale -
[root@host]# mysqladmin -u root -p drop TUTORIALS
Enter password:******
To da ci ostrzeżenie i potwierdzi, czy naprawdę chcesz usunąć tę bazę danych, czy nie.
Dropping the database is potentially a very bad thing to do.
Any data stored in the database will be destroyed.
Do you really want to drop the 'TUTORIALS' database [y/N] y
Database "TUTORIALS" dropped
Usuń bazę danych za pomocą skryptu PHP
PHP używa queryfunkcja tworzenia lub usuwania bazy danych MySQLi. Ta funkcja przyjmuje dwa parametry i zwraca wartość TRUE w przypadku sukcesu lub FALSE w przypadku niepowodzenia.
Przykład
Wypróbuj następujący przykład, aby usunąć bazę danych -
<html>
<head>
<title>Connecting MySQLi Server>/title>
</head>
<body>
<?php
$dbhost = 'localhost:3306'; $dbuser = 'root';
$dbpass = '<Password Here>'; $conn = mysqli_connect($dbhost, $dbuser, $dbpass); if(! $conn ){
echo 'Connected failure<br>';
}
echo 'Connected successfully<br>';
$sql = "DROP DATABASE TUTORIALS"; if (mysqli_query($conn, $sql)) { echo "Record deleted successfully"; } else { echo "Error deleting record: " . mysqli_error($conn);
}
mysqli_close($conn);
?>
</body>
</html>
WARNING- Podczas usuwania bazy danych za pomocą skryptu PHP nie wyświetla monitu o żadne potwierdzenie. Dlatego zachowaj ostrożność podczas usuwania bazy danych MySQLi.
Jeśli podłączono i usunięto bazę danych pomyślnie, przykładowe dane wyjściowe powinny wyglądać następująco -
Connected successfully
Database deleted successfully
Po uzyskaniu połączenia z serwerem MySQLi konieczne jest wybranie konkretnej bazy danych do pracy. Dzieje się tak, ponieważ na serwerze MySQLi może być dostępnych więcej niż jedna baza danych.
Składnia
bool mysqli_select_db( db_name, connection );
Sr.No. | Parametr i opis |
---|---|
1 | db_name Wymagane - nazwa bazy danych MySQLi do wybrania |
2 | connection Opcjonalne - jeśli nie zostanie określone, zostanie użyte ostatnio otwarte połączenie przez mysqli_connect. |
Przykład
Oto przykład pokazujący, jak wybrać bazę danych.
<html>
<head>
<title>Connecting MySQLi Server</title>
</head>
<body>
<?php
$dbhost = 'localhost:3306';
$dbuser = 'root'; $dbpass = '<Password Here>';
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn ) { echo 'Connected failure<br>'; } echo 'Connected successfully<br>'; mysqli_select_db( 'TUTORIALS' ); //Write some code here mysqli_close($conn);
?>
</body>
</html>
Jeśli połączenie i wybrana baza danych zakończyły się powodzeniem, przykładowe dane wyjściowe powinny wyglądać następująco -
Connected successfully
Prawidłowe zdefiniowanie pól w tabeli jest ważne dla ogólnej optymalizacji bazy danych. Powinieneś używać tylko typu i rozmiaru pola, którego naprawdę potrzebujesz; nie definiuj pola o szerokości 10 znaków, jeśli wiesz, że użyjesz tylko 2 znaków. Te typy pól (lub kolumn) są również określane jako typy danych po rozszerzeniutype of data będziesz przechowywać na tych polach.
MySQLi wykorzystuje wiele różnych typów danych podzielonych na trzy kategorie: numeryczne, data i godzina oraz typy ciągów.
Numeryczne typy danych
MySQLi wykorzystuje wszystkie standardowe numeryczne typy danych ANSI SQL, więc jeśli przychodzisz do MySQLi z innego systemu baz danych, te definicje będą wyglądać znajomo. Poniższa lista przedstawia typowe numeryczne typy danych i ich opisy -
INT- Liczba całkowita o normalnej wielkości, która może być ze znakiem lub bez znaku. W przypadku podpisania dopuszczalny zakres wynosi od -2147483648 do 2147483647. Jeśli bez znaku, dopuszczalny zakres wynosi od 0 do 4294967295. Można określić szerokość do 11 cyfr.
TINYINT- Bardzo mała liczba całkowita, która może być ze znakiem lub bez znaku. Jeśli podpisany, dopuszczalny zakres wynosi od -128 do 127. Jeśli nie ma znaku, dopuszczalny zakres wynosi od 0 do 255. Można określić szerokość do 4 cyfr.
SMALLINT- Mała liczba całkowita, która może być ze znakiem lub bez. W przypadku podpisania dopuszczalny zakres wynosi od -32768 do 32767. Jeśli nie ma znaku, dopuszczalny zakres wynosi od 0 do 65535. Można określić szerokość do 5 cyfr.
MEDIUMINT- średniej wielkości liczba całkowita, która może być ze znakiem lub bez znaku. Jeśli znak jest podpisany, dopuszczalny zakres wynosi od -8388608 do 8388607. W przypadku braku znaku dopuszczalny zakres wynosi od 0 do 16777215. Możesz określić szerokość do 9 cyfr.
BIGINT- duża liczba całkowita, która może być ze znakiem lub bez znaku. Jeśli jest podpisany, dopuszczalny zakres wynosi od -9223372036854775808 do 9223372036854775807. W przypadku braku znaku dopuszczalny zakres wynosi od 0 do 18446744073709551615. Możesz określić szerokość do 20 cyfr.
FLOAT(M,D)- Liczba zmiennoprzecinkowa, której nie można bez znaku. Możesz zdefiniować długość wyświetlania (M) i liczbę miejsc po przecinku (D). Nie jest to wymagane i domyślnie wynosi 10,2, gdzie 2 to liczba miejsc po przecinku, a 10 to całkowita liczba cyfr (w tym dziesiętnych). Precyzja dziesiętna może dochodzić do 24 miejsc w przypadku zmiennej FLOAT.
DOUBLE(M,D)- Liczba zmiennoprzecinkowa podwójnej precyzji, która nie może być bez znaku. Możesz zdefiniować długość wyświetlania (M) i liczbę miejsc po przecinku (D). Nie jest to wymagane i domyślnie wynosi 16,4, gdzie 4 to liczba miejsc po przecinku. Dokładność dziesiętna może dochodzić do 53 miejsc w przypadku DOUBLE. REAL to synonim DOUBLE.
DECIMAL(M,D) - Rozpakowana liczba zmiennoprzecinkowa, której nie można bez znaku. W rozpakowanych liczbach dziesiętnych każda cyfra dziesiętna odpowiada jednemu bajtowi. Wymagane jest zdefiniowanie długości wyświetlania (M) i liczby miejsc po przecinku (D). NUMERIC to synonim DECIMAL.
Typy daty i godziny
Typy danych daty i godziny MySQL to -
DATE- Data w formacie RRRR-MM-DD między 1000-01-01 a 9999-12-31. Na przykład data 30 grudnia 1973 r. Zostanie zapisana jako 1973-12-30.
DATETIME- Kombinacja daty i godziny w formacie RRRR-MM-DD GG: MM: SS, między 1000-01-01 00:00:00 a 9999-12-31 23:59:59. Na przykład godzina 3:30 po południu 30 grudnia 1973 roku zostanie zapisana jako 1973-12-30 15:30:00.
TIMESTAMP - Znacznik czasu między północą 1 stycznia 1970 r. A czasem w 2037 r. Wygląda jak poprzedni format DATETIME, tylko bez myślników między liczbami; 3:30 po południu 30 grudnia 1973 roku będzie przechowywany jako 19731230153000 (RRRRMMDDGGMMSS).
TIME - Przechowuje czas w formacie HH: MM: SS.
YEAR(M)- Przechowuje rok w formacie dwu- lub czterocyfrowym. Jeśli długość jest określona jako 2 (na przykład ROK (2)), ROK może wynosić od 1970 do 2069 (od 70 do 69). Jeśli długość jest określona jako 4, YEAR może wynosić od 1901 do 2155. Domyślna długość to 4.
Typy strun
Chociaż typy liczbowe i daty są fajne, większość danych, które będziesz przechowywać, będzie w formacie ciągów. Ta lista opisuje typowe łańcuchowe typy danych w MySQLi.
CHAR(M)- Ciąg o stałej długości o długości od 1 do 255 znaków (na przykład CHAR (5)), dopełniony spacjami po prawej stronie do określonej długości podczas przechowywania. Określenie długości nie jest wymagane, ale wartość domyślna to 1.
VARCHAR(M)- Ciąg o zmiennej długości, zawierający od 1 do 255 znaków; na przykład VARCHAR (25). Podczas tworzenia pola VARCHAR należy zdefiniować długość.
BLOB or TEXT- Pole o maksymalnej długości 65535 znaków. Obiekty BLOB to „duże obiekty binarne”, które służą do przechowywania dużych ilości danych binarnych, takich jak obrazy lub inne typy plików. Pola zdefiniowane jako TEKST również przechowują duże ilości danych; różnica między nimi polega na tym, że w przypadku sortowania i porównań przechowywanych danych w obiektach BLOB jest rozróżniana wielkość liter, a w polach TEKST wielkość liter nie jest uwzględniana. Nie określasz długości za pomocą BLOB lub TEXT.
TINYBLOB or TINYTEXT- Kolumna typu BLOB lub TEXT o maksymalnej długości 255 znaków. Nie określasz długości za pomocą TINYBLOB lub TINYTEXT.
MEDIUMBLOB or MEDIUMTEXT- Kolumna typu BLOB lub TEXT o maksymalnej długości 16777215 znaków. Nie określasz długości za pomocą MEDIUMBLOB lub MEDIUMTEXT.
LONGBLOB or LONGTEXT- Kolumna typu BLOB lub TEXT o maksymalnej długości 4294967295 znaków. Nie określasz długości za pomocą LONGBLOB lub LONGTEXT.
ENUM - Wyliczenie, które jest fantazyjnym określeniem listy. Definiując ENUM, tworzysz listę elementów, z których należy wybrać wartość (lub może to być NULL). Na przykład, jeśli chcesz, aby Twoje pole zawierało „A”, „B” lub „C”, należy zdefiniować ENUM jako ENUM („A”, „B”, „C”) i tylko te wartości (lub NULL) mógłby kiedykolwiek wypełnić to pole.
Polecenie tworzenia tabeli wymaga -
- Nazwa tabeli
- Nazwy pól
- Definicje dla każdego pola
Składnia
Oto ogólna składnia SQL do tworzenia tabeli MySQLi -
CREATE TABLE table_name (column_name column_type);
Teraz utworzymy następującą tabelę w formacie TUTORIALS Baza danych.
CREATE TABLE tutorials_inf(
id INT AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
primary key (id),
);
Tutaj kilka elementów wymaga wyjaśnienia -
Atrybut pola NOT NULLjest używane, ponieważ nie chcemy, aby to pole miało wartość NULL. Jeśli więc użytkownik spróbuje utworzyć rekord o wartości NULL, MySQLi zgłosi błąd.
Atrybut pola AUTO_INCREMENT mówi MySQLi, aby kontynuował i dodał następną dostępną liczbę do pola id.
Słowo kluczowe PRIMARY KEYsłuży do definiowania kolumny jako klucza podstawowego. Aby zdefiniować klucz podstawowy, możesz użyć wielu kolumn oddzielonych przecinkami.
Tworzenie tabel z wiersza polecenia
Utworzenie tabeli MySQLi jest łatwe z zachęty mysql>. Użyjesz polecenia SQLCREATE TABLE stworzyć tabelę.
Przykład
Oto przykład, który tworzy tutorials_tbl -
root@host# mysql -u root -p
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> CREATE TABLE tutorials_inf(
id INT AUTO_INCREMENT,name VARCHAR(20) NOT NULL,primary key (id));
Query OK, 0 rows affected (0.16 sec)
mysql>
NOTE - MySQLi nie kończy polecenia, dopóki nie podasz średnika (;) na końcu polecenia SQL.
Tworzenie tabel za pomocą skryptu PHP
Aby utworzyć nową tabelę w dowolnej istniejącej bazie danych, musisz użyć funkcji PHP mysqli_query(). Drugi argument przekażesz odpowiednim poleceniem SQL, aby utworzyć tabelę.
Przykład
Oto przykład tworzenia tabeli za pomocą skryptu PHP -
<html>
<head>
<title>Creating MySQLi Tables</title>
</head>
<body>
<?php
$host = 'localhost:3306'; $user = 'root';
$pass = '<Password Here>'; $dbname = 'TUTORIALS';
$conn = mysqli_connect($host, $user, $pass,$dbname); if(!$conn){
die('Could not connect: '.mysqli_connect_error());
}
echo 'Connected successfully<br/>';
$sql = "create table tutorials_inf( id INT AUTO_INCREMENT,name VARCHAR(20) NOT NULL,primary key (id))"; if(mysqli_query($conn, $sql)){ echo "Table created successfully"; } else { echo "Table is not created successfully "; } mysqli_close($conn);
?>
</body>
</html>
Przykładowy wynik powinien wyglądać następująco:
Connected successfully
Table created successfully
Usunięcie istniejącej tabeli MySQLi jest bardzo łatwe, ale należy zachować szczególną ostrożność podczas usuwania istniejącej tabeli, ponieważ utracone dane nie zostaną odzyskane po usunięciu tabeli.
Składnia
Oto ogólna składnia SQL do usuwania tabeli MySQLi -
DROP TABLE table_name ;
Usuwanie tabel z wiersza polecenia
Wystarczy to wykonać DROP TABLE Polecenie SQL w znaku zachęty mysql>.
Przykład
Oto przykład, który usuwa tutorials_inf -
root@host# mysql -u root -p
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> DROP TABLE tutorials_inf
Query OK, 0 rows affected (0.8 sec)
mysql>
Porzucanie tabel za pomocą skryptu PHP
Aby usunąć istniejącą tabelę z dowolnej bazy danych, musisz użyć funkcji PHP mysqli_query(). Drugi argument przekażesz z odpowiednim poleceniem SQL, aby usunąć tabelę.
Przykład
<html>
<head>
<title>Dropping MySQLi Tables</title>
</head>
<body>
<?php
$host = 'localhost:3306'; $user = 'root';
$pass = ''; $dbname = 'TUTORIALS';
$conn = mysqli_connect($host, $user, $pass,$dbname); if(!$conn) {
die('Could not connect: '.mysqli_connect_error());
}
echo 'Connected successfully<br/>';
$sql = "DROP TABLE tutorials_inf"; if(mysqli_query($conn, $sql)) { echo "Table is deleted successfully"; } else { echo "Table is not deleted successfully\n"; } mysqli_close($conn);
?>
</body>
</html>
Przykładowy wynik powinien wyglądać następująco:
Connected successfully
Table is deleted successfully
Aby wstawić dane do tabeli MySQLi, musisz użyć SQL INSERT INTOKomenda. Możesz wstawić dane do tabeli MySQLi za pomocą zachęty mysql> lub dowolnego skryptu, takiego jak PHP.
Składnia
Oto ogólna składnia SQL polecenia INSERT INTO do wstawiania danych do tabeli MySQLi:
INSERT INTO table_name
( field1, field2,...fieldN )
VALUES
( value1, value2,...valueN );
Aby wstawić ciągowe typy danych, należy zachować wszystkie wartości w cudzysłowach lub apostrofach, na przykład: - "value".
Wstawianie danych z wiersza polecenia
Spowoduje to użycie polecenia SQL INSERT INTO do wstawienia danych do tabeli MySQLi tutorials_inf.
Przykład
Poniższy przykład utworzy 3 rekordy w tutorials_tbl stół -
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> INSERT INTO tutorials_inf
->(id, name)
->VALUES
->(10, "John Poul");
Query OK, 1 row affected (0.01 sec)
NOTE- Należy pamiętać, że wszystkie znaki strzałek (->) nie są częścią polecenia SQL; wskazują nowy wiersz i są tworzone automatycznie przez znak zachęty MySQL, podczas naciskania klawisza Enter bez podawania średnika na końcu każdego wiersza polecenia.
Wstawianie danych za pomocą skryptu PHP
Możesz użyć tego samego polecenia SQL INSERT INTO do funkcji PHP mysqli_query() aby wstawić dane do tabeli MySQLi.
Przykład
Ten przykład weźmie trzy parametry od użytkownika i wstawi je do tabeli MySQLi -
<html>
<head>
<title>Add New Record in MySQLi Database</title>
<link rel = "stylesheet" type = "text/css" href = "style.css">
</head>
<body>
<div id = "main">
<form action = "" method = "post">
<label>Name :</label>
<input type = "text" name = "name" id = "name" />
<br />
<br />
<input type = "submit" value ="Submit" name = "submit"/>
<br />
</form>
</div>
<?php
if(isset($_POST["submit"])){ $servername = "localhost:3306";
$username = "root"; $password = "<Password here>";
$dbname = "TUTORIALS"; // Create connection $conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error);
}
$sql = "INSERT INTO tutorials_inf(name)VALUES ('".$_POST["name"]."')";
if (mysqli_query($conn, $sql)) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "" . mysqli_error($conn);
}
$conn->close();
}
?>
</body>
</html>
Przykładowy wynik powinien wyglądać następująco:
New record created successfully
SQL SELECTPolecenie służy do pobierania danych z bazy danych MySQLi. Możesz użyć tego polecenia w zachęcie mysql>, a także w dowolnym skrypcie, takim jak PHP.
Składnia
Oto ogólna składnia SQL polecenia SELECT do pobierania danych z tabeli MySQLi -
SELECT field1, field2,...fieldN table_name1, table_name2...
[WHERE Clause]
[OFFSET M ][LIMIT N]
Możesz użyć jednej lub więcej tabel oddzielonych przecinkami, aby uwzględnić różne warunki za pomocą klauzuli WHERE, ale klauzula WHERE jest opcjonalną częścią polecenia SELECT.
Możesz pobrać jedno lub więcej pól za pomocą jednego polecenia SELECT.
W miejscu pól można podać gwiazdkę (*). W takim przypadku SELECT zwróci wszystkie pola.
Możesz określić dowolny warunek za pomocą klauzuli WHERE.
Możesz określić odsunięcie za pomocą OFFSETskąd SELECT zacznie zwracać rekordy. Domyślnie przesunięcie wynosi zero.
Możesz ograniczyć liczbę zwrotów za pomocą LIMIT atrybut.
Pobieranie danych z wiersza polecenia -
Spowoduje to użycie polecenia SQL SELECT do pobrania danych z tabeli MySQLi tutorials_tbl
Przykład
Poniższy przykład zwróci wszystkie rekordy z domeny tutorials_inf stół -
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * from tutorials_inf;
+----+------+
| id | name |
+----+------+
| 1 | sai |
| 2 | kit |
| 3 | ram |
+----+------+
3 rows in set (0.00 sec)
mysql>
Pobieranie danych za pomocą skryptu PHP
Możesz użyć tego samego polecenia SQL SELECT w funkcji PHP mysqli_query(). Ta funkcja jest używana do wykonywania polecenia SQL, a później innej funkcji PHPmysqli_fetch_assoc()można użyć do pobrania wszystkich wybranych danych. Ta funkcja zwraca wiersz jako tablicę asocjacyjną, tablicę liczbową lub obie. Ta funkcja zwraca FALSE, jeśli nie ma więcej wierszy.
Poniżej znajduje się prosty przykład pobierania rekordów z tutorials_inf stół.
Przykład
Wypróbuj poniższy przykład, aby wyświetlić wszystkie rekordy z tabeli tutorials_inf.
<html>
<head>
<title>Selecting Table in MySQLi Server</title>
</head>
<body>
<?php
$dbhost = 'localhost:3306';
$dbuser = 'root'; $dbpass = '';
$dbname = 'TUTORIALS'; $conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname);
if(! $conn ) { die('Could not connect: ' . mysqli_error()); } echo 'Connected successfully<br>'; $sql = 'SELECT name FROM tutorials_inf';
$result = mysqli_query($conn, $sql); if (mysqli_num_rows($result) > 0) {
while($row = mysqli_fetch_assoc($result)) {
echo "Name: " . $row["name"]. "<br>"; } } else { echo "0 results"; } mysqli_close($conn);
?>
</body>
</html>
Zawartość wierszy jest przypisywana do zmiennej $ row, a wartości w wierszu są następnie drukowane.
NOTE - Zawsze pamiętaj o umieszczeniu nawiasów klamrowych, gdy chcesz wstawić wartość tablicy bezpośrednio do ciągu.
Przykładowy wynik powinien wyglądać następująco:
Connected successfully
Name: ram
Name: kit
Name: abc
Widzieliśmy SQL SELECTpolecenie pobierania danych z tabeli MySQLi. Możemy użyć warunkowej klauzuli o nazwieWHEREklauzula, aby odfiltrować wyniki. Używając klauzuli WHERE, możemy określić kryteria wyboru, aby wybrać wymagane rekordy z tabeli.
Składnia
Oto ogólna składnia SQL polecenia SELECT z klauzulą WHERE do pobierania danych z tabeli MySQLi -
SELECT field1, field2,...fieldN table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2.....
Możesz użyć jednej lub więcej tabel oddzielonych przecinkami, aby uwzględnić różne warunki za pomocą klauzuli WHERE, ale klauzula WHERE jest opcjonalną częścią polecenia SELECT.
Możesz określić dowolny warunek za pomocą klauzuli WHERE.
Możesz określić więcej niż jeden warunek za pomocą AND lub OR operatorzy.
Klauzuli WHERE można używać wraz z poleceniem DELETE lub UPDATE SQL również w celu określenia warunku.
Plik WHEREklauzula działa jak warunek if w dowolnym języku programowania. Klauzula ta służy do porównania podanej wartości z wartością pola dostępną w tabeli MySQLi. Jeśli podana wartość z zewnątrz jest równa dostępnej wartości pola w tabeli MySQLi, to zwraca ten wiersz.
Oto lista operatorów, których można używać z WHERE klauzula.
Załóżmy, że pole A ma 10, a pole B 20, a następnie -
Operator | Opis | Przykład |
---|---|---|
= | Sprawdza, czy wartości dwóch operandów są równe, czy nie, jeśli tak, warunek staje się prawdziwy. | (A = B) nie jest prawdą. |
! = | Sprawdza, czy wartości dwóch operandów są równe, czy nie, jeśli wartości nie są równe, warunek staje się prawdziwy. | (A! = B) jest prawdą. |
> | Sprawdza, czy wartość lewego operandu jest większa niż wartość prawego operandu, jeśli tak, warunek staje się prawdziwy. | (A> B) nie jest prawdą. |
< | Sprawdza, czy wartość lewego operandu jest mniejsza niż wartość prawego operandu. Jeśli tak, warunek staje się prawdziwy. | (A <B) jest prawdą. |
> = | Sprawdza, czy wartość lewego operandu jest większa lub równa wartości prawego operandu, jeśli tak, warunek staje się prawdziwy. | (A> = B) nie jest prawdą. |
<= | Sprawdza, czy wartość lewego operandu jest mniejsza lub równa wartości prawego operandu, jeśli tak, warunek staje się prawdziwy. | (A <= B) jest prawdą. |
Klauzula WHERE jest bardzo przydatna, gdy chcesz pobrać wybrane wiersze z tabeli, zwłaszcza gdy używasz MySQLi Join. Połączenia są omówione w innym rozdziale.
Powszechną praktyką jest wyszukiwanie rekordów za pomocą Primary Key aby wyszukiwanie było szybkie.
Jeśli podany warunek nie pasuje do żadnego rekordu w tabeli, zapytanie nie zwróci żadnego wiersza.
Pobieranie danych z wiersza polecenia
Spowoduje to użycie polecenia SQL SELECT z klauzulą WHERE w celu pobrania wybranych danych z tabeli MySQLi tutorials_inf.
Przykład
Poniższy przykład zwróci wszystkie rekordy z domeny tutorials_inf tabela o nazwie sai -
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql>SELECT * from tutorials_inf where name = 'sai';
+----+------+
| id | name |
+----+------+
| 1 | SAI |
+----+------+
1 row in set (0.00 sec)
mysql>
Chyba że wykonasz LIKEporównanie w ciągu, porównanie nie jest rozróżniane. W wyszukiwaniu można rozróżniać wielkość liter za pomocąBINARY słowo kluczowe w następujący sposób -
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * from tutorials_inf \WHERE BINARY name = 'sai';
Empty set (0.02 sec)
mysql>
Pobieranie danych za pomocą skryptu PHP:
Możesz użyć tego samego polecenia SQL SELECT z WHERE CLAUSE w funkcji PHP mysqli_query().
Przykład
Poniższy przykład zwróci wszystkie rekordy z domeny tutorials_inf tabela o nazwie sai -
<?php
$dbhost = 'localhost:3306';
$dbuser = 'root'; $dbpass = '';
$dbname = 'TUTORIALS'; $conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname);
if(! $conn ) { die('Could not connect: ' . mysqli_error()); } echo 'Connected successfully<br>'; $sql = 'SELECT * from tutorials_inf where name="sai"';
$result = mysqli_query($conn, $sql); if (mysqli_num_rows($result) > 0) {
while($row = mysqli_fetch_assoc($result)) {
echo "Name: " . $row["name"]. "<br>"; } } else { echo "0 results"; } mysqli_close($conn);
?>
Przykładowy wynik powinien wyglądać następująco:
Connected successfully
Name: SAI
Może zaistnieć potrzeba zmodyfikowania istniejących danych w tabeli MySQLi. Możesz to zrobić za pomocą SQLUPDATEKomenda. Spowoduje to zmodyfikowanie dowolnej wartości pola dowolnej tabeli MySQLi.
Składnia
Oto ogólna składnia SQL polecenia UPDATE do modyfikacji danych w tabeli MySQLi -
UPDATE table_name SET field1 = new-value1, field2 = new-value2 [WHERE Clause]
Możesz zaktualizować jedno lub więcej pól łącznie.
Możesz określić dowolny warunek za pomocą klauzuli WHERE.
Możesz aktualizować wartości w jednej tabeli naraz.
Klauzula WHERE jest bardzo przydatna, gdy chcesz zaktualizować wybrane wiersze w tabeli.
Aktualizacja danych z wiersza polecenia
Spowoduje to użycie polecenia SQL UPDATE z klauzulą WHERE w celu zaktualizowania wybranych danych do tabeli MySQLi tutorials_inf.
Przykład
Poniższy przykład zostanie zaktualizowany name pole dla rekordu zawierającego tutorial_inf.
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> UPDATE tutorials_inf
-> SET name = 'johar'
-> WHERE name = 'sai';
Query OK, 1 row affected (0.04 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql>
Aktualizacja danych za pomocą skryptu PHP
Możesz użyć polecenia SQL UPDATE z lub bez WHERE CLAUSE w funkcji PHP mysqli_query(). Ta funkcja wykona polecenie SQL w podobny sposób, w jaki jest wykonywana po znaku zachęty mysql>.
Przykład
Wypróbuj następujący przykład, aby zaktualizować name pole do zapisu.
<?php
$dbhost = 'localhost:3306'; $dbuser = 'root';
$dbpass = ''; $dbname = 'TUTORIALS';
$conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname); if(! $conn ) {
die('Could not connect: ' . mysqli_error());
}
echo 'Connected successfully<br>';
$sql = ' UPDATE tutorials_inf SET name="althamas" WHERE name="ram"'; if (mysqli_query($conn, $sql)) { echo "Record updated successfully"; } else { echo "Error updating record: " . mysqli_error($conn);
}
mysqli_close($conn);
?>
Przykładowy wynik powinien wyglądać następująco:
Connected successfully
Record updated successfully
Jeśli chcesz usunąć rekord z dowolnej tabeli MySQLi, możesz użyć polecenia SQL DELETE FROM. Możesz użyć tego polecenia w zachęcie mysql>, a także w dowolnym skrypcie, takim jak PHP.
Składnia
Oto ogólna składnia SQL polecenia DELETE do usuwania danych z tabeli MySQLi -
DELETE FROM table_name [WHERE Clause]
Jeśli klauzula WHERE nie jest określona, wszystkie rekordy zostaną usunięte z podanej tabeli MySQLi.
Możesz określić dowolny warunek za pomocą klauzuli WHERE.
Możesz usuwać rekordy z jednej tabeli naraz.
Klauzula WHERE jest bardzo przydatna, gdy chcesz usunąć wybrane wiersze w tabeli.
Usuwanie danych z wiersza polecenia
Spowoduje to użycie polecenia SQL DELETE z klauzulą WHERE w celu usunięcia wybranych danych z tabeli MySQLi tutorials_inf.
Przykład
Poniższy przykład usunie rekord z tutorial_inf, którego nazwa to johar.
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> DELETE FROM tutorials_inf where name = 'johar';
Query OK, 1 row affected (0.23 sec)
mysql>
Usuwanie danych za pomocą skryptu PHP
Możesz użyć polecenia SQL DELETE z lub bez WHERE CLAUSE w funkcji PHP mysqli_query(). Ta funkcja wykona polecenie SQL w podobny sposób, w jaki jest wykonywana po znaku zachęty mysql>.
Przykład
Wypróbuj następujący przykład, aby usunąć rekord z tutorial_inf, którego nazwa to althamas.
<?php
$dbhost = 'localhost:3306';
$dbuser = 'root'; $dbpass = '';
$dbname = 'TUTORIALS'; $conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname);
if(! $conn ) { die('Could not connect: ' . mysqli_error()); } echo 'Connected successfully<br>'; $sql = ' DELETE FROM tutorials_inf WHERE name = "althamas"';
if (mysqli_query($conn, $sql)) {
echo "Record deleted successfully";
} else {
echo "Error deleting record: " . mysqli_error($conn); } mysqli_close($conn);
?>
Przykładowe wyjście powinno wyglądać następująco:
Connected successfully
Record deleted successfully
Widzieliśmy SQL SELECTpolecenie pobierania danych z tabeli MySQLi. Możemy również użyć warunkowej klauzuli o nazwieWHERE klauzulę wyboru wymaganych rekordów.
Klauzula WHERE ze znakiem równości (=) działa dobrze, gdy chcemy uzyskać dokładne dopasowanie. Na przykład „name = 'sai'”. Ale może istnieć wymóg, w którym będziemy chcieli odfiltrować wszystkie wyniki, w których nazwa powinna zawierać „johar”. Można to zrobić za pomocą języka SQLLIKE klauzula wraz z klauzulą WHERE.
Jeśli klauzula SQL LIKE jest używana wraz ze znakami%, to będzie działać jak znak meta (*) w systemie UNIX, wyświetlając wszystkie pliki lub katalogi w wierszu polecenia.
Bez znaku% klauzula LIKE jest bardzo podobna do znaku równości wraz z klauzulą WHERE.
Składnia
Oto ogólna składnia SQL polecenia SELECT wraz z klauzulą LIKE do pobierania danych z tabeli MySQLi -
SELECT field1, field2,...fieldN table_name1, table_name2...
WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'
Możesz określić dowolny warunek za pomocą klauzuli WHERE.
Możesz użyć klauzuli LIKE razem z klauzulą WHERE.
Możesz użyć klauzuli LIKE zamiast znaku równości.
Gdy LIKE zostanie użyte wraz ze znakiem%, będzie działać jak wyszukiwanie metaznaków.
Możesz określić więcej niż jeden warunek za pomocą AND lub OR operatorzy.
Klauzula WHERE ... LIKE może być używana wraz z poleceniem DELETE lub UPDATE SQL również w celu określenia warunku.
Korzystanie z klauzuli LIKE w wierszu polecenia
Spowoduje to użycie polecenia SQL SELECT z klauzulą WHERE ... LIKE w celu pobrania wybranych danych z tabeli MySQLi tutorials_inf.
Przykład
Poniższy przykład zwróci wszystkie rekordy z domeny tutorials_inf tabela, dla której nazwisko autora kończy się na johar -
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * from tutorials_inf
-> WHERE name LIKE '%johar';
+----+-------+
| id | name |
+----+-------+
| 2 | johar |
+----+-------+
1 row in set (0.00 sec)
mysql>
Używanie klauzuli LIKE wewnątrz skryptu PHP
Możesz użyć podobnej składni klauzuli WHERE ... LIKE w funkcji PHP mysqli_query(). Ta funkcja jest używana do wykonywania polecenia SQL, a później innej funkcji PHPmysqli_fetch_array() można użyć do pobrania wszystkich wybranych danych, jeśli klauzula WHERE ... LIKE jest używana wraz z poleceniem SELECT.
Ale jeśli klauzula WHERE ... LIKE jest używana z poleceniem DELETE lub UPDATE, to dalsze wywołanie funkcji PHP nie jest wymagane.
Przykład
Wypróbuj poniższy przykład, aby zwrócić wszystkie rekordy z tutorials_inf tabela, której nazwa zawiera johar -
<?php
$dbhost = 'localhost:3306'; $dbuser = 'root';
$dbpass = ''; $dbname = 'TUTORIALS';
$conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname); if(! $conn ) {
die('Could not connect: ' . mysqli_error());
}
echo 'Connected successfully<br>';
$sql = 'SELECT * FROM tutorials_inf WHERE name LIKE "%johar%"'; $result = mysqli_query($conn, $sql);
$row = mysqli_fetch_array($result,MYSQLI_ASSOC);
printf ("%s \n",$row["name"]); mysqli_free_result($result);
mysqli_close($conn);
?>
Przykładowy wynik powinien wyglądać następująco:
Connected successfully
johar
Widzieliśmy SQL SELECTpolecenie pobierania danych z tabeli MySQLi. Gdy wybierzesz wiersze, serwer MySQLi może zwrócić je w dowolnej kolejności, chyba że zalecisz inaczej, podając, jak posortować wynik. Ale sortujesz zestaw wyników, dodając klauzulę ORDER BY, która nazywa kolumnę lub kolumny, według których chcesz sortować.
Składnia
Oto ogólna składnia SQL polecenia SELECT wraz z klauzulą ORDER BY do sortowania danych z tabeli MySQL -
SELECT field1, field2,...fieldN table_name1, table_name2...
ORDER BY field1, [field2...] [ASC [DESC]]
Możesz posortować zwrócony wynik według dowolnego pola, pod warunkiem, że to pole jest wymienione.
Możesz sortować wynik na więcej niż jednym polu.
Możesz użyć słowa kluczowego ASC lub DESC, aby uzyskać wynik w porządku rosnącym lub malejącym. Domyślnie jest to kolejność rosnąca.
Aby umieścić warunek, możesz użyć klauzuli WHERE ... LIKE w zwykły sposób.
Korzystanie z klauzuli ORDER BY w wierszu polecenia
Spowoduje to użycie polecenia SQL SELECT z klauzulą ORDER BY w celu pobrania danych z tabeli MySQLi tutorials_inf.
Przykład
Wypróbuj poniższy przykład, który zwraca wynik w kolejności malejącej.
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * from tutorials_inf ORDER BY id desc;
+----+-------+
| id | name |
+----+-------+
| 4 | ram |
| 3 | raghu |
| 2 | johar |
| 1 | sai |
+----+-------+
4 rows in set (0.00 sec)
mysql>
Sprawdź, czy wszystkie identyfikatory są wymienione w porządku malejącym.
Używanie klauzuli ORDER BY w skrypcie PHP
Możesz użyć podobnej składni klauzuli ORDER BY w funkcji PHP mysqli_query(). Ta funkcja jest używana do wykonywania polecenia SQL, a później innej funkcji PHPmysqli_fetch_array() można użyć do pobrania wszystkich wybranych danych.
Przykład
Wypróbuj poniższy przykład, który zwraca wynik w kolejności malejącej autora samouczka.
<?php
$dbhost = 'localhost:3306';
$dbuser = 'root'; $dbpass = '';
$dbname = 'TUTORIALS'; $conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname);
if(! $conn ) { die('Could not connect: ' . mysqli_error()); } echo 'Connected successfully</br>'; $sql = 'SELECT * from tutorials_inf ORDER BY id desc';
if($result = mysqli_query($conn, $sql)){ if(mysqli_num_rows($result) > 0){
echo "<table>";
echo "<tr>";
echo "<th>id</th>";
echo "<th>name</th>";
echo "</tr>";
while($row = mysqli_fetch_array($result)){
echo "<tr>";
echo "<td>" . $row['id'] . "</td>"; echo "<td>" . $row['name'] . "</td>";
echo "</tr>";
}
echo "</table>";
mysqli_free_result($result); } else { echo "No records matching your query were found."; } } else { echo "ERROR: Could not able to execute $sql. " . mysqli_error($conn); } mysqli_close($conn);
?>
Przykładowy wynik powinien wyglądać następująco:
Connected successfully
id name
4 ram
3 raghu
2 johar
1 sai
Do tej pory otrzymywaliśmy dane tylko z jednej tabeli naraz. Jest to dobre dla prostych prób, ale w większości rzeczywistych zastosowań MySQL często będziesz musiał pobrać dane z wielu tabel w jednym zapytaniu.
Możesz użyć wielu tabel w pojedynczym zapytaniu SQL. Łączenie się w MySQLi oznacza rozbicie dwóch lub więcej tabel w jedną.
Możesz używać JOINS w instrukcjach SELECT, UPDATE i DELETE, aby łączyć tabele MySQLi. Zobaczymy przykład LEFT JOIN, który różni się również od prostego MySQLi JOIN.
Korzystanie z połączeń w wierszu polecenia
Załóżmy, że mamy dwie tabele tutorials_bks i tutorials_inf, w TUTORIALACH. Pełna lista znajduje się poniżej -
Przykład
Wypróbuj następujące przykłady -
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * FROM tcount_bks;
+----+---------+
| id | book |
+----+---------+
| 1 | java |
| 2 | java |
| 3 | html |
| 4 | c++ |
| 5 | Android |
+----+---------+
5 rows in set (0.00 sec)
mysql> SELECT * from tutorials_inf;
+----+-------+
| id | name |
+----+-------+
| 1 | sai |
| 2 | johar |
| 3 | raghu |
| 4 | ram |
+----+-------+
4 rows in set (0.00 sec)
mysql>
Teraz możemy napisać zapytanie SQL, aby połączyć te dwie tabele. To zapytanie wybierze wszystkie nazwy z tabelitutorials_inf i odbierze odpowiednią liczbę samouczków z witrynytutorials_bks.
mysql> SELECT a.id, a.name,b.id FROM tutorials_inf a,tutorials_bks b WHERE a.id = b.id;
+----+-------+----+
| id | name | id |
+----+-------+----+
| 1 | sai | 1 |
| 2 | johar | 2 |
| 3 | raghu | 3 |
| 4 | ram | 4 |
+----+-------+----+
4 rows in set (0.00 sec)
mysql>
W tabeli tutorials_bks mamy 5 rekordów, ale w powyższym przykładzie filtruje i podaje tylko 4 rekordy id zgodnie z zapytaniem
Używanie połączeń w skrypcie PHP
Możesz użyć dowolnego z wyżej wymienionych zapytań SQL w skrypcie PHP. Wystarczy przekazać zapytanie SQL do funkcji PHPmysqli_query() a następnie uzyskasz wyniki w zwykły sposób.
Przykład
Wypróbuj następujący przykład -
<?php
$dbhost = 'localhost:3306'; $dbuser = 'root';
$dbpass = ''; $dbname = 'TUTORIALS';
$conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname); if(! $conn ) {
die('Could not connect: ' . mysqli_error());
}
echo 'Connected successfully</br>';
$sql = 'SELECT a.id, a.name,b.id FROM tutorials_inf a,tutorials_bks b WHERE a.id = b.id'; if($result = mysqli_query($conn, $sql)) {
if(mysqli_num_rows($result) > 0) { echo "<table>"; echo "<tr>"; echo "<th>id</th>"; echo "<th>name</th>"; echo "<th>id</th>"; echo "</tr>"; while($row = mysqli_fetch_array($result)){ echo "<tr>"; echo "<td>" . $row['id'] . "</td>";
echo "<td>" . $row['name'] . "</td>"; echo "<td>" . $row['id'] . "</td>";
echo "</tr>";
}
echo "</table>";
mysqli_free_result($result); } else { echo "No records matching your query were found."; } } else { echo "ERROR: Could not able to execute $sql. " . mysqli_error($conn); } mysqli_close($conn);
?>
Przykładowy wynik powinien wyglądać następująco:
Connected successfully
id name id
1 sai 1
2 johar 2
3 raghu 3
4 ram 4
MySQL LEWY DOŁĄCZ
Łączenie lewe MySQLi różni się od łączenia prostego. LEWE POŁĄCZENIE MySQLi umożliwia dodatkowe uwzględnienie tabeli po lewej stronie.
Jeśli zrobię LEFT JOIN, otrzymam wszystkie rekordy, które pasują w ten sam sposób, a DODATKOWO otrzymuję dodatkowy rekord dla każdego niedopasowanego rekordu w lewej tabeli sprzężenia - zapewniając w ten sposób (w moim przykładzie), że każda nazwa otrzyma wspomnieć -
Przykład
Wypróbuj następujący przykład, aby zrozumieć LEFT JOIN -
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql>SELECT a.id, a.name,b.id FROM tutorials_inf a LEFT JOIN tutorials_bks b ON a.id = b.id;
Aby zapoznać się z JOINS, musisz poćwiczyć więcej. Jest to nieco skomplikowana koncepcja w MySQL / SQL i stanie się bardziej zrozumiała podczas robienia prawdziwych przykładów.
Widzieliśmy SQL SELECT polecenie wraz z WHERE klauzulę do pobierania danych z tabeli MySQLi, ale gdy próbujemy podać warunek, który porównuje wartość pola lub kolumny z NULL, nie działa prawidłowo.
Aby poradzić sobie z taką sytuacją, MySQLi udostępnia trzech operatorów
IS NULL - operator zwraca prawdę, jeśli wartość kolumny wynosi NULL.
IS NOT NULL - operator zwraca prawdę, jeśli wartość kolumny nie jest równa NULL.
<=> - operator porównuje wartości, które (w przeciwieństwie do operatora =) są prawdziwe nawet dla dwóch wartości NULL.
Warunki dotyczące NULL są szczególne. Nie można używać = NULL lub! = NULL do wyszukiwania wartości NULL w kolumnach. Takie porównania zawsze zawodzą, ponieważ nie da się stwierdzić, czy są prawdziwe. Nawet NULL = NULL zawodzi.
Aby wyszukać kolumny, które mają lub nie są NULL, użyj IS NULL lub IS NOT NULL.
Używanie wartości NULL w wierszu polecenia
Załóżmy, że stół tutorials_bks w bazie TUTORIALS i zawiera dwie kolumny id i name, gdzie NULL nazwa wskazuje, że wartość jest nieznana -
Przykład
Wypróbuj następujące przykłady -
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> INSERT INTO tutorials_bks (book) values('');
Query OK, 1 row affected (0.08 sec)
mysql> INSERT INTO tutorials_bks (book) values('');
Query OK, 1 row affected (0.08 sec)
mysql> INSERT INTO tutorials_bks (book) values('');
Query OK, 1 row affected (0.08 sec)
mysql> INSERT INTO tutorials_bks (book) values('NULL');
Query OK, 1 row affected (0.08 sec)
mysql> INSERT INTO tutorials_bks (book) values('NULL');
Query OK, 1 row affected (0.08 sec)
mysql> INSERT INTO tutorials_bks (book) values('NULL');
Query OK, 1 row affected (0.08 sec)
+----+---------+
| id | book |
+----+---------+
| 1 | java |
| 2 | java |
| 3 | html |
| 4 | c++ |
| 5 | Android |
| 6 | |
| 7 | |
| 8 | |
| 9 | NULL |
| 10 | NULL |
| 11 | NULL |
+----+---------+
11 rows in set (0.00 sec)
mysql>
Aby znaleźć rekordy, w których kolumna nazwy ma wartość NULL lub nie, zapytania należy pisać w ten sposób -
mysql> SELECT * FROM tutorials_bks WHERE book = "null";
+----+------+
| id | book |
+----+------+
| 9 | NULL |
| 10 | NULL |
| 11 | NULL |
+----+------+
3 rows in set (0.00 sec)
mysql> SELECT * FROM tutorials_bks WHERE book ! = "null";
+----+---------+
| id | book |
+----+---------+
| 1 | java |
| 2 | java |
| 3 | html |
| 4 | c++ |
| 5 | Android |
| 6 | |
| 7 | |
| 8 | |
+----+---------+
8 rows in set (0.00 sec)
mysql> SELECT * FROM tutorials_bks WHERE book = "";
+----+------+
| id | book |
+----+------+
| 6 | |
| 7 | |
| 8 | |
+----+------+
3 rows in set (0.01 sec)
Obsługa wartości NULL w skrypcie PHP
Możesz użyć warunku if ... else , aby przygotować zapytanie na podstawie wartości NULL.
Przykład
Poniższy przykład pobiera tutorial_count z zewnątrz, a następnie porównuje go z wartością dostępną w tabeli.
<?php
$dbhost = 'localhost:3036'; $dbuser = 'root';
$dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) {
die('Could not connect: ' . mysql_error());
}
if( isset($tutorial_count )) { $sql = 'SELECT tutorial_author, tutorial_count FROM tcount_tbl
WHERE tutorial_count = $tutorial_count'; } else { $sql = 'SELECT tutorial_author, tutorial_count
FROM tcount_tbl WHERE tutorial_count IS $tutorial_count'; } mysql_select_db('TUTORIALS'); $retval = mysql_query( $sql, $conn );
if(! $retval ) { die('Could not get data: ' . mysql_error()); } while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) { echo "Author:{$row['tutorial_author']} <br> ".
"Count: {$row['tutorial_count']} <br> ". "--------------------------------<br>"; } echo "Fetched data successfully\n"; mysql_close($conn);
?>
Widziałeś dopasowywanie wzorców MySQLi z LIKE ...%. MySQLi obsługuje inny typ operacji dopasowywania wzorców w oparciu o wyrażenia regularne i rozszerzenieREGEXPoperator. Jeśli znasz PHP lub PERL, to jest to bardzo łatwe do zrozumienia, ponieważ to dopasowanie jest bardzo podobne do tych skryptowych wyrażeń regularnych.
Poniżej znajduje się tabela wzorów, których można używać razem z REGEXP operator.
Wzór | Jaki wzór pasuje |
---|---|
^ | Początek ciągu |
$ | Koniec łańcucha |
. | Dowolny pojedynczy znak |
[…] | Dowolny znak wymieniony w nawiasach kwadratowych |
[^ ...] | Dowolny znak niewymieniony w nawiasach kwadratowych |
p1 | p2 | p3 | Alternacja; pasuje do dowolnego ze wzorów p1, p2 lub p3 |
* | Zero lub więcej wystąpień poprzedniego elementu |
+ | Co najmniej jedno wystąpienie poprzedniego elementu |
{n} | n wystąpień elementu poprzedzającego |
{m, n} | m do n wystąpień elementu poprzedzającego |
Przykłady
Teraz w oparciu o powyższą tabelę możesz ustawić różne typy zapytań SQL, aby spełnić Twoje wymagania. Tutaj wymieniam kilka dla twojego zrozumienia. Rozważmy, że mamy tabelę o nazwie tutorials_inf i zawiera ona pole o nazwie nazwa -
Zapytanie, aby znaleźć wszystkie nazwy zaczynające się od „sa”
mysql> SELECT * FROM tutorials_inf WHERE name REGEXP '^sa';
Przykładowy wynik powinien wyglądać następująco:
+----+------+
| id | name |
+----+------+
| 1 | sai |
+----+------+
1 row in set (0.00 sec)
Zapytanie, aby znaleźć wszystkie nazwy kończące się na „ai”
mysql> SELECT * FROM tutorials_inf WHERE name REGEXP 'ai$';
Przykładowy wynik powinien wyglądać następująco:
+----+------+
| id | name |
+----+------+
| 1 | sai |
+----+------+
1 row in set (0.00 sec)
Zapytanie w celu znalezienia wszystkich nazw, które zawierają „a”
mysql> SELECT * FROM tutorials_inf WHERE name REGEXP 'a';
Przykładowy wynik powinien wyglądać następująco:
+----+-------+
| id | name |
+----+-------+
| 1 | sai |
| 3 | ram |
| 4 | johar |
+----+-------+
3 rows in set (0.00 sec)
Zapytanie, aby znaleźć wszystkie imiona zaczynające się od samogłoski
mysql> SELECT * FROM tutorials_inf WHERE name REGEXP '^[aeiou]';
Transakcja to sekwencyjna grupa operacji manipulowania bazą danych, która jest wykonywana tak, jakby była pojedynczą jednostką pracy. Innymi słowy, transakcja nigdy nie zostanie zakończona, chyba że każda pojedyncza operacja w grupie zakończy się sukcesem. Jeśli jakakolwiek operacja w ramach transakcji nie powiedzie się, cała transakcja zakończy się niepowodzeniem.
W praktyce wiele zapytań SQL połączysz w grupę i wykonasz wszystkie razem jako część transakcji.
Właściwości transakcji
Transakcje mają następujące cztery standardowe właściwości, zwykle określane skrótem ACID -
Atomicity- zapewnia pomyślne zakończenie wszystkich operacji w ramach jednostki pracy; w przeciwnym razie transakcja jest przerywana w momencie niepowodzenia, a poprzednie operacje są przywracane do poprzedniego stanu.
Consistency - zapewnia, że baza danych prawidłowo zmienia stany po pomyślnym zatwierdzeniu transakcji.
Isolation - umożliwia niezależne działanie transakcji i wzajemną przejrzystość.
Durability - zapewnia, że wynik lub skutek zatwierdzonej transakcji będzie trwał w przypadku awarii systemu.
W MySQL transakcje rozpoczynają się od instrukcji BEGIN WORK i kończą się instrukcją COMMIT lub ROLLBACK. Większość transakcji stanowią polecenia SQLi znajdujące się między instrukcją początkową i końcową.
COMMIT i ROLLBACK
Te dwa słowa kluczowe Commit i Rollback są używane głównie do transakcji MySQL.
Po pomyślnym zakończeniu transakcji należy wydać komendę COMMIT, aby zmiany we wszystkich zaangażowanych tabelach odniosły skutek.
W przypadku niepowodzenia należy wydać komendę ROLLBACK, aby przywrócić poprzedni stan każdej tabeli, do której odwołuje się transakcja.
Możesz kontrolować zachowanie transakcji, ustawiając zmienną sesji o nazwie AUTOCOMMIT. Jeśli AUTOCOMMIT ma wartość 1 (wartość domyślna), to każda instrukcja SQL (w ramach transakcji lub nie) jest uważana za transakcję zakończoną i domyślnie zatwierdzana po jej zakończeniu. Gdy AUTOCOMMIT jest ustawiony na 0, przez wydanie polecenia SET AUTOCOMMIT = 0, kolejna seria instrukcji działa jak transakcja i żadne działania nie są zatwierdzane, dopóki nie zostanie wydana jawna instrukcja COMMIT.
Możesz wykonać te polecenia SQL w PHP przy użyciu mysqli_query() funkcjonować.
Ogólny przykład transakcji
Ta sekwencja zdarzeń jest niezależna od używanego języka programowania; ścieżkę logiczną można utworzyć w dowolnym języku używanym do tworzenia aplikacji.
Możesz wykonać te polecenia SQL w PHP przy użyciu mysqli_query() funkcjonować.
Rozpocznij transakcję, wydając polecenie SQL BEGIN WORK.
Wydaj co najmniej jedno polecenie SQL, takie jak SELECT, INSERT, UPDATE lub DELETE.
Sprawdź, czy nie ma błędu i wszystko jest zgodne z wymaganiami.
Jeśli wystąpi błąd, wydaj polecenie ROLLBACK, w przeciwnym razie wydaj polecenie COMMIT.
Typy tabel bezpiecznych dla transakcji w MySQLi
Nie możesz używać transakcji bezpośrednio, możesz, ale nie byłyby one bezpieczne i gwarantowane. Jeśli planujesz używać transakcji w programowaniu MySQLi, musisz stworzyć swoje tabele w specjalny sposób. Istnieje wiele typów tabel, które obsługują transakcje, ale najpopularniejszy jestInnoDB.
Obsługa tabel InnoDB wymaga określonego parametru kompilacji podczas kompilowania MySQLi ze źródła. Jeśli Twoja wersja MySQLi nie obsługuje InnoDB, poproś swojego dostawcę usług internetowych o zbudowanie wersji MySQLi z obsługą typów tabel InnoDB lub pobierz i zainstaluj binarną dystrybucję MySQL-Max dla Windows lub Linux / UNIX i pracuj z typem tabeli w środowisko programistyczne.
Jeśli Twoja instalacja MySQLi obsługuje tabele InnoDB, po prostu dodaj plik TYPE = InnoDBdefinicja do instrukcji tworzenia tabeli. Na przykład poniższy kod tworzy tabelę InnoDB o nazwie tutorials_innodb -
root@host# mysql -u root -p;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> create table tutorials_innodb
-> (
-> tutorial_author varchar(40) NOT NULL,
-> tutorial_count INT
-> ) TYPE = InnoDB;
Query OK, 0 rows affected (0.02 sec)
Sprawdź poniższy link, aby dowiedzieć się więcej o - InnoDB
Możesz użyć innych typów tabel, takich jak GEMINI lub BDB, ale to zależy od twojej instalacji, czy obsługuje te dwa typy.
MySQLi ALTER polecenie jest bardzo przydatne, gdy chcesz zmienić nazwę swojej tabeli, dowolnego pola tabeli lub jeśli chcesz dodać lub usunąć istniejącą kolumnę w tabeli.
Zacznijmy od stworzenia tabeli o nazwie tutorials_alter.
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> create table tutorials_alter
-> (
-> i INT,
-> c CHAR(1)
-> );
Query OK, 0 rows affected (0.27 sec)
mysql> SHOW COLUMNS FROM tutorials_alter;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| i | int(11) | YES | | NULL | |
| c | char(1) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.02 sec)
Upuszczanie, dodawanie lub zmiana położenia kolumny
Załóżmy, że chcesz usunąć istniejącą kolumnę i z powyższej tabeli MySQLi, użyjesz DROP klauzula wraz z ALTER polecenie w następujący sposób -
mysql> ALTER TABLE tutorials_alter DROP i;
ZA DROP nie zadziała, jeśli kolumna jest jedyną pozostałą w tabeli.
Aby dodać kolumnę, użyj DODAJ i określ definicję kolumny. Poniższa instrukcja przywraca pliki kolumna do tutorials_alter -
mysql> ALTER TABLE tutorials_alter ADD i INT;
Po wydaniu tej instrukcji testalter będzie zawierał te same dwie kolumny, które miał podczas pierwszego tworzenia tabeli, ale nie będzie miał takiej samej struktury. Dzieje się tak, ponieważ nowe kolumny są domyślnie dodawane na końcu tabeli. Więc pomimo tego, żei pierwotnie była to pierwsza kolumna w mytbl, teraz jest ostatnią.
mysql> SHOW COLUMNS FROM tutorials_alter;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| c | char(1) | YES | | NULL | |
| i | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.01 sec)
Aby wskazać, że chcesz, aby kolumna znajdowała się na określonej pozycji w tabeli, użyj FIRST, aby ustawić ją jako pierwszą kolumnę, lub AFTER col_name, aby wskazać, że nowa kolumna powinna zostać umieszczona po col_name. Wypróbuj następujące instrukcje ALTER TABLE, używając SHOW COLUMNS po każdym z nich, aby zobaczyć, jaki efekt ma każda z nich -
ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT FIRST;
ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT AFTER c;
Specyfikatory FIRST i AFTER działają tylko z klauzulą ADD. Oznacza to, że jeśli chcesz zmienić położenie istniejącej kolumny w tabeli, najpierw musisz ją UPUŚCIĆ, a następnie DODAĆ w nowej pozycji.
Zmiana definicji lub nazwy kolumny
Aby zmienić definicję kolumny, użyj MODIFY lub CHANGEklauzula wraz z poleceniem ALTER. Na przykład, aby zmienić kolumnęc od CHAR (1) do CHAR (10), zrób to -
mysql> ALTER TABLE tutorials_alter MODIFY c CHAR(10);
W przypadku CHANGE składnia jest nieco inna. Po słowie kluczowym CHANGE nadaj nazwę kolumnie, którą chcesz zmienić, a następnie określ nową definicję, która zawiera nową nazwę. Wypróbuj następujący przykład:
mysql> ALTER TABLE tutorials_alter CHANGE i j BIGINT;
Jeśli teraz użyjesz CHANGE, aby przekonwertować j z BIGINT z powrotem na INT bez zmiany nazwy kolumny, instrukcja będzie zgodna z oczekiwaniami -
mysql> ALTER TABLE tutorials_alter CHANGE j j INT;
Wpływ ALTER TABLE na atrybuty wartości Null i Default -
Podczas MODYFIKOWANIA lub ZMIENIANIA kolumny można również określić, czy kolumna może zawierać wartości NULL i jaka jest jej wartość domyślna. W rzeczywistości, jeśli tego nie zrobisz, MySQLi automatycznie przypisze wartości tym atrybutom.
Oto przykład, w którym kolumna NOT NULL będzie miała domyślnie wartość 100.
mysql> ALTER TABLE tutorials_alter
-> MODIFY j BIGINT NOT NULL DEFAULT 100;
Jeśli nie użyjesz powyższego polecenia, MySQLi wypełni wartości NULL we wszystkich kolumnach.
Zmiana wartości domyślnej kolumny
Możesz zmienić wartość domyślną dla dowolnej kolumny za pomocą polecenia ALTER. Wypróbuj następujący przykład.
mysql> ALTER TABLE tutorials_alter ALTER j SET DEFAULT 1000;
mysql> SHOW COLUMNS FROM tutorials_alter;
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| c | char(10) | YES | | NULL | |
| j | bigint(20) | NO | | 1000 | |
+-------+------------+------+-----+---------+-------+
2 rows in set (0.02 sec)
Możesz usunąć domyślne ograniczenie z dowolnej kolumny, używając klauzuli DROP wraz z poleceniem ALTER.
mysql> ALTER TABLE tutorials_alter ALTER j DROP DEFAULT;
mysql> SHOW COLUMNS FROM tutorials_alter;
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| c | char(10) | YES | | NULL | |
| j | bigint(20) | NO | | NULL | |
+-------+------------+------+-----+---------+-------+
2 rows in set (0.02 sec)
Zmiana typu tabeli
Możesz użyć typu tabeli przy użyciu TYPE klauzula wraz z poleceniem ALTER.
Aby sprawdzić bieżący typ tabeli, użyj instrukcji SHOW TABLE STATUS.
mysql> SHOW TABLE STATUS LIKE 'tutorials_alter'\G
*************************** 1. row ***************************
Name: tutorials_alter
Engine: InnoDB
Version: 10
Row_format: Compact
Rows: 0
Avg_row_length: 0
Data_length: 16384
Max_data_length: 0
Index_length: 0
Data_free: 0
Auto_increment: NULL
Create_time: 2017-02-17 11:30:29
Update_time: NULL
Check_time: NULL
Collation: latin1_swedish_ci
Checksum: NULL
Create_options:
Comment:
1 row in set (0.00 sec)
Zmiana nazwy tabeli
Aby zmienić nazwę tabeli, użyj RENAMEopcja instrukcji ALTER TABLE. Wypróbuj poniższy przykład, aby zmienić nazwę tutorials_alter na tutorials_bks.
mysql> ALTER TABLE tutorials_alter RENAME TO tutorials_bks;
Możesz użyć polecenia ALTER, aby utworzyć i upuścić INDEKS w pliku MySQL. Funkcję tę zobaczymy w następnym rozdziale.
Indeks bazy danych to struktura danych, która poprawia szybkość operacji w tabeli. Indeksy można tworzyć przy użyciu jednej lub wielu kolumn, co stanowi podstawę zarówno do szybkiego losowego wyszukiwania, jak i efektywnego porządkowania dostępu do rekordów.
Tworząc indeks, należy wziąć pod uwagę, jakie kolumny będą używane do tworzenia zapytań SQL i tworzenia co najmniej jednego indeksu na tych kolumnach.
Praktycznie indeksy są również rodzajem tabel, które przechowują klucz podstawowy lub pole indeksu i wskaźnik do każdego rekordu w rzeczywistej tabeli.
Użytkownicy nie widzą indeksów, służą one jedynie do przyspieszania zapytań i będą wykorzystywane przez wyszukiwarkę bazy danych do bardzo szybkiego lokalizowania rekordów.
Instrukcje INSERT i UPDATE zajmują więcej czasu w tabelach z indeksami, gdzie instrukcje SELECT stają się szybkie w tych tabelach. Powodem jest to, że podczas wstawiania lub aktualizacji baza danych musi również wstawiać lub aktualizować wartości indeksu.
Prosty i niepowtarzalny indeks
Możesz utworzyć unikalny indeks w tabeli. Unikalny indeks oznacza, że dwa wiersze nie mogą mieć tej samej wartości indeksu. Oto składnia tworzenia indeksu w tabeli.
CREATE UNIQUE INDEX index_name ON table_name ( column1, column2,...);
Do utworzenia indeksu można użyć jednej lub kilku kolumn. Na przykład możemy utworzyć indeks na tutorials_inf przy użyciu NAME_INDEX.
CREATE UNIQUE INDEX NAME_INDEX ON tutorials_inf(name);
Możesz utworzyć prosty indeks w tabeli. Po prostu pomiń słowo kluczowe UNIQUE w zapytaniu, aby utworzyć prosty indeks. Prosty indeks umożliwia zduplikowane wartości w tabeli.
Jeśli chcesz indeksować wartości w kolumnie w porządku malejącym, możesz dodać zarezerwowane słowo DESC po nazwie kolumny.
mysql> CREATE UNIQUE INDEX NAME_INDEX ON tutorials_inf (name DESC);
ALTER polecenie, aby dodać i upuścić INDEKS
Istnieją cztery typy instrukcji dodawania indeksów do tabeli -
ALTER TABLE tbl_name ADD PRIMARY KEY (column_list) - Ta instrukcja dodaje KLUCZ PODSTAWOWY, co oznacza, że indeksowane wartości muszą być unikalne i nie mogą mieć wartości NULL.
ALTER TABLE tbl_name ADD UNIQUE index_name (column_list) - Ta instrukcja tworzy indeks, dla którego wartości muszą być unikalne (z wyjątkiem wartości NULL, które mogą wystąpić wielokrotnie).
ALTER TABLE tbl_name ADD INDEX index_name (column_list) - To dodaje zwykły indeks, w którym dowolna wartość może pojawić się więcej niż raz.
ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list) - Tworzy specjalny indeks FULLTEXT, który jest używany do wyszukiwania tekstu.
Oto przykład dodawania indeksu w istniejącej tabeli.
mysql> ALTER TABLE tutorials_inf ADD INDEX (id);
Możesz usunąć dowolny INDEKS, używając klauzuli DROP wraz z poleceniem ALTER. Wypróbuj następujący przykład, aby usunąć powyższy indeks.
mysql> ALTER TABLE tutorials_inf DROP INDEX (c);
Możesz usunąć dowolny INDEKS, używając klauzuli DROP wraz z poleceniem ALTER. Wypróbuj następujący przykład, aby usunąć powyższy indeks.
ALTER Polecenie, aby dodać i upuścić KLUCZ PODSTAWOWY
Możesz również dodać klucz podstawowy w ten sam sposób. Ale upewnij się, że klucz podstawowy działa na kolumnach, które NIE mają wartości NULL.
Oto przykład dodawania klucza podstawowego w istniejącej tabeli. Spowoduje to, że najpierw kolumna NIE będzie NULL, a następnie dodamy ją jako klucz podstawowy.
mysql> ALTER TABLE tutorials_inf MODIFY id INT NOT NULL;
mysql> ALTER TABLE tutorials_inf ADD PRIMARY KEY (id);
Możesz użyć polecenia ALTER, aby usunąć klucz podstawowy w następujący sposób:
mysql> ALTER TABLE tutorials_inf DROP PRIMARY KEY;
Aby usunąć indeks, który nie jest KLUCZEM PODSTAWOWYM, należy określić nazwę indeksu.
Wyświetlanie informacji INDEKSU
Możesz użyć polecenia SHOW INDEX, aby wyświetlić listę wszystkich indeksów skojarzonych z tabelą. Wyjście w formacie pionowym (określone przez \ G) często jest przydatne w przypadku tej instrukcji, aby uniknąć zawijania długich linii -
Wypróbuj następujący przykład
mysql> SHOW INDEX FROM table_name\G
........
Tabele tymczasowe mogą być bardzo przydatne w niektórych przypadkach do przechowywania danych tymczasowych. Najważniejszą rzeczą, o której należy wiedzieć w przypadku tabel tymczasowych, jest to, że zostaną one usunięte po zakończeniu bieżącej sesji klienta.
Jak wspomniano wcześniej, tymczasowe tabele będą działać tylko tak długo, jak długo trwa sesja. Jeśli uruchomisz kod w skrypcie PHP, tabela tymczasowa zostanie automatycznie zniszczona po zakończeniu wykonywania skryptu. Jeśli jesteś połączony z serwerem bazy danych MySQL za pośrednictwem programu klienta MySQLi, tabela tymczasowa będzie istnieć do momentu zamknięcia klienta lub ręcznego zniszczenia tabeli.
Przykład
Oto przykład pokazujący użycie tabeli tymczasowej. Ten sam kod może być używany w skryptach PHP przy użyciumysqli_query() funkcjonować.
mysql> CREATE TEMPORARY TABLE SalesSummary (
-> product_name VARCHAR(50) NOT NULL
-> , total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00
-> , avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00
-> , total_units_sold INT UNSIGNED NOT NULL DEFAULT 0
-> );
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO SalesSummary
-> (product_name, total_sales, avg_unit_price, total_units_sold)
-> VALUES
-> ('cucumber', 100.25, 90, 2);
mysql> SELECT * FROM SalesSummary;
+--------------+-------------+----------------+------------------+
| product_name | total_sales | avg_unit_price | total_units_sold |
+--------------+-------------+----------------+------------------+
| cucumber | 100.25 | 90.00 | 2 |
+--------------+-------------+----------------+------------------+
1 row in set (0.00 sec)
Kiedy wydasz polecenie SHOW TABLES, twoja tymczasowa tabela nie pojawi się na liście. Jeśli teraz wylogujesz się z sesji MySQLi, a następnie wydasz polecenie SELECT, to w bazie danych nie znajdziesz żadnych danych. Nawet twój tymczasowy stół też by nie istniał.
Upuszczanie tabel tymczasowych
Domyślnie wszystkie tabele tymczasowe są usuwane przez MySQLi po zerwaniu połączenia z bazą danych. Jeśli jednak chcesz je usunąć w międzyczasie, zrób to, wydając polecenie DROP TABLE.
Poniżej znajduje się przykład usuwania tabeli tymczasowej -
mysql> DROP TABLE SalesSummary;
mysql> SELECT * FROM SalesSummary;
ERROR 1146: Table 'TUTORIALS.SalesSummary' doesn't exist
Może zaistnieć sytuacja, w której potrzebujesz dokładnej kopii tabeli, a funkcja CREATE TABLE ... SELECT nie odpowiada Twoim celom, ponieważ kopia musi zawierać te same indeksy, wartości domyślne i tak dalej.
Możesz poradzić sobie z tą sytuacją, wykonując następujące czynności -
Użyj polecenia SHOW CREATE TABLE, aby uzyskać instrukcję CREATE TABLE, która określa strukturę tabeli źródłowej, indeksy i wszystko.
Zmodyfikuj instrukcję, aby zmienić nazwę tabeli na nazwę tabeli klonowania i wykonaj instrukcję. W ten sposób będziesz mieć dokładną tabelę klonów.
Opcjonalnie, jeśli chcesz również skopiować zawartość tabeli, wydaj również instrukcję INSERT INTO ... SELECT.
Przykład
Wypróbuj następujący przykład, aby utworzyć tabelę klonów dla tutorials_inf.
Krok 1
Uzyskaj pełną strukturę dotyczącą tabeli.
mysql> SHOW CREATE TABLE tutorials_inf \G;
*************************** 1. row ***************************
Table: tutorials_inf
Create Table: CREATE TABLE `tutorials_inf` (
`id` int(11) NOT NULL,
`name` varchar(20) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `AUTHOR_INDEX` (`name`),
UNIQUE KEY `NAME_INDEX` (`name`),
KEY `id` (`id`)
) ENGINE = InnoDB DEFAULT CHARSET = latin1
1 row in set (0.05 sec)
ERROR: No query specified
Krok 2
Zmień nazwę tej tabeli i utwórz kolejną.
mysql> CREATE TABLE tutorials_clone(
-> id int(11) NOT NULL,
-> name varchar(20) NOT NULL,
-> PRIMARY KEY (id),
> UNIQUE KEY AUTHOR_INDEX (name),
-> UNIQUE KEY NAME_INDEX (name),
-> KEY id (id));
Query OK, 0 rows affected (1.80 sec)
Krok 3
Po wykonaniu kroku 2 utworzysz tabelę klonów w swojej bazie danych. Jeśli chcesz skopiować dane ze starej tabeli, możesz to zrobić za pomocą instrukcji INSERT INTO ... SELECT.
mysql> INSERT INTO tutorials_clone(id,name) SELECT id,name from tutorials_inf;
Query OK, 4 rows affected (0.19 sec)
Records: 4 Duplicates: 0 Warnings: 0
Wreszcie będziesz mieć dokładną tabelę klonów, jaką chciałeś mieć.
Są trzy informacje, które chciałbyś otrzymać z MySQLi.
Information about the result of queries - Obejmuje to liczbę rekordów, na które ma wpływ dowolna instrukcja SELECT, UPDATE lub DELETE.
Information about tables and databases - Obejmuje to informacje dotyczące struktury tabel i baz danych.
Information about the MySQLi server - Obejmuje to aktualny stan serwera bazy danych, numer wersji itp.
Uzyskanie wszystkich tych informacji w zachęcie mysqli jest bardzo łatwe, ale podczas korzystania z interfejsów API PERL lub PHP musimy jawnie wywołać różne interfejsy API, aby uzyskać wszystkie te informacje. Poniższa sekcja pokaże, jak uzyskać te informacje.
Uzyskanie liczby wierszy, na które ma wpływ zapytanie
Przykład PERL
W skryptach DBI liczba wierszy, których to dotyczy, jest zwracana przez metodę do () lub execute (), w zależności od sposobu wykonania zapytania -
# Method 1
# execute $query using do( ) my $count = $dbh->do ($query);
# report 0 rows if an error occurred
printf "%d rows were affected\n", (defined ($count) ? $count : 0);
# Method 2
# execute query using prepare( ) plus execute( )
my $sth = $dbh->prepare ($query); my $count = $sth->execute ( ); printf "%d rows were affected\n", (defined ($count) ? $count : 0);
Przykład PHP
W PHP wywołaj funkcję mysqli_affected_rows (), aby dowiedzieć się, ile wierszy zostało zmienionych w zapytaniu -
$result_id = mysqli_query ($query, $conn_id);
# report 0 rows if the query failed
$count = ($result_id ? mysqli_affected_rows ($conn_id) : 0); print ("$count rows were affected\n");
Tabele list i bazy danych
Bardzo łatwo jest wyświetlić listę wszystkich baz danych i tabel dostępnych na serwerze bazy danych. Twój wynik może być zerowy, jeśli nie masz wystarczających uprawnień.
Oprócz metody, którą wymieniłem poniżej, możesz użyć zapytań SHOW TABLES lub SHOW DATABASES, aby uzyskać listę tabel lub baz danych w PHP lub PERL.
Przykład PERL
# Get all the tables available in current database.
my @tables = $dbh->tables ( ); foreach $table (@tables ){
print "Table Name $table\n";
}
Przykład PHP
<?php
$servername = "localhost:3306";
$username = "root"; $password = "";
$dbname = "TUTORIALS"; $conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error);
}
echo"Database connected";
$sql="SHOW DATABASES"; if (!($result = mysqli_query($conn,$sql))) {
printf("Error: %s\n", mysqli_error($conn)); } while( $row = mysqli_fetch_row( $result ) ){ if (($row[0]!="information_schema") && ($row[0]!="mysql")) { echo $row[0]."\r\n";
}
}
$conn->close();
?>
Pobieranie metadanych serwera
W MySQL znajdują się następujące polecenia, które można wykonać w zachęcie mysql lub przy użyciu dowolnego skryptu, takiego jak PHP, aby uzyskać różne ważne informacje o serwerze bazy danych.
Sr.No. | Polecenie i opis |
---|---|
1 | SELECT VERSION( ) Ciąg wersji serwera |
2 | SELECT DATABASE( ) Nazwa aktualnej bazy danych (pusta, jeśli brak) |
3 | SELECT USER( ) Aktualna nazwa użytkownika |
4 | SHOW STATUS Wskaźniki stanu serwera |
5 | SHOW VARIABLES Zmienne konfiguracyjne serwera |
Sekwencja to zbiór liczb całkowitych 1, 2, 3, ..., które są generowane w kolejności na żądanie. Sekwencje są często używane w bazach danych, ponieważ wiele aplikacji wymaga, aby każdy wiersz w tabeli zawierał unikatową wartość, a sekwencje zapewniają łatwy sposób ich generowania. W tym rozdziale opisano, jak używać sekwencji w MySQLi.
Używam kolumny AUTO_INCREMENT
Najprostszym sposobem użycia Sequences w MySQLi jest zdefiniowanie kolumny jako AUTO_INCREMENT i pozostawienie pozostałych rzeczy MySQLi.
Przykład
Wypróbuj następujący przykład. Spowoduje to utworzenie tabeli, a następnie wstawi kilka wierszy w tej tabeli, w których nie jest wymagane podawanie identyfikatora rekordu, ponieważ jest on automatycznie zwiększany przez MySQLi.
mysql>CREATE TABLE tutorials_auto(
id INT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(30) NOT NULL,PRIMARY KEY(id));
Query OK, 0 rows affected (0.28 sec)
mysql>INSERT INTO tutorials_auto(id,name) VALUES(NULL,'sai'),(NULL,'ram');
Query OK, 2 rows affected (0.12 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM insect ORDER BY id;
+----+------+
| id | name |
+----+------+
| 1 | sai |
| 2 | ram |
+----+------+
2 rows in set (0.05 sec)
Uzyskaj wartości AUTO_INCREMENT
LAST_INSERT_ID () jest funkcją SQL, więc można jej używać z poziomu dowolnego klienta, który rozumie, jak wydawać instrukcje SQL. W przeciwnym razie skrypty PERL i PHP zapewniają ekskluzywne funkcje do pobierania automatycznie zwiększonej wartości ostatniego rekordu.
Przykład PERL
Użyj atrybutu mysql_insertid, aby uzyskać wartość AUTO_INCREMENT wygenerowaną przez zapytanie. Dostęp do tego atrybutu uzyskuje się za pośrednictwem uchwytu bazy danych lub uchwytu instrukcji, w zależności od sposobu wysłania zapytania. Poniższy przykład odwołuje się do niego za pośrednictwem uchwytu bazy danych:
$dbh->do ("INSERT INTO tutorials_auto (name,date,origin)
VALUES('moth','2001-09-14','windowsill')");
my $seq = $dbh->{mysqli_insertid};
Przykład PHP
Po wysłaniu zapytania, które generuje wartość AUTO_INCREMENT, pobierz wartość, wywołując mysql_insert_id () -
mysql_query ("INSERT INTO tutorials_auto (name,date,origin)
VALUES('moth','2001-09-14','windowsill')", $conn_id); $seq = mysqli_insert_id ($conn_id);
Renumeracja istniejącej sekwencji
Może się zdarzyć, że usunąłeś wiele rekordów z tabeli i chcesz zmienić kolejność wszystkich rekordów. Można to zrobić za pomocą prostej sztuczki, ale powinieneś być bardzo ostrożny, jeśli twój stół ma połączenia z innym stołem.
Jeśli stwierdzisz, że ponowne sekwencjonowanie kolumny AUTO_INCREMENT jest nieuniknione, sposobem na to jest usunięcie kolumny z tabeli, a następnie dodanie jej ponownie. Poniższy przykład pokazuje, jak przenumerować wartości identyfikatorów w tabeli owadów za pomocą tej techniki -
mysql> ALTER TABLE tutorials_auto DROP id;
mysql> ALTER TABLE tutorials_auto
-> ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST,
-> ADD PRIMARY KEY (id);
Rozpoczynanie sekwencji o określonej wartości
Domyślnie MySQLi rozpocznie sekwencję od 1, ale możesz podać również dowolną inną liczbę podczas tworzenia tabeli. Poniżej znajduje się przykład, w którym MySQLi rozpocznie sekwencję od 100.
mysql> CREATE TABLE tutorials_auto
-> (
-> id INT UNSIGNED NOT NULL AUTO_INCREMENT = 100,
-> PRIMARY KEY (id),
-> name VARCHAR(30) NOT NULL,
-> );
Alternatywnie możesz utworzyć tabelę, a następnie ustawić początkową wartość sekwencji za pomocą ALTER TABLE.
mysql> ALTER TABLE tutorials_auto AUTO_INCREMENT = 100;
Tabele lub zestawy wyników czasami zawierają zduplikowane rekordy. Czasami jest to dozwolone, ale czasami wymagane jest zatrzymanie zduplikowanych rekordów. Czasami wymagane jest zidentyfikowanie zduplikowanych rekordów i usunięcie ich z tabeli. W tym rozdziale opisano, jak zapobiec występowaniu zduplikowanych rekordów w tabeli i jak usunąć już istniejące zduplikowane rekordy.
Zapobieganie występowaniu duplikatów w tabeli
Możesz użyć PRIMARY KEY lub UNIQUEIndeksuj w tabeli z odpowiednimi polami, aby zatrzymać zduplikowane rekordy. Weźmy jeden przykład: Poniższa tabela nie zawiera takiego indeksu ani klucza podstawowego, więc pozwoliłaby na zduplikowane rekordy dla first_name i last_name.
CREATE TABLE person_tbl (
first_name CHAR(20),
last_name CHAR(20),
sex CHAR(10)
);
Aby zapobiec tworzeniu wielu rekordów z tymi samymi wartościami imienia i nazwiska w tej tabeli, dodaj KLUCZ PODSTAWOWY do jego definicji. Kiedy to zrobisz, konieczne jest również zadeklarowanie indeksowanych kolumn jako NIE NULL, ponieważ PRIMARY KEY nie zezwala na wartości NULL -
CREATE TABLE person_tbl (
first_name CHAR(20) NOT NULL,
last_name CHAR(20) NOT NULL,
sex CHAR(10),
PRIMARY KEY (last_name, first_name)
);
Obecność unikatowego indeksu w tabeli zwykle powoduje wystąpienie błędu, jeśli wstawisz do tabeli rekord, który powiela istniejący rekord w kolumnie lub kolumnach definiujących indeks.
Posługiwać się INSERT IGNORE zamiast INSERT. Jeśli rekord nie powiela istniejącego rekordu, MySQLi wstawia go jak zwykle. Jeśli rekord jest duplikatem, słowo kluczowe IGNORE nakazuje MySQLi odrzucenie go po cichu bez generowania błędu.
Poniższy przykład nie zawiera błędów i jednocześnie nie wstawia zduplikowanych rekordów.
mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
-> VALUES( 'Jay', 'Thomas');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
-> VALUES( 'Jay', 'Thomas');
Query OK, 0 rows affected (0.00 sec)
Posługiwać się REPLACEzamiast WSTAWIĆ. Jeśli rekord jest nowy, jest wstawiany tak samo, jak w przypadku polecenia INSERT. Jeśli jest to duplikat, nowy rekord zastępuje stary -
mysql> REPLACE INTO person_tbl (last_name, first_name)
-> VALUES( 'Ajay', 'Kumar');
Query OK, 1 row affected (0.00 sec)
mysql> REPLACE INTO person_tbl (last_name, first_name)
-> VALUES( 'Ajay', 'Kumar');
Query OK, 2 rows affected (0.00 sec)
INSERT IGNORE i REPLACE powinny być wybrane zgodnie z zachowaniem obsługi duplikatów, które chcesz wywołać. INSERT IGNORE przechowuje pierwszy z zestawu zduplikowanych rekordów, a resztę odrzuca. REPLACE zachowuje ostatni z zestawu duplikatów i usuwa wszystkie wcześniejsze.
Innym sposobem wymuszenia unikalności jest dodanie do tabeli indeksu UNIQUE zamiast klucza PRIMARY KEY.
CREATE TABLE person_tbl (
first_name CHAR(20) NOT NULL,
last_name CHAR(20) NOT NULL,
sex CHAR(10)
UNIQUE (last_name, first_name)
);
Liczenie i identyfikacja duplikatów
Poniżej znajduje się kwerenda licząca zduplikowane rekordy z first_name i last_name w tabeli.
mysql> SELECT COUNT(*) as repetitions, last_name, first_name
-> FROM person_tbl
-> GROUP BY last_name, first_name
-> HAVING repetitions > 1;
To zapytanie zwróci listę wszystkich zduplikowanych rekordów w tabeli person_tbl. Ogólnie, aby zidentyfikować zduplikowane zestawy wartości, wykonaj następujące czynności -
Określ, które kolumny zawierają wartości, które mogą zostać zduplikowane.
Wymień te kolumny na liście wyboru kolumn, wraz z COUNT (*).
Wymień również kolumny w klauzuli GROUP BY.
Dodaj klauzulę HAVING, która eliminuje unikatowe wartości, wymagając, aby liczba grup była większa niż jeden.
Eliminowanie duplikatów z wyniku zapytania:
Możesz użyć DISTINCT wraz z instrukcją SELECT, aby znaleźć unikalne rekordy dostępne w tabeli.
mysql> SELECT DISTINCT last_name, first_name
-> FROM person_tbl
-> ORDER BY last_name;
Alternatywą dla DISTINCT jest dodanie klauzuli GROUP BY, która nazywa wybrane kolumny. Skutkuje to usunięciem duplikatów i wybraniem tylko unikalnych kombinacji wartości w określonych kolumnach -
mysql> SELECT last_name, first_name
-> FROM person_tbl
-> GROUP BY (last_name, first_name);
Usuwanie duplikatów za pomocą wymiany tabeli
Jeśli masz zduplikowane rekordy w tabeli i chcesz usunąć wszystkie zduplikowane rekordy z tej tabeli, oto procedura -
mysql> CREATE TABLE tmp SELECT last_name, first_name, sex
-> FROM person_tbl;
-> GROUP BY (last_name, first_name);
mysql> DROP TABLE person_tbl;
mysql> ALTER TABLE tmp RENAME TO person_tbl;
Prostym sposobem na usunięcie zduplikowanych rekordów z tabeli jest dodanie do tej tabeli INDEKSU lub KLUCZA PRIMAY. Nawet jeśli ta tabela jest już dostępna, możesz użyć tej techniki do usunięcia zduplikowanych rekordów i będziesz bezpieczny również w przyszłości.
mysql> ALTER IGNORE TABLE person_tbl
-> ADD PRIMARY KEY (last_name, first_name);