mysql [từ MariaDB 10. 4. 6, còn được gọi là mariadb] là một trình bao SQL đơn giản [có khả năng đọc GNU]. Nó hỗ trợ sử dụng tương tác và không tương tác. Khi được sử dụng tương tác, kết quả truy vấn được trình bày ở định dạng bảng ASCII. Khi được sử dụng không tương tác [ví dụ: dưới dạng bộ lọc], kết quả được trình bày ở định dạng được phân tách bằng tab. Định dạng đầu ra có thể được thay đổi bằng các tùy chọn lệnh
Nếu bạn gặp sự cố do không đủ bộ nhớ cho tập hợp kết quả lớn, hãy sử dụng tùy chọn
mysql --user=user_name --password=your_password db_name1. Điều này buộc mysql truy xuất kết quả từ máy chủ một hàng tại một thời điểm thay vì truy xuất toàn bộ tập kết quả và đệm nó trong bộ nhớ trước khi hiển thị. Điều này được thực hiện bằng cách trả về tập kết quả bằng hàm
mysql --user=user_name --password=your_password db_name2 C API trong thư viện máy khách/máy chủ thay vì
mysql --user=user_name --password=your_password db_name3
Sử dụng mysql rất dễ dàng. Gọi nó từ lời nhắc của trình thông dịch lệnh của bạn như sau
mysql db_name
Hoặc là
mysql --user=user_name --password=your_password db_name
Sau đó nhập câu lệnh SQL, kết thúc câu lệnh bằng dấu “;”, \g hoặc \G rồi nhấn Enter
Nhập Control-C khiến mysql cố gắng hủy câu lệnh hiện tại. Nếu điều này không thể thực hiện được hoặc Control-C được nhập lại trước khi câu lệnh bị tắt, mysql sẽ thoát
Bạn có thể thực thi các câu lệnh SQL trong một tệp script [tệp bó] như thế này
mysql db_name < script.sql > output.tab
Từ MariaDB 10. 4. 6,
mysql --user=user_name --password=your_password db_name4 có sẵn dưới dạng liên kết tượng trưng tới
mysql --user=user_name --password=your_password db_name5
Từ MariaDB 10. 5. 2,
mysql --user=user_name --password=your_password db_name5 là liên kết tượng trưng và
mysql --user=user_name --password=your_password db_name4 tên nhị phân
sử dụng mysql
Lệnh sử dụng
mysql --user=user_name --password=your_password db_name5 và cú pháp chung là
mysql
Tùy chọn
mysql --user=user_name --password=your_password db_name5 hỗ trợ các tùy chọn sau
Tệp tùy chọn
Ngoài việc đọc các tùy chọn từ dòng lệnh,
mysql --user=user_name --password=your_password db_name5 cũng có thể đọc các tùy chọn từ tệp tùy chọn. Nếu một tùy chọn không xác định được cung cấp cho
mysql --user=user_name --password=your_password db_name5 trong tệp tùy chọn, thì tùy chọn đó sẽ bị bỏ qua
Các tùy chọn sau đây liên quan đến cách các công cụ dòng lệnh của MariaDB xử lý các tệp tùy chọn. Chúng phải được đưa ra làm đối số đầu tiên trên dòng lệnh
Trong MariaDB 10. 2 trở lên,
mysql --user=user_name --password=your_password db_name5 được liên kết với Trình kết nối MariaDB/C. Tuy nhiên, Trình kết nối MariaDB/C chưa xử lý việc phân tích cú pháp các tệp tùy chọn cho máy khách này. Điều đó vẫn được thực hiện bởi mã phân tích tệp tùy chọn máy chủ. Xem MDEV-19035 để biết thêm thông tin
Nhóm tùy chọn
mysql --user=user_name --password=your_password db_name5 đọc các tùy chọn sau đây từ các tệp tùy chọn
Cách chỉ định giao thức nào sẽ sử dụng khi kết nối với máy chủ mysqld
Bạn có thể buộc giao thức nào được sử dụng để kết nối với máy chủ
mysql db_name < script.sql > output.tab4 bằng cách cung cấp cho tùy chọn
mysql db_name < script.sql > output.tab5 một trong các giá trị sau.
mysql db_name < script.sql > output.tab6,
mysql db_name < script.sql > output.tab7,
mysql db_name < script.sql > output.tab8 hoặc
mysql db_name < script.sql > output.tab9
Nếu
mysql db_name < script.sql > output.tab5 không được chỉ định, trước MariaDB 10. 6. 1, các thuộc tính kết nối dòng lệnh không bắt buộc giao thức sẽ bị bỏ qua
Từ MariaDB 10. 6. 1, thuộc tính kết nối được chỉ định thông qua dòng lệnh [e. g.
mysql1] sẽ buộc loại của nó. Giao thức phù hợp với thuộc tính kết nối tương ứng được sử dụng, e. g. kết nối TCP/IP được tạo khi ____11_______2 được chỉ định
Nếu nhiều hoặc không có thuộc tính kết nối nào được chỉ định thông qua dòng lệnh, thì điều sau đây sẽ xảy ra
Linux/Unix
- Nếu
mysql
3 không được chỉ định hoặcmysql
3 làmysql
5, thì ổ cắm Unix được sử dụng - Trong các trường hợp khác [_______11_______3 được đưa ra và nó không phải là ____11_______5] thì kết nối TCP/IP thông qua tùy chọn
mysql
8 được sử dụng
Lưu ý rằng
mysql5 là một giá trị đặc biệt. Sử dụng 127. 0. 0. 1 không phải là điều tương tự. Cái sau sẽ kết nối với máy chủ mysqld thông qua TCP/IP
các cửa sổ
- Nếu
shell> mysql test Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 10 Server version: 10.2.2-MariaDB-valgrind-max-debug Source distribution 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 [test]> status; -------------- mysql Ver 15.1 Distrib 10.0.25-MariaDB, for Linux [x86_64] using readline 5.2 Connection id: 10 Current database: test Current user: monty@localhost ... Connection: Localhost via UNIX socket ... UNIX socket: /tmp/mysql-dbug.sock
0 được chỉ định vàmysql
3 không được chỉ định hoặcmysql
3 làmysql
5, thì kết nối sẽ diễn ra thông qua bộ nhớ dùng chung - Nếu
shell> mysql test Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 10 Server version: 10.2.2-MariaDB-valgrind-max-debug Source distribution 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 [test]> status; -------------- mysql Ver 15.1 Distrib 10.0.25-MariaDB, for Linux [x86_64] using readline 5.2 Connection id: 10 Current database: test Current user: monty@localhost ... Connection: Localhost via UNIX socket ... UNIX socket: /tmp/mysql-dbug.sock
0 không được chỉ định vàmysql
3 không được chỉ định hoặcmysql
3 làmysql
5, thì kết nối sẽ diễn ra thông qua các cửa sổ có tên là đường ống - Các đường dẫn được đặt tên cũng sẽ được sử dụng nếu thư viện máy khách
shell> mysql test Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 10 Server version: 10.2.2-MariaDB-valgrind-max-debug Source distribution 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 [test]> status; -------------- mysql Ver 15.1 Distrib 10.0.25-MariaDB, for Linux [x86_64] using readline 5.2 Connection id: 10 Current database: test Current user: monty@localhost ... Connection: Localhost via UNIX socket ... UNIX socket: /tmp/mysql-dbug.sock
8 /shell> mysql test Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 10 Server version: 10.2.2-MariaDB-valgrind-max-debug Source distribution 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 [test]> status; -------------- mysql Ver 15.1 Distrib 10.0.25-MariaDB, for Linux [x86_64] using readline 5.2 Connection id: 10 Current database: test Current user: monty@localhost ... Connection: Localhost via UNIX socket ... UNIX socket: /tmp/mysql-dbug.sock
9 phát hiện ra rằng máy khách không hỗ trợ TCP/IP - Trong các trường hợp khác thì kết nối TCP/IP thông qua tùy chọn
mysql
8 được sử dụng
Cách kiểm tra giao thức nào được sử dụng
Lệnh
shell> ln -s /dev/null $HOME/.mysql_history1 hiển thị cho bạn thông tin về giao thức nào được sử dụng
shell> mysql test Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 10 Server version: 10.2.2-MariaDB-valgrind-max-debug Source distribution 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 [test]> status; -------------- mysql Ver 15.1 Distrib 10.0.25-MariaDB, for Linux [x86_64] using readline 5.2 Connection id: 10 Current database: test Current user: monty@localhost ... Connection: Localhost via UNIX socket ... UNIX socket: /tmp/mysql-dbug.sock
lệnh mysql
Ngoài ra còn có một số lệnh có thể chạy bên trong máy khách. Lưu ý rằng tất cả các lệnh văn bản phải ở dòng đầu tiên và kết thúc bằng ';'
Tệp mysql_history
Trên Unix, máy khách mysql ghi một bản ghi các câu lệnh đã thực thi vào một tệp lịch sử. Theo mặc định, tệp này có tên là
shell> ln -s /dev/null $HOME/.mysql_history2 và được tạo trong thư mục chính của bạn. Để chỉ định một tệp khác, hãy đặt giá trị của biến môi trường MYSQL_HISTFILE
Các. Tệp mysql_history phải được bảo vệ bằng chế độ truy cập hạn chế vì thông tin nhạy cảm có thể được ghi vào tệp, chẳng hạn như văn bản của câu lệnh SQL có chứa mật khẩu
Nếu bạn không muốn duy trì tệp lịch sử, trước tiên hãy xóa. mysql_history nếu nó tồn tại, sau đó sử dụng một trong các kỹ thuật sau
- Đặt biến MYSQL_HISTFILE thành/dev/null. Để cài đặt này có hiệu lực mỗi khi bạn đăng nhập, hãy đặt cài đặt vào một trong các tệp khởi động của trình bao của bạn
- Tạo nên. mysql_history như một liên kết tượng trưng đến/dev/null
shell> ln -s /dev/null $HOME/.mysql_history
Bạn chỉ cần làm điều này một lần
dấu nhắc Lệnh
Lệnh nhắc cấu hình lại lời nhắc mặc định
shell> ln -s /dev/null $HOME/.mysql_history3. Chuỗi để xác định dấu nhắc có thể chứa các chuỗi đặc biệt sau
mẹo mysql
Phần này mô tả một số kỹ thuật có thể giúp bạn sử dụng
shell> ln -s /dev/null $HOME/.mysql_history4 hiệu quả hơn
Hiển thị kết quả truy vấn theo chiều dọc
Một số kết quả truy vấn dễ đọc hơn nhiều khi được hiển thị theo chiều dọc, thay vì ở định dạng bảng ngang thông thường. Truy vấn có thể được hiển thị theo chiều dọc bằng cách kết thúc truy vấn bằng \G thay vì dấu chấm phẩy. Ví dụ: các giá trị văn bản dài hơn bao gồm các dòng mới thường dễ đọc hơn nhiều với đầu ra dọc
mysql> SELECT * FROM mails WHERE LENGTH[txt] < 300 LIMIT 300,1\G *************************** 1. row *************************** msg_nro: 3068 date: 2000-03-01 23:29:50 time_zone: +0200 mail_from: Monty reply: monty@no.spam.com mail_to: "Thimble Smith" sbj: UTF-8 txt: >>>>> "Thimble" == Thimble Smith writes: Thimble> Hi. I think this is a good idea. Is anyone familiar Thimble> with UTF-8 or Unicode? Otherwise, I´ll put this on my Thimble> TODO list and see what happens. Yes, please do that. Regards, Monty file: inbox-jani-1 hash: 190402944 1 row in set [0.09 sec]
Đối với người mới bắt đầu, một tùy chọn khởi động hữu ích là
shell> ln -s /dev/null $HOME/.mysql_history5 [hoặc
shell> ln -s /dev/null $HOME/.mysql_history6, có tác dụng tương tự]. Nó hữu ích cho các trường hợp khi bạn có thể đưa ra tuyên bố
shell> ln -s /dev/null $HOME/.mysql_history7 nhưng lại quên điều khoản
shell> ln -s /dev/null $HOME/.mysql_history8. Thông thường, một câu lệnh như vậy sẽ xóa tất cả các hàng khỏi bảng. Với
shell> ln -s /dev/null $HOME/.mysql_history5, bạn chỉ có thể xóa các hàng bằng cách chỉ định các giá trị chính xác định chúng. Điều này giúp ngăn ngừa tai nạn
Khi bạn sử dụng tùy chọn
shell> ln -s /dev/null $HOME/.mysql_history5, mysql sẽ đưa ra câu lệnh sau khi nó kết nối với máy chủ MariaDB
SET sql_safe_updates=1, sql_select_limit=1000, sql_max_join_size=1000000;
Câu lệnh SET có các tác dụng sau
- Bạn không được phép thực thi câu lệnh CẬP NHẬT hoặc XÓA trừ khi bạn chỉ định ràng buộc khóa trong mệnh đề WHERE hoặc cung cấp mệnh đề GIỚI HẠN [hoặc cả hai]. Ví dụ
UPDATE tbl_name SET not_key_column=val WHERE key_column=val; UPDATE tbl_name SET not_key_column=val LIMIT 1;
- Máy chủ giới hạn tất cả các kết quả _______50_______1 lớn trong 1.000 hàng trừ khi câu lệnh bao gồm mệnh đề
mysql> SELECT * FROM mails WHERE LENGTH[txt] < 300 LIMIT 300,1\G *************************** 1. row *************************** msg_nro: 3068 date: 2000-03-01 23:29:50 time_zone: +0200 mail_from: Monty reply: monty@no.spam.com mail_to: "Thimble Smith" sbj: UTF-8 txt: >>>>> "Thimble" == Thimble Smith writes: Thimble> Hi. I think this is a good idea. Is anyone familiar Thimble> with UTF-8 or Unicode? Otherwise, I´ll put this on my Thimble> TODO list and see what happens. Yes, please do that. Regards, Monty file: inbox-jani-1 hash: 190402944 1 row in set [0.09 sec]
2 - Máy chủ hủy bỏ các câu lệnh
mysql> SELECT * FROM mails WHERE LENGTH[txt] < 300 LIMIT 300,1\G *************************** 1. row *************************** msg_nro: 3068 date: 2000-03-01 23:29:50 time_zone: +0200 mail_from: Monty reply: monty@no.spam.com mail_to: "Thimble Smith" sbj: UTF-8 txt: >>>>> "Thimble" == Thimble Smith writes: Thimble> Hi. I think this is a good idea. Is anyone familiar Thimble> with UTF-8 or Unicode? Otherwise, I´ll put this on my Thimble> TODO list and see what happens. Yes, please do that. Regards, Monty file: inbox-jani-1 hash: 190402944 1 row in set [0.09 sec]
1 nhiều bảng có thể cần kiểm tra hơn 1.000.000 tổ hợp hàng
Để chỉ định các giới hạn khác với 1.000 và 1.000.000, bạn có thể ghi đè các giá trị mặc định bằng cách sử dụng các tùy chọn
mysql> SELECT * FROM mails WHERE LENGTH[txt] < 300 LIMIT 300,1\G *************************** 1. row *************************** msg_nro: 3068 date: 2000-03-01 23:29:50 time_zone: +0200 mail_from: Monty reply: monty@no.spam.com mail_to: "Thimble Smith" sbj: UTF-8 txt: >>>>> "Thimble" == Thimble Smith writes: Thimble> Hi. I think this is a good idea. Is anyone familiar Thimble> with UTF-8 or Unicode? Otherwise, I´ll put this on my Thimble> TODO list and see what happens. Yes, please do that. Regards, Monty file: inbox-jani-1 hash: 190402944 1 row in set [0.09 sec]4 và
mysql> SELECT * FROM mails WHERE LENGTH[txt] < 300 LIMIT 300,1\G *************************** 1. row *************************** msg_nro: 3068 date: 2000-03-01 23:29:50 time_zone: +0200 mail_from: Monty reply: monty@no.spam.com mail_to: "Thimble Smith" sbj: UTF-8 txt: >>>>> "Thimble" == Thimble Smith writes: Thimble> Hi. I think this is a good idea. Is anyone familiar Thimble> with UTF-8 or Unicode? Otherwise, I´ll put this on my Thimble> TODO list and see what happens. Yes, please do that. Regards, Monty file: inbox-jani-1 hash: 190402944 1 row in set [0.09 sec]5
mysql --safe-updates --select_limit=500 --max_join_size=10000
Vô hiệu hóa tự động kết nối lại mysql
Nếu máy khách mysql mất kết nối với máy chủ trong khi gửi câu lệnh, nó sẽ ngay lập tức và tự động cố gắng kết nối lại một lần với máy chủ và gửi lại câu lệnh. Tuy nhiên, ngay cả khi mysql kết nối lại thành công, kết nối đầu tiên của bạn đã kết thúc và tất cả các đối tượng và cài đặt phiên trước đó của bạn sẽ bị mất. các bảng tạm thời, chế độ tự động gửi và các biến phiên và do người dùng xác định. Ngoài ra, mọi giao dịch hiện tại sẽ quay trở lại. Hành vi này có thể gây nguy hiểm cho bạn, như trong ví dụ sau khi máy chủ bị tắt và khởi động lại giữa câu lệnh thứ nhất và câu lệnh thứ hai mà bạn không biết
mysql --user=user_name --password=your_password db_name0
Biến người dùng @a đã bị mất khi kết nối và sau khi kết nối lại, nó không được xác định. Nếu điều quan trọng là phải chấm dứt mysql do lỗi nếu kết nối bị mất, bạn có thể khởi động ứng dụng khách mysql bằng tùy chọn
mysql> SELECT * FROM mails WHERE LENGTH[txt] < 300 LIMIT 300,1\G *************************** 1. row *************************** msg_nro: 3068 date: 2000-03-01 23:29:50 time_zone: +0200 mail_from: Monty reply: monty@no.spam.com mail_to: "Thimble Smith" sbj: UTF-8 txt: >>>>> "Thimble" == Thimble Smith writes: Thimble> Hi. I think this is a good idea. Is anyone familiar Thimble> with UTF-8 or Unicode? Otherwise, I´ll put this on my Thimble> TODO list and see what happens. Yes, please do that. Regards, Monty file: inbox-jani-1 hash: 190402944 1 row in set [0.09 sec]6