Từ một tập lệnh shell, làm thế nào tôi có thể kiểm tra xem một bảng trong cơ sở dữ liệu MySQL có tồn tại hay không?


8

Tôi đang cố gắng viết một kịch bản cho phép người dùng chọn thao tác cần thực hiện trên bàn. Tôi muốn kiểm tra xem bảng có tồn tại hay không. Nếu nó tồn tại, tôi sẽ tiếp tục những thứ khác nếu không tôi sẽ nói bảng không tồn tại. Làm thế nào tôi có thể đạt được điều này.

Câu trả lời:


12
if [ $(mysql -N -s -u root -p -e \
    "select count(*) from information_schema.tables where \
        table_schema='db_name' and table_name='table_name';") -eq 1 ]; then
    do something
else
    echo "table <table_name> does not exist"
    exit 1
fi
  • -N bỏ qua tên cột
  • -s cho đầu ra không cần thiết

2
Để tập lệnh của bạn đăng nhập vào MySQL mà không dừng lại và nhắc bạn nhập mật khẩu, bạn có thể tạo một .my.cnftệp trong thư mục chính của mình và thêm một [client]khối chứa password="my_password". Có một phần cho các tập tin tùy chọn người dùng trong hướng dẫn.
Ladadadada

4

Trong MySQL, bạn có thể sử dụng -e từ trình bao

mysql -e "desc main_db.clients" > /dev/null 2>&1
echo $?

3

Nếu bạn muốn một phương thức không liên quan đến việc chạy máy khách mysql và đăng nhập vào máy chủ mysql, bạn có thể thực hiện việc này:

if ls -l /var/lib/mysql/database/table.frm 2> /dev/null > /dev/null
then
  echo Table exists
else
  echo Table does not exist
fi

Bạn sẽ phải thay thế đường dẫn đến thư mục dữ liệu, tên cơ sở dữ liệu và tên bảng của bạn trong dòng đầu tiên.

Hãy cẩn thận:

  1. Điều này sẽ không hoạt động nếu bạn đang sử dụng InnoDB và không sử dụng innodb-file-per-table. tức là kịch bản có thể nói bảng không tồn tại mặc dù nó có.
  2. Có thể tồn tại tệp đó vì nhiều lý do bao gồm sao chép các bảng xung quanh bằng cách sử dụng hệ thống tệp hoặc chuyển từ MyISAM sang InnoDB. tức là kịch bản có thể nói rằng bảng tồn tại ngay cả khi nó không tồn tại.

Nó không đáng tin cậy như các phương thức khác đã được trình bày vì những lý do trên nhưng nó tránh được máy khách mysql nên có thể vẫn còn giá trị.

Lưu ý rằng tất cả các phương pháp được trình bày ở đây dựa trên việc bạn nhận được quyền của riêng mình (hệ thống tệp hoặc MySQL). Nếu bạn làm cho họ sai, rất có thể bạn sẽ nhận được một âm tính giả.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.