Bảng MySQL tồn tại nhưng không hiển thị

Chúng ta sẽ hiểu thêm về cách sử dụng mệnh đề “nếu không tồn tại” để tạo bảng trong bài viết này với sự trợ giúp của các ví dụ khác nhau

Cách chúng ta có thể tạo bảng bằng kỹ thuật “nếu không tồn tại”

Đầu tiên chúng ta sẽ mở MySQL trong terminal

$ sudo mysql

Bảng MySQL tồn tại nhưng không hiển thị

Hiển thị cơ sở dữ liệu chúng tôi có

HIỂN THỊ CƠ SỞ DỮ LIỆU;

Bảng MySQL tồn tại nhưng không hiển thị

Một danh sách tất cả các cơ sở dữ liệu sẽ được hiển thị, chúng tôi sẽ sử dụng shopping_mart_data

SỬ DỤNG shopping_mart_data;

Bảng MySQL tồn tại nhưng không hiển thị

Để liệt kê các bảng của cơ sở dữ liệu này, chúng ta sẽ chạy lệnh sau

HIỂN THỊ BẢNG;

Bảng MySQL tồn tại nhưng không hiển thị

Chúng tôi có một bảng có tên là Gocery_bill, trước tiên chúng tôi sẽ thử tạo một bảng có cùng tên

TẠO BẢNG Grocery_bill (Employee_Id INT, Employee_name VARCHAR(50));

Bảng MySQL tồn tại nhưng không hiển thị

Chúng ta có thể thấy một lỗi đã được tạo ra rằng “Bảng ‘Grocery_bill’ đã tồn tại”, bây giờ chúng ta sẽ chạy lệnh trên bằng cách sử dụng tùy chọn “nếu không tồn tại”

TẠO BẢNG nếu không tồn tại Grocery_bill (Employee_Id INT, Employee_name VARCHAR(50));

Bảng MySQL tồn tại nhưng không hiển thị

Lệnh chạy thành công nhưng chúng tôi đã thảo luận ở trên rằng không thể tạo hai bảng có cùng tên, vì vậy chúng tôi sẽ hiển thị lại các bảng của cơ sở dữ liệu để xác minh xem một bảng khác có được tạo hay không

HIỂN THỊ BẢNG;

Bảng MySQL tồn tại nhưng không hiển thị

Như vậy đã khẳng định rằng không thể tạo hai bảng có cùng tên và nếu chúng ta sử dụng “nếu không tồn tại”, nó sẽ chạy lệnh thành công mà không tạo ra lỗi nhưng sẽ không tạo bảng đã tồn tại với cùng một bảng . Bây giờ chúng ta sẽ tạo bảng bằng cách sử dụng lại mệnh đề “nếu không tồn tại” với một tên khác

TẠO BẢNG nếu không tồn tại Employee_data (Employee_Id INT, Employee_name VARCHAR(50));

Bảng MySQL tồn tại nhưng không hiển thị

Một bảng mới đã được tạo thành công để xác minh điều này một lần nữa hiển thị các bảng của cơ sở dữ liệu

HIỂN THỊ BẢNG;

Bảng MySQL tồn tại nhưng không hiển thị

Bảng đã được tạo vì không có bảng nào đã tồn tại với tên “Employee_data”

Phần kết luận

MySQL được nhiều công ty như Amazon và Twitter sử dụng vì các tính năng hiệu quả cao và các mệnh đề tích hợp khác nhau có thể đảm bảo hoàn thành các nhiệm vụ một cách dễ dàng. Trong MySQL tất cả dữ liệu được quản lý trong các bảng sau khi tạo, để tránh lỗi trùng bảng đã tồn tại chúng ta sử dụng mệnh đề “nếu không tồn tại” trong câu lệnh tạo bảng. Trong bài viết này, chúng ta đã thảo luận nếu mệnh đề “nếu không tồn tại” được sử dụng với câu lệnh “CREATE TABLE” thì nó sẽ thực thi lệnh thành công mà không tạo ra lỗi và chỉ tạo bảng nếu không có bảng nào khác có tên tương tự.

Tôi gặp phải một tình huống khó chịu khi câu lệnh ALTER TABLE không thành công do khóa ngoại không bị hủy trước đó. Điều này dẫn đến một số mâu thuẫn trong từ điển dữ liệu InnoDB (có thể là do http. // lỗi. mysql. com/lỗi. php?id=58215)

câu hỏi liên quan ở đây. https. // stackoverflow. com/questions/16857451/error-in-foreign-key-constraint-on-a-dropped-table

mysql> ALTER TABLE `visits` CHANGE COLUMN `variation_visitor_id` `variation_visitor_id` INT(11) NOT NULL  ;

Lỗi khi đổi tên của '. /db/#sql-482c_8448f' thành '. /db/lượt truy cập' (không. 150)

mysql> SHOW ENGINE INNODB STATUS;

Error in foreign key constraint of table db/visits:
 FOREIGN KEY (`variation_visitor_id`) REFERENCES `variations_visitors` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Cannot find an index in the referenced table where the
referenced columns appear as the first columns, or column types
in the table and the referenced table do not match for constraint.
Note that the internal storage type of ENUM and SET changed in
tables created with >= InnoDB-4.1.12, and such columns in old tables
cannot be referenced by such columns in new tables.
See http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html 
for correct foreign key definitippon.

Vì tôi không thể khôi phục bảng #sql-482c_8448f để truy cập, tôi quyết định nhập lại bảng từ bản sao lưu được thực hiện ngay trước khi thay đổi. Tuy nhiên điều này không thành công. Đang điều tra

  • Ràng buộc đã bị xóa khỏi INFORMATION_SCHEMA. TABLE_CONSTRAINTS và INFORMATION_SCHEMA. SỐ LIỆU THỐNG KÊ
  • Nhưng ràng buộc vẫn hiển thị trong INFORMATION_SCHEMA. INNODB_SYS_FOREIGN;
  • Bảng không tồn tại nên tôi không thể xóa khóa ngoại
  • Tôi không thể tạo bảng mà không có lỗi

SQL/Lỗi

mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_FOREIGN WHERE ID='db/fk_visits_variations_visitors1';

+-----------------------------------+-----------+------------------------+--------+------+
| ID                                | FOR_NAME  | REF_NAME               | N_COLS | TYPE |
+-----------------------------------+-----------+------------------------+--------+------+
| db/fk_visits_variations_visitors1 | db/visits | db/variations_visitors |      1 |   48 |
+-----------------------------------+-----------+------------------------+--------+------+

Cố gắng tạo lại bảng mà không có khóa ngoại gây ra lỗi 150

mysql>

SET UNIQUE_CHECKS = 0;
SET FOREIGN_KEY_CHECKS = 0;

CREATE TABLE `visits` (
  `id` INT(11) NOT NULL AUTO_INCREMENT  ,
  `variation_visitor_id` INT(11) NOT NULL  ,
  PRIMARY KEY (`id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

SET FOREIGN_KEY_CHECKS = 1;
SET UNIQUE_CHECKS = 1;

ERROR 1005 (HY000) at line 26: Can't create table 'db.visits' (errno: 150)

mysql> SHOW ENGINE INNODB STATUS;

Error in foreign key constraint of table db/visits:
there is no index in the table which would contain
the columns as the first columns, or the data types in the
table do not match the ones in the referenced table
or one of the ON .. SET NULL columns is declared NOT NULL. Constraint:
,
  CONSTRAINT "fk_visits_variations_visitors1" FOREIGN KEY ("variation_visitor_id") REFERENCES "variations_visitors" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION

Cố gắng tạo nó gây ra lỗi 121

mysql>

SET UNIQUE_CHECKS = 0;
SET FOREIGN_KEY_CHECKS = 0;

CREATE TABLE `visits` (
  `id` INT(11) NOT NULL AUTO_INCREMENT  ,
  `variation_visitor_id` INT(11) NOT NULL  ,
  PRIMARY KEY (`id`),
  KEY `fk_visits_variations_visitors1` (`variation_visitor_id`),
  CONSTRAINT `fk_visits_variations_visitors1` FOREIGN KEY (`variation_visitor_id`) REFERENCES `variations_visitors` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

SET FOREIGN_KEY_CHECKS = 1;
SET UNIQUE_CHECKS = 1;

ERROR 1005 (HY000) at line 26: Can't create table 'db.visits' (errno: 121)

mysql> SHOW ENGINE INNODB STATUS;

Error in foreign key constraint creation for table `db`.`visits`.
A foreign key constraint of name `db`.`fk_visits_variations_visitors1`
already exists. (Note that internally InnoDB adds 'databasename'
in front of the user-defined constraint name.)
Note that InnoDB's FOREIGN KEY system tables store
constraint names as case-insensitive, with the
MySQL standard latin1_swedish_ci collation. If you
create tables or databases whose names differ only in
> the character case, then collisions in constraint
names can occur. Workaround: name your constraints
explicitly with unique names.

Cuối cùng, tôi đã sử dụng một tên khóa ngoại mới. Tôi không mong đợi điều này hoạt động nhưng nó cho phép tạo bảng

mysql>

SET UNIQUE_CHECKS = 0;
SET FOREIGN_KEY_CHECKS = 0;

CREATE TABLE `visits` (
  `id` INT(11) NOT NULL AUTO_INCREMENT  ,
  `variation_visitor_id` INT(11) NOT NULL  ,
  PRIMARY KEY (`id`),
  KEY `fk_visits_variations_visitors2` (`variation_visitor_id`),
  CONSTRAINT `fk_visits_variations_visitors2` FOREIGN KEY (`variation_visitor_id`) REFERENCES `variations_visitors` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

SET FOREIGN_KEY_CHECKS = 1;
SET UNIQUE_CHECKS = 1;

Chỉ cần xóa bảng sau khi xóa bản ghi sai trong INFORMATION_SCHEMA. INNODB_SYS_FOREIGN, cho phép nhập với tên khóa ngoại ban đầu

Làm cách nào tôi có thể xem tất cả trạng thái bảng trong MySQL?

Bạn cũng có thể lấy danh sách này bằng lệnh mysqlshow --status db_name. Mệnh đề LIKE, nếu có, cho biết tên bảng nào sẽ khớp. .
Tên. tên của cái bàn
Động cơ. Công cụ lưu trữ cho bảng. .
Phiên bản. .
Row_format. .
hàng. .
Avg_row_length. .
data_length. .
Max_data_length

Lower_case_table_names trong MySQL là gì?

Sử dụng Lower_case_table_names=0 trên Unix và Lower_case_table_names=2 trên Windows. Điều này giữ nguyên chữ cái của cơ sở dữ liệu và tên bảng . Điều bất lợi của điều này là bạn phải đảm bảo rằng các câu lệnh của bạn luôn đề cập đến tên bảng và cơ sở dữ liệu của bạn với ký tự chính xác trên Windows.

Làm cách nào để sửa chữa dòng lệnh cơ sở dữ liệu MySQL?

Chạy Quy trình khôi phục InnoDB .
Định vị và mở tệp cấu hình chung bằng trình soạn thảo văn bản yêu thích của bạn. .
Thêm tùy chọn sau vào my. tập tin cnf. [mysqld] innodb_force_recovery=4. .
lưu và đóng tập tin
Khởi động lại máy chủ MySQL để đảm bảo tệp cấu hình mới được áp dụng. systemctl khởi động lại mysql

Tạo bảng là gì nếu không tồn tại?

Mọi câu lệnh CREATE DATABASE IF NOT EXISTS đều được sao chép, cho dù cơ sở dữ liệu đã tồn tại trên nguồn hay chưa. Tương tự, mọi câu lệnh CREATE TABLE IF NOT EXISTS không có SELECT đều được sao chép, cho dù bảng đã tồn tại trên nguồn hay chưa .