Dolt adalah database SQL yang dapat Anda fork, clone, cabangkan, gabungkan, dorong dan tarik seperti repositori Git.
Hubungkan ke Dolt sama seperti database MySQL lainnya untuk membaca atau mengubah skema dan data. Fungsionalitas kontrol versi diekspos dalam SQL melalui tabel sistem, fungsi, dan prosedur.
Atau, gunakan antarmuka baris perintah seperti Git untuk mengimpor file CSV, menerapkan perubahan, memindahkannya ke jarak jauh, atau menggabungkan perubahan rekan satu tim Anda. Semua perintah yang Anda ketahui untuk Git berfungsi sama persis untuk Dolt.
File versi Git. Tabel versi Dolt. Ini seperti Git dan MySQL punya bayi.
Kami juga membangun DoltHub, tempat berbagi database Dolt. Kami menampung data publik secara gratis. Jika Anda ingin menghosting DoltHub versi Anda sendiri, kami memiliki DoltLab. Jika Anda ingin kami menjalankan server Dolt untuk Anda, kami memiliki Hosted Dolt. Jika Anda mencari Dolt versi Postgres, kami membuat DoltgreSQL. Peringatan, ini adalah Alpha awal. Dolt siap produksi.
Bergabunglah dengan kami di Discord untuk menyapa dan mengajukan pertanyaan, atau lihat peta jalan kami untuk melihat apa yang sedang kami bangun selanjutnya.
Banyak hal! Dolt adalah alat yang umumnya berguna dengan aplikasi yang tak terhitung jumlahnya. Namun jika Anda menginginkan beberapa ide, inilah cara orang menggunakannya sejauh ini.
Dolt dapat diatur sebagai replika database MySQL atau MariaDB Anda yang sudah ada menggunakan replikasi binlog MySQL standar. Setiap penulisan menjadi komit Dolt. Ini adalah cara terbaik untuk mendapatkan manfaat kontrol versi Dolt dan mempertahankan database MySQL atau MariaDB yang ada.
CLI dolt
memiliki perintah yang sama dengan git
, dengan beberapa tambahan.
$ dolt Valid commands for dolt are init - Create an empty Dolt data repository. status - Show the working tree status. add - Add table changes to the list of staged table changes. diff - Diff a table. reset - Remove table changes from the list of staged table changes. clean - Remove untracked tables from working set. commit - Record changes to the repository. sql - Run a SQL query against tables in repository. sql-server - Start a MySQL-compatible server. log - Show commit logs. branch - Create, list, edit, delete branches. checkout - Checkout a branch or overwrite a table from HEAD. merge - Merge a branch. conflicts - Commands for viewing and resolving merge conflicts. cherry-pick - Apply the changes introduced by an existing commit. revert - Undo the changes introduced in a commit. clone - Clone from a remote data repository. fetch - Update the database from a remote data repository. pull - Fetch from a dolt remote data repository and merge. push - Push to a dolt remote. config - Dolt configuration. remote - Manage set of tracked repositories. backup - Manage a set of server backups. login - Login to a dolt remote host. creds - Commands for managing credentials. ls - List tables in the working set. schema - Commands for showing and importing table schemas. table - Commands for copying, renaming, deleting, and exporting tables. tag - Create, list, delete tags. blame - Show what revision and author last modified each row of a table. constraints - Commands for handling constraints. migrate - Executes a database migration to use the latest Dolt data format. read-tables - Fetch table(s) at a specific commit into a new dolt repo gc - Cleans up unreferenced data from the repository. filter-branch - Edits the commit history using the provided query. merge-base - Find the common ancestor of two commits. version - Displays the current Dolt cli version. dump - Export all tables in the working set into a file.
Dolt adalah program tunggal ~103 megabyte.
bodoh $ du -h /Pengguna/timsehn/go/bin/dolt 103M /Pengguna/timsehn/go/bin/dolt
Sangat mudah untuk menginstalnya. Unduh dan letakkan di PATH
Anda. Kami memiliki banyak cara untuk menjadikan hal ini lebih mudah bagi sebagian besar platform.
Untuk menginstal pada sistem berbasis Linux atau Mac, jalankan perintah ini di terminal Anda:
sudo bash -c 'curl -L https://github.com/dolthub/dolt/releases/latest/download/install.sh | bash'
Ini akan mengunduh rilis dolt
terbaru dan memasukkannya ke dalam /usr/local/bin/
, yang mungkin ada di $PATH
Anda.
Skrip instalasi memerlukan sudo untuk memasukkan dolt
/usr/local/bin
. Jika Anda tidak memiliki hak akses root atau merasa tidak nyaman menjalankan skrip dengannya, Anda dapat mengunduh biner dolt untuk platform Anda dari rilis terbaru, mengekstraknya, dan meletakkan biner tersebut di suatu tempat di $PATH
Anda.
Dolt dikemas dalam repositori resmi untuk Arch Linux.
pacman -S dolt
Dolt ada di Homebrew, diperbarui setiap rilis.
brew install dolt
Di macOS, Dolt juga dapat diinstal melalui port yang dikelola komunitas melalui MacPorts:
sudo port instal bodoh
Unduh Penginstal Microsoft terbaru (file .msi
) dalam rilis dan jalankan.
Untuk informasi tentang cara menjalankan Windows, lihat di sini.
Anda dapat menginstal dolt
menggunakan Chocolatey:
instal coklat dolt
Ada gambar Docker resmi berikut untuk Dolt:
dolthub/dolt
untuk menjalankan Dolt sebagai alat CLI.
dolthub/dolt-sql-server
untuk menjalankan Dolt dalam mode server.
Pastikan Anda telah menginstal Go, dan go
tersebut ada di jalur Anda. Dolt memiliki ketergantungan pada cgo, jadi Anda memerlukan kompiler C dan rantai alat yang berfungsi juga.
Kloning repositori ini dan cd ke direktori go
. Kemudian jalankan:
go install ./cmd/dolt
Outputnya akan berupa $GOPATH/bin
, yang defaultnya adalah ~/go/bin
. Untuk menguji build Anda, coba:
~/go/bin/dolt version
Verifikasikan bahwa instalasi Anda telah berhasil dengan menjalankan dolt
di terminal Anda.
$ dolt Valid commands for dolt are [...]
Konfigurasikan dolt
dengan nama pengguna dan email Anda, yang Anda perlukan untuk membuat komitmen. Perintahnya bekerja persis sama dengan git.
$ dolt config --global --add user.email [email protected] $ dolt config --global --add user.name "YOUR NAME"
Dolt membutuhkan tempat untuk menyimpan database Anda. Saya akan memasukkan database saya ke ~/dolt
.
% cd ~% mkdir bodoh % cd bodoh
Basis data apa pun yang Anda buat akan disimpan di direktori ini. Jadi, untuk contoh ini, direktori bernama getting_started
akan dibuat di sini setelah Anda menjalankan create database getting_started
. Menavigasi ke ~/dolt/getting_started
akan memungkinkan Anda mengakses database ini menggunakan baris perintah Dolt.
CATATAN: Untuk contoh ini, direktori getting_started
akan dibuat setelah Anda menjalankan create database getting_started;
di shell SQL di bagian Buat skema. Jangan lakukan apa pun kecuali membuat direktori dan menavigasi ke sana dulu.
Dolt dikirimkan dengan server database bawaan MySQL yang kompatibel. Untuk memulainya, Anda menggunakan perintah dolt sql-server
. Menjalankan perintah ini akan memulai server pada port 3306.
bodoh sql-server Memulai server dengan Config HP="localhost:3306"|T="28800000"|R="false"|L="info"
Terminal Anda hanya akan tergantung di sana. Ini berarti server sedang berjalan. Kesalahan apa pun akan dicetak di terminal ini. Biarkan saja di sana dan buka terminal baru.
Di terminal baru, sekarang kita akan terhubung ke server database yang sedang berjalan menggunakan klien. Dolt juga disertakan dengan klien yang kompatibel dengan MySQL.
% dolt -u root -p "" sql# Selamat datang di klien Dolt MySQL.# Pernyataan harus diakhiri dengan ';'.# "exit" atau "quit" (atau Ctrl-D) untuk keluar.mysql>
Di terminal lain tempat Anda menjalankan dolt sql-server
, Anda akan melihat baris log berikut.
2022-06-06T13:14:32-07:00 INFO [conn 1] NewConnection {DisableClientMultiStatements=false}
Anda terhubung!
Sementara kita di sini mari kita ambil salinan MySQL sehingga kita dapat terhubung dengan klien itu. Buka dokumentasi Memulai MySQL dan instal MySQL di mesin Anda. Saya menggunakan Homebrew untuk menginstal MySQL di Mac saya.
MySQL dilengkapi dengan server MySQL yang disebut mysqld
dan klien MySQL yang disebut mysql
. Anda hanya tertarik pada klien. Setelah mengikuti instruksi dari dokumentasi MySQL, pastikan Anda memiliki salinan klien mysql
di jalur Anda:
% mysql --versi mysql Ver 8.0.29 untuk macos12.2 di x86_64 (Homebrew)
Sekarang, untuk menghubungkan klien mysql
ke Dolt, Anda akan memaksa klien MySQL melalui antarmuka TCP dengan meneruskan host dan port. Standarnya adalah antarmuka soket yang didukung Dolt, tetapi hanya tersedia di localhost
. Jadi, lebih baik memamerkan antarmuka TCP. Klien MySQL juga mengharuskan Anda menentukan pengguna, dalam hal ini root
.
% mysql --host 127.0.0.1 --port 3306 -uroot Selamat datang di monitor MySQL. Perintah diakhiri dengan ; atau g. Id koneksi MySQL Anda adalah 2 Versi server: 5.7.9-Vitess Hak Cipta (c) 2000, 2022, Oracle dan/atau afiliasinya. Oracle adalah merek dagang terdaftar dari Oracle Corporation dan/atau miliknya afiliasi. Nama lain mungkin merupakan merek dagang masing-masing pemilik. Ketik 'bantuan;' atau 'h' untuk bantuan. Ketik 'c' untuk menghapus pernyataan masukan saat ini. mysql>
Sekali lagi, untuk memastikan klien benar-benar terhubung, Anda akan melihat yang berikut ini di terminal dolt sql-server
2022-06-06T13:26:55-07:00 INFO [conn 2] NewConnection {DisableClientMultiStatements=false}
Seperti yang Anda lihat, Dolt mendukung semua klien yang kompatibel dengan MySQL. Dolt dikirimkan bersama klien tetapi Anda dapat menggunakan klien MySQL apa pun, seperti klien yang disertakan dengan MySQL.
Sekarang kami sebenarnya siap melakukan sesuatu yang menarik. Saya akan tetap menggunakan klien mysql
dan menjalankan pernyataan SQL berikut untuk membuat database bernama getting_started
. Basis data getting_started
akan memiliki tiga tabel: employees
, teams
, dan employees_teams
.
mysql> create database getting_started; Query OK, 1 row affected (0.04 sec) mysql> use getting_started; Database changed mysql> create table employees ( id int, last_name varchar(255), first_name varchar(255), primary key(id)); Query OK, 0 rows affected (0.01 sec) mysql> create table teams ( id int, team_name varchar(255), primary key(id)); Query OK, 0 rows affected (0.00 sec) mysql> create table employees_teams( team_id int, employee_id int, primary key(team_id, employee_id), foreign key (team_id) references teams(id), foreign key (employee_id) references employees(id)); Query OK, 0 rows affected (0.01 sec) mysql> show tables; +---------------------------+ | Tables_in_getting_started | +---------------------------+ | employees | | employees_teams | | teams | +---------------------------+ 3 rows in set (0.00 sec)
Dolt mendukung kunci asing, indeks sekunder, pemicu, batasan pemeriksaan, dan prosedur tersimpan. Ini adalah database SQL yang modern dan kaya fitur.
Saatnya menggunakan fitur Dolt pertama Anda. Kita akan membuat komitmen Dolt. Komitmen Dolt memungkinkan Anda melakukan perjalanan waktu dan melihat garis keturunan. Buat komit Dolt kapan pun Anda ingin memulihkan atau membandingkannya dengan saat ini.
Dolt memperlihatkan fungsionalitas kontrol versi melalui antarmuka bergaya Git. Pada baris perintah, perintah Dolt dipetakan persis ke setara Gitnya dengan target berupa tabel, bukan file. Dalam SQL, Dolt memaparkan operasi baca kontrol versi sebagai tabel sistem dan operasi tulis kontrol versi sebagai prosedur tersimpan.
Penamaan tabel sistem dan prosedur tersimpan mengikuti pola dolt_
. Jadi dolt add
di CLI menjadi dolt_add
sebagai prosedur tersimpan. Opsi penerusan juga mengikuti model baris perintah. Misalnya, untuk menentukan tabel yang akan ditambahkan, kirimkan nama tabel sebagai opsi ke prosedur dolt_add
. Untuk argumen bernama seperti mengirim pesan ke perintah dolt_commit
gunakan dua argumen secara berurutan seperti ('-m', 'This is a message')
. Jika Anda mengetahui Git, prosedur kontrol versi dan tabel sistem akan terasa familier.
Jadi, kami menambahkan dan mengkomit skema baru kami seperti itu.
mysql> call dolt_add('teams', 'employees', 'employees_teams'); +--------+ | status | +--------+ | 0 | +--------+ 1 row in set (0.03 sec) mysql> call dolt_commit('-m', 'Created initial schema'); +----------------------------------+ | hash | +----------------------------------+ | ne182jemgrlm8jnjmoubfqsstlfi1s98 | +----------------------------------+ 1 row in set (0.02 sec) mysql> select * from dolt_log; +----------------------------------+-----------+-----------------+-------------------------+----------------------------+ | commit_hash | committer | email | date | message | +----------------------------------+-----------+-----------------+-------------------------+----------------------------+ | ne182jemgrlm8jnjmoubfqsstlfi1s98 | Tim Sehn | [email protected] | 2022-06-07 16:35:49.277 | Created initial schema | | vluuhvd0bn59598utedt77ed9q5okbcb | Tim Sehn | [email protected] | 2022-06-07 16:33:59.531 | Initialize data repository | +----------------------------------+-----------+-----------------+-------------------------+----------------------------+ 2 rows in set (0.01 sec)
Itu dia. Skema Anda telah dibuat dan Anda memiliki komit Dolt yang melacak pembuatannya, seperti yang terlihat pada tabel sistem dolt_log
.
Catatan, komit Dolt berbeda dari transaksi SQL standar COMMIT
. Dalam hal ini, saya menjalankan database dengan AUTOCOMMIT
aktif, sehingga setiap pernyataan SQL secara otomatis menghasilkan transaksi COMMIT
. Jika Anda ingin sistem menghasilkan komit Dolt untuk setiap transaksi, gunakan variabel sistem, @@dolt_transaction_commit
.
Sekarang, saya akan mengisi database dengan beberapa karyawan di DoltHub. Lalu, saya akan menugaskan karyawan ke dalam dua tim: teknik dan penjualan. CEO mempunyai banyak jabatan di sebuah start up sehingga dia akan ditugaskan ke beberapa tim.
mysql> insert into employees values (0, 'Sehn', 'Tim'), (1, 'Hendriks', 'Brian'), (2, 'Son','Aaron'), (3, 'Fitzgerald', 'Brian'); Query OK, 4 rows affected (0.01 sec) mysql> select * from employees where first_name='Brian'; +------+------------+------------+ | id | last_name | first_name | +------+------------+------------+ | 1 | Hendriks | Brian | | 3 | Fitzgerald | Brian | +------+------------+------------+ 2 rows in set (0.00 sec) mysql> insert into teams values (0, 'Engineering'), (1, 'Sales'); Query OK, 2 rows affected (0.00 sec) mysql> insert into employees_teams values (0,0), (1,0), (2,0), (0,1), (3,1); ERROR 1452 (HY000): cannot add or update a child row - Foreign key violation on fk: `rv9ek7ft`, table: `employees_teams`, referenced table: `teams`, key: `[2]`
Ups, saya melanggar batasan. Sepertinya saya membuat tabel dengan tim sebelum karyawan. Anda harus selalu menentukan kolom Anda saat menyisipkan, tidak bergantung pada urutan alami. Layani saya dengan benar! Dolt hadir dengan kekuatan penuh database relasional SQL modern untuk memastikan integritas data.
mysql> insert into employees_teams(employee_id, team_id) values (0,0), (1,0), (2,0), (0,1), (3,1); Query OK, 5 rows affected (0.01 sec) mysql> select first_name, last_name, team_name from employees join employees_teams on (employees.id=employees_teams.employee_id) join teams on (teams.id=employees_teams.team_id) where team_name='Engineering'; +------------+-----------+-------------+ | first_name | last_name | team_name | +------------+-----------+-------------+ | Tim | Sehn | Engineering | | Brian | Hendriks | Engineering | | Aaron | Son | Engineering | +------------+-----------+-------------+ 3 rows in set (0.00 sec)
Sepertinya semuanya sudah dimasukkan dan benar. Saya dapat membuat daftar anggota tim teknik menggunakan tiga tabel tersebut JOIN
. Dolt mendukung hingga dua belas tabel JOIN
s. Sekali lagi, Dolt adalah database relasional SQL modern yang dipasangkan dengan kontrol versi gaya Git.
Sekarang, bagaimana jika Anda ingin melihat apa yang berubah di set kerja Anda sebelum Anda melakukan commit? Anda menggunakan tabel sistem dolt_status
dan dolt_diff_
.
mysql> select * from dolt_status; +-----------------+--------+----------+ | table_name | staged | status | +-----------------+--------+----------+ | teams | 0 | modified | | employees | 0 | modified | | employees_teams | 0 | modified | +-----------------+--------+----------+ 3 rows in set (0.01 sec) mysql> select * from dolt_diff_employees; +--------------+---------------+-------+-----------+----------------+----------------+-----------------+---------+----------------------------------+-------------------------+-----------+ | to_last_name | to_first_name | to_id | to_commit | to_commit_date | from_last_name | from_first_name | from_id | from_commit | from_commit_date | diff_type | +--------------+---------------+-------+-----------+----------------+----------------+-----------------+---------+----------------------------------+-------------------------+-----------+ | Sehn | Tim | 0 | WORKING | NULL | NULL | NULL | NULL | ne182jemgrlm8jnjmoubfqsstlfi1s98 | 2022-06-07 16:35:49.277 | added | | Hendriks | Brian | 1 | WORKING | NULL | NULL | NULL | NULL | ne182jemgrlm8jnjmoubfqsstlfi1s98 | 2022-06-07 16:35:49.277 | added | | Son | Aaron | 2 | WORKING | NULL | NULL | NULL | NULL | ne182jemgrlm8jnjmoubfqsstlfi1s98 | 2022-06-07 16:35:49.277 | added | | Fitzgerald | Brian | 3 | WORKING | NULL | NULL | NULL | NULL | ne182jemgrlm8jnjmoubfqsstlfi1s98 | 2022-06-07 16:35:49.277 | added | +--------------+---------------+-------+-----------+----------------+----------------+-----------------+---------+----------------------------------+-------------------------+-----------+ 4 rows in set (0.00 sec)
Seperti yang Anda lihat dari perbedaannya, saya telah menambahkan nilai yang benar ke tabel employees
. Nilainya sebelumnya NULL
dan sekarang sudah terisi.
Mari kita selesaikan dengan komit Dolt lainnya kali ini dengan menambahkan semua tabel yang terpengaruh menggunakan -am
.
mysql> call dolt_commit('-am', 'Populated tables with data'); +----------------------------------+ | hash | +----------------------------------+ | 13qfqa5rojq18j84d1n2htjkm6fletg4 | +----------------------------------+ 1 row in set (0.02 sec)
Anda dapat memeriksa log menggunakan dolt_log
dan melihat tabel mana yang berubah di setiap penerapan menggunakan dolt_diff
yang tidak tercakup. dolt_diff
yang tidak tercakup memberi tahu Anda apakah skema, data, atau keduanya berubah dalam penerapan tertentu untuk tabel.
mysql> select * from dolt_log; +----------------------------------+-----------+-----------------+-------------------------+----------------------------+ | commit_hash | committer | email | date | message | +----------------------------------+-----------+-----------------+-------------------------+----------------------------+ | 13qfqa5rojq18j84d1n2htjkm6fletg4 | Tim Sehn | [email protected] | 2022-06-07 16:39:32.066 | Populated tables with data | | ne182jemgrlm8jnjmoubfqsstlfi1s98 | Tim Sehn | [email protected] | 2022-06-07 16:35:49.277 | Created initial schema | | vluuhvd0bn59598utedt77ed9q5okbcb | Tim Sehn | [email protected] | 2022-06-07 16:33:59.531 | Initialize data repository | +----------------------------------+-----------+-----------------+-------------------------+----------------------------+ 3 rows in set (0.00 sec) mysql> select * from dolt_diff; +----------------------------------+-----------------+-----------+-----------------+-------------------------+----------------------------+-------------+---------------+ | commit_hash | table_name | committer | email | date | message | data_change | schema_change | +----------------------------------+-----------------+-----------+-----------------+-------------------------+----------------------------+-------------+---------------+ | 13qfqa5rojq18j84d1n2htjkm6fletg4 | teams | Tim Sehn | [email protected] | 2022-06-07 16:39:32.066 | Populated tables with data | 1 | 0 | | 13qfqa5rojq18j84d1n2htjkm6fletg4 | employees | Tim Sehn | [email protected] | 2022-06-07 16:39:32.066 | Populated tables with data | 1 | 0 | | 13qfqa5rojq18j84d1n2htjkm6fletg4 | employees_teams | Tim Sehn | [email protected] | 2022-06-07 16:39:32.066 | Populated tables with data | 1 | 0 | | ne182jemgrlm8jnjmoubfqsstlfi1s98 | employees | Tim Sehn | [email protected] | 2022-06-07 16:35:49.277 | Created initial schema | 0 | 1 | | ne182jemgrlm8jnjmoubfqsstlfi1s98 | employees_teams | Tim Sehn | [email protected] | 2022-06-07 16:35:49.277 | Created initial schema | 0 | 1 | | ne182jemgrlm8jnjmoubfqsstlfi1s98 | teams | Tim Sehn | [email protected] | 2022-06-07 16:35:49.277 | Created initial schema | 0 | 1 | +----------------------------------+-----------------+-----------+-----------------+-------------------------+----------------------------+-------------+---------------+ 6 rows in set (0.00 sec)
Dolt mendukung pembatalan perubahan melalui call dolt_reset()
. Bayangkan saja saya tidak sengaja menjatuhkan meja.
mysql> drop table employees_teams; Query OK, 0 rows affected (0.01 sec) mysql> show tables; +---------------------------+ | Tables_in_getting_started | +---------------------------+ | employees | | teams | +---------------------------+ 2 rows in set (0.00 sec)
Dalam database tradisional, hal ini bisa menjadi bencana. Di Dolt, Anda hanya perlu satu perintah untuk mendapatkan meja Anda kembali.
mysql> call dolt_reset('--hard'); +--------+ | status | +--------+ | 0 | +--------+ 1 row in set (0.01 sec) mysql> show tables; +---------------------------+ | Tables_in_getting_started | +---------------------------+ | employees | | employees_teams | | teams | +---------------------------+ 3 rows in set (0.01 sec)
Dolt membuat database operasi tidak terlalu rentan terhadap kesalahan. Anda selalu dapat membatalkan perubahan yang sedang Anda lakukan atau memundurkannya ke keadaan baik yang diketahui. Anda juga memiliki kemampuan untuk membatalkan komitmen tertentu menggunakan dolt_revert()
. Bahkan jika Anda secara tidak sengaja menjalankan drop database
pada database yang salah, Dolt memungkinkan Anda membatalkannya dengan memanggil prosedur tersimpan dolt_undrop()
.
Benci baris perintah? Mari gunakan Tableplus untuk membuat beberapa modifikasi. Tableplus adalah Meja Kerja SQL gratis. Ikuti petunjuk instalasi dari situs web mereka.
Sekarang, untuk terhubung Anda harus memilih MySQL sebagai jenis koneksi. Kemudian masukkan nama untuk koneksi Anda, getting_started
sebagai database Anda, dan root
sebagai pengguna Anda.
Klik sambungkan dan Anda akan disajikan dengan GUI meja kerja database yang familier.
Untuk membuat perubahan pada cabang, saya menggunakan prosedur tersimpan dolt_checkout()
. Menggunakan opsi -b
akan membuat cabang, seperti di Git.
Tableplus memberi saya kemampuan untuk memasukkan skrip SQL beberapa baris pada tab SQL. Saya memasukkan SQL berikut untuk memeriksa cabang, memperbarui, menyisipkan, menghapus, dan akhirnya Dolt melakukan perubahan saya.
panggil dolt_checkout('-b','modifications');perbarui karyawan SET first_name='Timothy' di mana first_name='Tim';masukkan nilai INTO karyawan (id, first_name, last_name) (4,'Daylon', 'Wilkins') ;masukkan ke nilai Employee_teams(team_id, Employee_id) (0,4);hapus dari Employee_teams dimana Employee_id=0 dan tim_id=1; call dolt_commit('-am', 'Modifikasi pada cabang');
Inilah hasilnya di Tableplus.
Kembali ke terminal saya, saya tidak dapat melihat modifikasi tabel yang dibuat di Tableplus karena terjadi di cabang yang berbeda dari yang saya periksa di sesi saya.
mysql> select * from dolt_branches; +---------------+----------------------------------+------------------+------------------------+-------------------------+----------------------------+ | name | hash | latest_committer | latest_committer_email | latest_commit_date | latest_commit_message | +---------------+----------------------------------+------------------+------------------------+-------------------------+----------------------------+ | main | 13qfqa5rojq18j84d1n2htjkm6fletg4 | Tim Sehn | [email protected] | 2022-06-07 16:39:32.066 | Populated tables with data | | modifications | uhkv57j4bp2v16vcnmev9lshgkqq8ppb | Tim Sehn | [email protected] | 2022-06-07 16:41:49.847 | Modifications on a branch | +---------------+----------------------------------+------------------+------------------------+-------------------------+----------------------------+ 2 rows in set (0.00 sec) mysql> select active_branch(); +-----------------+ | active_branch() | +-----------------+ | main | +-----------------+ 1 row in set (0.00 sec) mysql> select * from employees; +------+------------+------------+ | id | last_name | first_name | +------+------------+------------+ | 0 | Sehn | Tim | | 1 | Hendriks | Brian | | 2 | Son | Aaron | | 3 | Fitzgerald | Brian | +------+------------+------------+ 4 rows in set (0.00 sec)
Saya dapat menanyakan cabang apa pun yang telah saya periksa menggunakan SQL as of
sintaksis.
mysql> select * from employees as of 'modifications'; +------+------------+------------+ | id | last_name | first_name | +------+------------+------------+ | 0 | Sehn | Timothy | | 1 | Hendriks | Brian | | 2 | Son | Aaron | | 3 | Fitzgerald | Brian | | 4 | Wilkins | Daylon | +------+------------+------------+ 5 rows in set (0.01 sec)
Jika saya ingin melihat perbedaan antara kedua cabang, saya dapat menggunakan fungsi tabel dolt_diff()
. Dibutuhkan dua cabang dan nama tabel sebagai argumen.
mysql> select * from dolt_diff('main', 'modifications', 'employees'); +--------------+---------------+-------+---------------+-------------------------+----------------+-----------------+---------+-------------+-------------------------+-----------+ | to_last_name | to_first_name | to_id | to_commit | to_commit_date | from_last_name | from_first_name | from_id | from_commit | from_commit_date | diff_type | +--------------+---------------+-------+---------------+-------------------------+----------------+-----------------+---------+-------------+-------------------------+-----------+ | Sehn | Timothy | 0 | modifications | 2022-06-07 16:41:49.847 | Sehn | Tim | 0 | main | 2022-06-07 16:39:32.066 | modified | | Wilkins | Daylon | 4 | modifications | 2022-06-07 16:41:49.847 | NULL | NULL | NULL | main | 2022-06-07 16:39:32.066 | added | +--------------+---------------+-------+---------------+-------------------------+----------------+-----------------+---------+-------------+-------------------------+-----------+ 2 rows in set (0.00 sec)
Seperti yang Anda lihat, Anda memiliki kekuatan penuh dari cabang dan perbedaan gaya Git dalam database SQL dengan Dolt.
Saya juga dapat membuat perubahan skema pada cabang untuk pengujian skema baru yang terisolasi. Saya akan menambahkan kolom start_date
di cabang baru dan mengisinya.
mysql> call dolt_checkout('-b', 'schema_changes'); +--------+ | status | +--------+ | 0 | +--------+ 1 row in set (0.01 sec) mysql> alter table employees add column start_date date; Query OK, 0 rows affected (0.02 sec) mysql> update employees set start_date='2018-09-08'; Query OK, 4 rows affected (0.01 sec) Rows matched: 4 Changed: 4 Warnings: 0 mysql> update employees set start_date='2021-04-19' where last_name='Fitzgerald'; Query OK, 1 row affected (0.01 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from employees; +------+------------+------------+------------+ | id | last_name | first_name | start_date | +------+------------+------------+------------+ | 0 | Sehn | Tim | 2018-09-08 | | 1 | Hendriks | Brian | 2018-09-08 | | 2 | Son | Aaron | 2018-09-08 | | 3 | Fitzgerald | Brian | 2021-04-19 | +------+------------+------------+------------+ 4 rows in set (0.00 sec) mysql> call dolt_commit('-am', 'Added start_date column to employees'); +----------------------------------+ | hash | +----------------------------------+ | pg3nfi0j1dpc5pf1rfgckpmlteaufdrt | +----------------------------------+ 1 row in set (0.01 sec)
Mengubah skema di cabang memberi Anda metode baru untuk melakukan pengujian integrasi terisolasi terhadap perubahan skema baru.
Anggaplah semua pengujian skema baru pada cabang schema_changes
dan data pada cabang modifications
selesai dengan sempurna. Saatnya untuk menggabungkan semua hasil edit kita ke main
. Ini dilakukan dengan menggunakan prosedur tersimpan dolt_merge
.
mysql> call dolt_checkout('main'); +--------+ | status | +--------+ | 0 | +--------+ 1 row in set (0.01 sec) mysql> select * from dolt_status; Empty set (0.00 sec) mysql> call dolt_merge('schema_changes'); +--------------+ | no_conflicts | +--------------+ | 1 | +--------------+ 1 row in set (0.01 sec) mysql> select * from employees; +------+------------+------------+------------+ | id | last_name | first_name | start_date | +------+------------+------------+------------+ | 0 | Sehn | Tim | 2018-09-08 | | 1 | Hendriks | Brian | 2018-09-08 | | 2 | Son | Aaron | 2018-09-08 | | 3 | Fitzgerald | Brian | 2021-04-19 | +------+------------+------------+------------+ 4 rows in set (0.00 sec)
Perubahan skema berhasil. Kami sekarang memiliki tanggal mulai. Perubahan data berikutnya.
mysql> call dolt_merge('modifications'); +--------------+ | no_conflicts | +--------------+ | 1 | +--------------+ 1 row in set (0.02 sec) mysql> select * from employees; +------+------------+------------+------------+ | id | last_name | first_name | start_date | +------+------------+------------+------------+ | 0 | Sehn | Timothy | 2018-09-08 | | 1 | Hendriks | Brian | 2018-09-08 | | 2 | Son | Aaron | 2018-09-08 | | 3 | Fitzgerald | Brian | 2021-04-19 | | 4 | Wilkins | Daylon | NULL | +------+------------+------------+------------+ 5 rows in set (0.00 sec)
Perubahan data juga berhasil. Seperti yang Anda lihat, saya sekarang menjadi "Timothy" dan bukan "Tim", Daylon ditambahkan, dan kita semua memiliki tanggal mulai kecuali Daylon yang ditambahkan di cabang berbeda.
mysql> select first_name, last_name, team_name from employees join employees_teams on (employees.id=employees_teams.employee_id) join teams on (teams.id=employees_teams.team_id) where team_name='Sales'; +------------+------------+-----------+ | first_name | last_name | team_name | +------------+------------+-----------+ | Brian | Fitzgerald | Sales | +------------+------------+-----------+ 1 row in set (0.01 sec)
Saya juga keluar dari Tim Penjualan. Rekayasa adalah kehidupan.
Saya harus melakukan semua perubahan saya karena penggabungan terakhir bukanlah penggabungan cepat.
mysql> call dolt_commit('-m', 'Merged all branches'); +----------------------------------+ | hash | +----------------------------------+ | vn9b0qcematsj2f6ka0hfoflhr5s6p0b | +----------------------------------+ 1 row in set (0.01 sec) mysql> select * from dolt_log; +----------------------------------+-----------+-----------------+-------------------------+--------------------------------------+ | commit_hash | committer | email | date | message | +----------------------------------+-----------+-----------------+-------------------------+--------------------------------------+ | vn9b0qcematsj2f6ka0hfoflhr5s6p0b | Tim Sehn | [email protected] | 2022-06-07 17:10:02.07 | Merged all branches | | pg3nfi0j1dpc5pf1rfgckpmlteaufdrt | Tim Sehn | [email protected] | 2022-06-07 16:44:37.513 | Added start_date column to employees | | uhkv57j4bp2v16vcnmev9lshgkqq8ppb | Tim Sehn | [email protected] | 2022-06-07 16:41:49.847 | Modifications on a branch | | 13qfqa5rojq18j84d1n2htjkm6fletg4 | Tim Sehn | [email protected] | 2022-06-07 16:39:32.066 | Populated tables with data | | ne182jemgrlm8jnjmoubfqsstlfi1s98 | Tim Sehn | [email protected] | 2022-06-07 16:35:49.277 | Created initial schema | | vluuhvd0bn59598utedt77ed9q5okbcb | Tim Sehn | [email protected] | 2022-06-07 16:33:59.531 | Initialize data repository | +----------------------------------+-----------+-----------------+-------------------------+--------------------------------------+ 6 rows in set (0.00 sec)
Sekarang, kami memiliki database dengan semua skema dan perubahan data yang digabungkan dan siap digunakan.
Komit mana yang mengubah nama depan saya? Dengan Dolt Anda memiliki silsilah untuk setiap sel di database Anda. Mari gunakan dolt_history_
dan dolt_diff_
untuk menjelajahi fitur garis keturunan di Dolt.
dolt_history_
menunjukkan status baris pada setiap penerapan.
mysql> select * from dolt_history_employees where id=0 order by commit_date; +------+-----------+------------+------------+----------------------------------+-----------+-------------------------+ | id | last_name | first_name | start_date | commit_hash | committer | commit_date | +------+-----------+------------+------------+----------------------------------+-----------+-------------------------+ | 0 | Sehn | Tim | NULL | 13qfqa5rojq18j84d1n2htjkm6fletg4 | Tim Sehn | 2022-06-07 16:39:32.066 | | 0 | Sehn | Timothy | NULL | uhkv57j4bp2v16vcnmev9lshgkqq8ppb | Tim Sehn | 2022-06-07 16:41:49.847 | | 0 | Sehn | Tim | 2018-09-08 | pg3nfi0j1dpc5pf1rfgckpmlteaufdrt | Tim Sehn | 2022-06-07 16:44:37.513 | | 0 | Sehn | Timothy | 2018-09-08 | vn9b0qcematsj2f6ka0hfoflhr5s6p0b | Tim Sehn | 2022-06-07 17:10:02.07 | +------+-----------+------------+------------+----------------------------------+-----------+-------------------------+ 4 rows in set (0.00 sec)
dolt_diff_
memungkinkan Anda memfilter riwayat agar hanya dilakukan ketika sel yang dimaksud berubah. Dalam hal ini, saya tertarik dengan komitmen yang mengubah nama depan saya. Catatan, ada dua komit yang mengubah nama saya karena yang satu adalah perubahan asli dan yang kedua adalah komit gabungan.
mysql> select to_commit,from_first_name,to_first_name from dolt_diff_employees where (from_id=0 or to_id=0) and (from_first_name <> to_first_name or from_first_name is NULL) order by to_commit_date; +----------------------------------+-----------------+---------------+ | to_commit | from_first_name | to_first_name | +----------------------------------+-----------------+---------------+ | 13qfqa5rojq18j84d1n2htjkm6fletg4 | NULL | Tim | | uhkv57j4bp2v16vcnmev9lshgkqq8ppb | Tim | Timothy | | vn9b0qcematsj2f6ka0hfoflhr5s6p0b | Tim | Timothy | +----------------------------------+-----------------+---------------+ 3 rows in set (0.01 sec)
Dolt memberikan kemampuan audit data yang kuat hingga ke sel individual. Kapan, bagaimana, dan mengapa setiap sel dalam database Anda berubah seiring waktu?
Buka dokumentasi kami sekarang setelah Anda memahami Dolt. Anda juga dapat membaca tentang apa yang sedang kami kerjakan di blog kami.