Dalam artikel ini kami akan menunjukkan cara membuat database (juga dikenal sebagai skema), tabel (dengan tipe data), dan menjelaskan cara melakukan Bahasa Manipulasi Data (DML ) operasi dengan data di MySQL / MariaDB server.
Diasumsikan bahwa Anda sebelumnya telah 1) menginstal paket yang diperlukan pada sistem Linux Anda, dan 2) dieksekusi mysql_secure_installation untuk meningkatkan keamanan server database. Jika tidak, ikuti panduan di bawah ini untuk menginstal server MySQL/MariaDB.
- Instal Database MySQL Terbaru di Sistem Linux
- Instal Database MariaDB Terbaru di Sistem Linux
Untuk singkatnya, kami akan merujuk ke MariaDB secara eksklusif di seluruh artikel ini, tetapi konsep dan perintah yang diuraikan di sini berlaku untuk MySQL juga.
Bagian 1 :Pelajari MySQL / MariaDB untuk Pemula Bagian 2 :Pelajari Cara Menggunakan Beberapa Fungsi MySQL dan MariaDBMembuat Database, Tabel, dan Pengguna yang Diotorisasi
Seperti yang Anda ketahui, database dapat didefinisikan secara sederhana sebagai kumpulan informasi yang terorganisir. Khususnya, MariaDB adalah sistem manajemen basis data relasional (RDBMS ) dan menggunakan Structure Query Language untuk melakukan operasi pada database. Selain itu, perlu diingat bahwa MariaDB menggunakan istilah database dan skema secara bergantian.
Untuk menyimpan informasi persisten dalam database, kami akan menggunakan tabel yang menyimpan baris data. Seringkali, dua atau lebih tabel akan terkait satu sama lain dalam beberapa cara. Itu adalah bagian dari organisasi yang mencirikan penggunaan database relasional.
Membuat Basis Data Baru
Untuk membuat database baru bernama BooksDB
, masukkan prompt MariaDB dengan perintah berikut (Anda akan diminta memasukkan kata sandi untuk pengguna root MariaDB):
[[email protected] ~]# mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 2 Server version: 10.1.14-MariaDB MariaDB Server Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> CREATE DATABASE BookstoreDB; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]>
Setelah database dibuat, kita perlu membuat setidaknya dua tabel di atasnya. Tapi pertama-tama mari kita jelajahi konsep tipe data.
Memperkenalkan Jenis data MariaDB
Seperti yang kami jelaskan sebelumnya, tabel adalah objek basis data tempat kami akan menyimpan informasi persisten. Setiap tabel terdiri dari dua atau lebih bidang (juga dikenal sebagai kolom ) dari tipe data tertentu (tipe informasi) yang dapat disimpan oleh bidang tersebut.
Jenis data yang paling umum di MariaDB adalah sebagai berikut (Anda dapat melihat daftar lengkapnya di dokumentasi online resmi MariaDB):
Numerik:
- BOOLEAN menganggap 0 sebagai salah dan nilai lainnya sebagai benar.
- TINYINT , jika digunakan dengan SIGNED, mencakup rentang dari -128 hingga 127, sedangkan rentang UNSIGNED adalah 0 hingga 255.
- KECIL , jika digunakan dengan SIGNED, mencakup rentang dari -32768 hingga 32767. Rentang UNSIGNED adalah 0 hingga 65535.
- INT , jika digunakan dengan UNSIGNED, mencakup rentang dari 0 hingga 4294967295, dan -2147483648 hingga 2147483647 jika tidak.
Catatan :Di TINYINT, SMALLINT, dan INT, default SIGNED diasumsikan.
GANDA(M, D) , di mana M adalah jumlah total digit dan D adalah jumlah digit setelah titik desimal, mewakili angka titik-mengambang presisi ganda. Jika UNSIGNED ditentukan, nilai negatif tidak diperbolehkan.
Tali:
- VARCHAR(L) mewakili string dengan panjang variabel di mana M adalah panjang kolom maksimum yang diizinkan dalam byte (65.535 dalam teori). Dalam kebanyakan kasus, jumlah byte identik dengan jumlah karakter, kecuali untuk beberapa karakter yang dapat memakan waktu hingga 3 byte. Misalnya, huruf Spanyol mewakili satu karakter tetapi membutuhkan 2 byte.
- TEXT(L) mewakili kolom dengan panjang maksimum 65.535 karakter. Namun, seperti yang terjadi dengan VARCHAR(M) , panjang maksimum sebenarnya berkurang jika karakter multi-byte disimpan. Jika L ditentukan, kolom dibuat sebagai tipe terkecil yang dapat menyimpan jumlah karakter tersebut.
- MEDIUMTEXT(L) dan LONGTEXT(M) mirip dengan TEXT(M) , hanya saja panjang maksimum yang diizinkan masing-masing adalah 16.777.215 dan 4.294.967.295 karakter.
Tanggal dan Waktu:
- TANGGAL mewakili tanggal dalam YYYY-MM-DD formatnya.
- WAKTU mewakili waktu dalam HH:MM:SS.sss format (jam, menit, detik, dan milidetik).
- DATETIME adalah kombinasi dari TANGGAL dan WAKTU di YYYY-MM-DD HH:MM:SS formatnya.
- TIMESTAMP digunakan untuk menentukan saat baris ditambahkan atau diperbarui.
Setelah meninjau tipe data ini, Anda akan berada dalam posisi yang lebih baik untuk menentukan tipe data mana yang perlu Anda tetapkan ke kolom tertentu dalam tabel.
Misalnya, nama seseorang dapat dengan mudah dimasukkan ke dalam VARCHAR(50) , sedangkan entri blog memerlukan TEXT jenis (pilih M sesuai kebutuhan spesifik Anda).
Membuat Tabel dengan Kunci Utama dan Asing
Sebelum kita masuk ke dalam membuat tabel, ada dua konsep dasar tentang database relasional yang perlu kita tinjau:utama dan asing kunci.
Kunci utama berisi nilai yang secara unik mengidentifikasi setiap baris, atau catatan, dalam tabel. Di sisi lain, kunci asing digunakan untuk membuat tautan antara data dalam dua tabel, dan untuk mengontrol data yang dapat disimpan dalam tabel tempat kunci asing berada. Kunci utama dan kunci asing umumnya INT.
Sebagai ilustrasi, mari gunakan BookstoreDB
dan buat dua tabel bernama AuthorsTBL
dan BooksTBL
sebagai berikut. BUKAN NULL batasan menunjukkan bahwa bidang terkait memerlukan nilai selain NULL .
Juga, AUTO_INCREMENT digunakan untuk menambah satu nilai INT kolom kunci utama saat record baru dimasukkan ke dalam tabel.
MariaDB [(none)]> USE BookstoreDB; MariaDB [(none)]> CREATE TABLE AuthorsTBL ( AuthorID INT NOT NULL AUTO_INCREMENT, AuthorName VARCHAR(100), PRIMARY KEY(AuthorID) ); MariaDB [(none)]> CREATE TABLE BooksTBL ( BookID INT NOT NULL AUTO_INCREMENT, BookName VARCHAR(100) NOT NULL, AuthorID INT NOT NULL, BookPrice DECIMAL(6,2) NOT NULL, BookLastUpdated TIMESTAMP, BookIsAvailable BOOLEAN, PRIMARY KEY(BookID), FOREIGN KEY (AuthorID) REFERENCES AuthorsTBL(AuthorID) );Buat Tabel MySQL dengan Kunci Utama dan Asing
MariaDB [(none)]> USE BookstoreDB; Database changed MariaDB [BookstoreDB]> CREATE TABLE AuthorsTBL ( -> AuthorID INT NOT NULL AUTO_INCREMENT, -> AuthorName VARCHAR(100), -> PRIMARY KEY(AuthorID) -> ); Query OK, 0 rows affected (0.05 sec) MariaDB [BookstoreDB]> CREATE TABLE BooksTBL ( -> BookID INT NOT NULL AUTO_INCREMENT, -> BookName VARCHAR(100) NOT NULL, -> AuthorID INT NOT NULL, -> BookPrice DECIMAL(6,2) NOT NULL, -> BookLastUpdated TIMESTAMP, -> BookIsAvailable BOOLEAN, -> PRIMARY KEY(BookID), -> FOREIGN KEY (AuthorID) REFERENCES AuthorsTBL(AuthorID) -> ); Query OK, 0 rows affected (0.05 sec) MariaDB [BookstoreDB]>
Sekarang kita dapat melanjutkan dan mulai memasukkan catatan ke dalam AuthorsTBL
dan BooksTBL
.
Memilih, Menyisipkan, Memperbarui, dan Menghapus Baris
Pertama-tama kita akan mengisi AuthorsTBL
meja. Mengapa? Karena kita perlu memiliki nilai untuk AuthorID
sebelum memasukkan catatan ke BooksTBL .
Jalankan kueri berikut dari perintah MariaDB Anda:
MariaDB [BookstoreDB]> INSERT INTO AuthorsTBL (AuthorName) VALUES ('Agatha Christie'), ('Stephen King'), ('Paulo Coelho');
Setelah itu, kami akan memilih semua catatan dari AuthorsTBL . Ingat kita akan membutuhkan AuthorID untuk setiap record untuk membuat INSERT kueri untuk BukuTBL .
Jika Anda ingin mengambil satu catatan pada satu waktu, Anda dapat menggunakan WHERE klausa untuk menunjukkan kondisi yang harus dipenuhi oleh baris untuk dikembalikan. Misalnya,
MariaDB [BookstoreDB]> SELECT * FROM AuthorsTBL WHERE AuthorName='Agatha Christie';
Atau, Anda dapat memilih semua catatan secara bersamaan:
MariaDB [BookstoreDB]> SELECT * FROM AuthorsTBL;Pilih dan Query Record di MySQL
MariaDB [BookstoreDB]> SELECT * FROM AuthorsTBL WHERE AuthorName='Agatha Christie'; +----------+-----------------+ | AuthorID | AuthorName | +----------+-----------------+ | 1 | Agatha Christie | +----------+-----------------+ 1 row in set (0.00 sec) MariaDB [BookstoreDB]> SELECT * FROM AuthorsTBL; +----------+-----------------+ | AuthorID | AuthorName | +----------+-----------------+ | 1 | Agatha Christie | | 2 | Stephen King | | 3 | Paulo Coelho | +----------+-----------------+ 3 rows in set (0.00 sec) MariaDB [BookstoreDB]>
Sekarang mari kita buat INSERT kueri untuk BukuTBL , menggunakan AuthorID . yang sesuai untuk mencocokkan penulis setiap buku. Nilai 1 di BookIsAvailable menunjukkan buku tersedia, 0 sebaliknya:
MariaDB [BookstoreDB]> INSERT INTO BooksTBL (BookName, AuthorID, BookPrice, BookIsAvailable) VALUES ('And Then There Were None', 1, 14.95, 1), ('The Man in the Brown Suit', 1, 23.99, 1), ('The Stand', 2, 35.99, 1), ('Pet Sematary', 2, 17.95, 0), ('The Green Mile', 2, 29.99, 1), ('The Alchemist', 3, 25, 1), ('By the River Piedra I Sat Down and Wept', 3, 18.95, 0);Sisipkan Query di Tabel MySQL
MariaDB [BookstoreDB]> INSERT INTO BooksTBL (BookName, AuthorID, BookPrice, BookIsAvailable) -> VALUES ('And Then There Were None', 1, 14.95, 1), -> ('The Man in the Brown Suit', 1, 23.99, 1), -> ('The Stand', 2, 35.99, 1), -> ('Pet Sematary', 2, 17.95, 0), -> ('The Green Mile', 2, 29.99, 1), -> ('The Alchemist', 3, 25, 1), -> ('By the River Piedra I Sat Down and Wept', 3, 18.95, 0); Query OK, 7 rows affected (0.03 sec) Records: 7 Duplicates: 0 Warnings: 0
Pada titik ini kita akan melakukan PILIH untuk melihat catatan di BooksTBL . Mari kita PERBARUI harga “Sang Alkemis ” oleh Paulo Coelho dan PILIH catatan khusus itu lagi.
Perhatikan bagaimana BookLastUpdated bidang sekarang menunjukkan nilai yang berbeda. Seperti yang kami jelaskan sebelumnya, TIMESTAMP bidang menunjukkan nilai saat catatan dimasukkan atau terakhir diubah.
MariaDB [BookstoreDB]> SELECT * FROM BooksTBL; MariaDB [BookstoreDB]> UPDATE BooksTBL SET BookPrice=22.75 WHERE BookID=6; MariaDB [BookstoreDB]> SELECT * FROM BooksTBL WHERE BookID=6;Sisipkan Tabel Kueri dan perbarui di Database MySQL
MariaDB [BookstoreDB]> SELECT * FROM BooksTBL; +--------+-----------------------------------------+----------+-----------+---------------------+-----------------+ | BookID | BookName | AuthorID | BookPrice | BookLastUpdated | BookIsAvailable | +--------+-----------------------------------------+----------+-----------+---------------------+-----------------+ | 1 | And Then There Were None | 1 | 14.95 | 2016-10-01 23:31:41 | 1 | | 2 | The Man in the Brown Suit | 1 | 23.99 | 2016-10-01 23:31:41 | 1 | | 3 | The Stand | 2 | 35.99 | 2016-10-01 23:31:41 | 1 | | 4 | Pet Sematary | 2 | 17.95 | 2016-10-01 23:31:41 | 0 | | 5 | The Green Mile | 2 | 29.99 | 2016-10-01 23:31:41 | 1 | | 6 | The Alchemist | 3 | 25.00 | 2016-10-01 23:31:41 | 1 | | 7 | By the River Piedra I Sat Down and Wept | 3 | 18.95 | 2016-10-01 23:31:41 | 0 | +--------+-----------------------------------------+----------+-----------+---------------------+-----------------+ 7 rows in set (0.00 sec) MariaDB [BookstoreDB]> UPDATE BooksTBL SET BookPrice=22.75 WHERE BookID=6; Query OK, 1 row affected (0.04 sec) Rows matched: 1 Changed: 1 Warnings: 0 MariaDB [BookstoreDB]> SELECT * FROM BooksTBL WHERE BookID=6; +--------+---------------+----------+-----------+---------------------+-----------------+ | BookID | BookName | AuthorID | BookPrice | BookLastUpdated | BookIsAvailable | +--------+---------------+----------+-----------+---------------------+-----------------+ | 6 | The Alchemist | 3 | 22.75 | 2016-10-01 23:35:00 | 1 | +--------+---------------+----------+-----------+---------------------+-----------------+ 1 row in set (0.00 sec) MariaDB [BookstoreDB]>
Meskipun kami tidak akan melakukannya di sini, Anda juga dapat menghapus catatan jika tidak digunakan lagi. Misalnya, kita ingin menghapus “The Alchemist ” dari BukuTBL .
Untuk melakukannya, kami akan menggunakan HAPUS pernyataan sebagai berikut:
MariaDB [BookstoreDB]> DELETE FROM BooksTBL WHERE BookID=6;
Seperti dalam kasus PERBARUI , sebaiknya lakukan PILIH terlebih dahulu untuk melihat catatan yang berpotensi terpengaruh oleh HAPUS .
Juga, jangan lupa untuk menambahkan WHERE klausa dan kondisi (BookID=6) untuk memilih record tertentu yang akan dihapus. Jika tidak, Anda berisiko menghapus semua baris dalam tabel!
Jika Anda ingin menggabungkan dua (atau lebih) bidang, Anda dapat menggunakan CONCAT penyataan. Misalnya, kita ingin mengembalikan kumpulan hasil yang terdiri dari satu bidang dengan nama buku dan penulis dalam bentuk “The Alchemist (Paulo Coelho) ” dan kolom lain dengan harga.
Ini akan membutuhkan JOIN antara PenulisTBL dan BukuTBL di bidang umum yang dibagikan oleh kedua tabel (AuthorID ):
MariaDB [BookstoreDB]> SELECT CONCAT(BooksTBL.BookName, ' (', AuthorsTBL.AuthorName, ')') AS Description, BooksTBL.BookPrice FROM AuthorsTBL JOIN BooksTBL ON AuthorsTBL.AuthorID = BooksTBL.AuthorID;
Seperti yang bisa kita lihat, CONCAT memungkinkan kita untuk menggabungkan beberapa ekspresi string yang dipisahkan oleh koma. Anda juga akan melihat bahwa kami memilih alias Deskripsi untuk mewakili rangkaian hasil rangkaian.
Output dari query di atas ditunjukkan pada gambar di bawah ini:
Kueri Beberapa Bidang di Tabel MySQLMariaDB [BookstoreDB]> SELECT CONCAT(BooksTBL.BookName, ' (', AuthorsTBL.AuthorName, ')') AS Description, BooksTBL.BookPrice FROM AuthorsTBL JOIN BooksTBL ON AuthorsTBL.AuthorID = BooksTBL.AuthorID; +--------------------------------------------------------+-----------+ | Description | BookPrice | +--------------------------------------------------------+-----------+ | And Then There Were None (Agatha Christie) | 14.95 | | The Man in the Brown Suit (Agatha Christie) | 23.99 | | The Stand (Stephen King) | 35.99 | | Pet Sematary (Stephen King) | 17.95 | | The Green Mile (Stephen King) | 29.99 | | The Alchemist (Paulo Coelho) | 25.00 | | By the River Piedra I Sat Down and Wept (Paulo Coelho) | 18.95 | +--------------------------------------------------------+-----------+ 7 rows in set (0.00 sec)
Buat Pengguna untuk Mengakses Database BookstoreDB
Menggunakan root untuk melakukan semua DML operasi dalam database adalah ide yang buruk. Untuk menghindari hal ini, kita dapat membuat MariaDB . baru akun pengguna (kami akan menamakannya pengguna toko buku ) dan tetapkan semua izin yang diperlukan untuk BookstoreDB :
MariaDB [BookstoreDB]> CREATE USER [email protected] IDENTIFIED BY 'YourPasswordHere'; MariaDB [BookstoreDB]> GRANT ALL PRIVILEGES ON BookstoreDB.* to [email protected]; MariaDB [BookstoreDB]> FLUSH PRIVILEGES;Buat Pengguna Basis Data Baru dengan Hak Istimewa
MariaDB [BookstoreDB]> CREATE USER [email protected] IDENTIFIED BY 'tecmint'; Query OK, 0 rows affected (0.00 sec) MariaDB [BookstoreDB]> GRANT ALL PRIVILEGES ON BookstoreDB.* to [email protected]; Query OK, 0 rows affected (0.00 sec) MariaDB [BookstoreDB]> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec)
Memiliki pengguna khusus yang terpisah untuk setiap database akan mencegah kerusakan pada seluruh database jika satu akun disusupi.
Tips Ekstra MySQL
Untuk menghapus MariaDB prompt, ketik perintah berikut dan tekan Enter :
MariaDB [BookstoreDB]> \! clear
Untuk memeriksa konfigurasi tabel tertentu, lakukan:
MariaDB [BookstoreDB]> SELECT COLUMNS IN [TABLE NAME HERE ];
Misalnya,
MariaDB [BookstoreDB]> SHOW COLUMNS IN BooksTBL;Mencantumkan Kolom di Tabel Database
MariaDB [BookstoreDB]> SHOW COLUMNS IN BooksTBL; +-----------------+--------------+------+-----+-------------------+-----------------------------+ | Field | Type | Null | Key | Default | Extra | +-----------------+--------------+------+-----+-------------------+-----------------------------+ | BookID | int(11) | NO | PRI | NULL | auto_increment | | BookName | varchar(100) | NO | | NULL | | | AuthorID | int(11) | NO | MUL | NULL | | | BookPrice | decimal(6,2) | NO | | NULL | | | BookLastUpdated | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | | BookIsAvailable | tinyint(1) | YES | | NULL | | +-----------------+--------------+------+-----+-------------------+-----------------------------+ 6 rows in set (0.02 sec)
Pemeriksaan cepat mengungkapkan bahwa BookIsAvailable bidang mengakui NULL nilai-nilai. Karena kami tidak ingin mengizinkannya, kami akan MENUBAH tabelnya sebagai berikut:
MariaDB [BookstoreDB]> ALTER TABLE BooksTBL MODIFY BookIsAvailable BOOLEAN NOT NULL;
(Jangan ragu untuk menampilkan kolom lagi – YA . yang disorot pada gambar di atas sekarang harus menjadi TIDAK ).
Terakhir, untuk melihat semua database di server Anda, lakukan:
MariaDB [BookstoreDB]> SHOW DATABASES; OR MariaDB [BookstoreDB]> SHOW SCHEMAS;Daftar Semua Database MySQL
[[email protected] ~]# mysql -u bookstoreuser -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 3 Server version: 10.1.14-MariaDB MariaDB Server Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [BookstoreDB]> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | BookstoreDB | | information_schema | +--------------------+ 2 rows in set (0.00 sec) MariaDB [BookstoreDB]> SHOW SCHEMAS; +--------------------+ | Database | +--------------------+ | BookstoreDB | | information_schema | +--------------------+ 2 rows in set (0.00 sec)
Gambar berikut menunjukkan hasil dari perintah di atas setelah mengakses prompt MariaDB sebagai pengguna toko buku (perhatikan bagaimana akun ini tidak dapat “melihat” database apa pun selain BookstoreDB dan skema_informasi (tersedia untuk semua pengguna):
Ringkasan
Dalam artikel ini kami telah menjelaskan cara menjalankan DML operasi dan cara membuat database, tabel, dan pengguna khusus pada database MariaDB. Selain itu, kami membagikan beberapa tips yang dapat membuat hidup Anda sebagai administrator sistem / database lebih mudah.
- Bagian Administrasi Database MySQL – 1
- Bagian Administrasi Database MySQL – 2
- Penyetelan dan Pengoptimalan Kinerja MySQL – Bagian 3
Jika Anda memiliki pertanyaan tentang artikel ini, jangan ragu untuk memberi tahu kami! Jangan ragu untuk menggunakan formulir komentar di bawah untuk menghubungi kami.