Tôi có các bảng mà tôi đã thử thiết lập các mối quan hệ PK FK nhưng tôi muốn xác minh điều này. Làm thế nào tôi có thể hiển thị các hạn chế PK/FK? Tôi thấy this trang thủ công, nhưng nó không hiển thị các ví dụ và tìm kiếm google của tôi cũng không có kết quả. Cơ sở dữ liệu của tôi là chứng chỉ 1 và các bảng bị ràng buộc của tôi là các thực hành và cred_insurances.Hiển thị các ràng buộc trên bảng lệnh
Trả lời
tôi sử dụng
SHOW CREATE TABLE mytable;
này cho bạn thấy các câu lệnh SQL cần thiết để receate mytable
trong hình thức hiện tại của nó. Bạn có thể xem tất cả các cột và loại của chúng (như DESC
) nhưng nó cũng cho bạn thấy thông tin ràng buộc (và kiểu bảng, bảng mã, v.v.).
Hãy thử thực hiện:
SHOW TABLE STATUS FROM credentialing1;
Các ràng buộc khoá ngoại được liệt kê trong Comment cột của đầu ra.
Tôi chỉ thấy các nhận xét bảng trong cột Nhận xét. Nó có lẽ là một cái gì đó để làm với các loại InnoDB. – clockworkgeek
Nhận xét chỉ dành cho nhận xét của người dùng. Đó chắc chắn không phải là nơi lưu trữ các định nghĩa FK! Nếu chúng dành cho bạn - nó phải được thực hiện thay cho bạn bởi một số công cụ RDBMS. – stamster
Đơn giản chỉ cần truy vấn INFORMATION_SCHEMA:
USE INFORMATION_SCHEMA;
SELECT TABLE_NAME,
COLUMN_NAME,
CONSTRAINT_NAME,
REFERENCED_TABLE_NAME,
REFERENCED_COLUMN_NAME
FROM KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = "<your_database_name>"
AND TABLE_NAME = "<your_table_name>"
AND REFERENCED_COLUMN_NAME IS NOT NULL;
Đây là câu trả lời hay nhất vì nó cung cấp cho bạn kết quả theo định dạng mà bạn có thể sử dụng theo chương trình. Tất nhiên bạn sẽ cần phải thêm một mệnh đề WHERE để thu hẹp kết quả –
Điều này đã giúp tôi tìm thấy một bảng bị hỏng có cột 'id' tham chiếu một số khóa ngoại. Không có thắc mắc bảng có 1452 IntegrityError. –
Đây là câu trả lời tuyệt vời! Cảm ơn @ Resh32 – simhumileco
Bạn có thể sử dụng này:
select
table_name,column_name,referenced_table_name,referenced_column_name
from
information_schema.key_column_usage
where
referenced_table_name is not null
and table_schema = 'my_database'
and table_name = 'my_table'
Hoặc sử dụng đầu ra định dạng tốt hơn này:
select
concat(table_name, '.', column_name) as 'foreign key',
concat(referenced_table_name, '.', referenced_column_name) as 'references'
from
information_schema.key_column_usage
where
referenced_table_name is not null
and table_schema = 'my_database'
and table_name = 'my_table'
ORA-00.942: bảng hoặc xem không tồn tại 00942. 00000 - "bảng hoặc xem không tồn tại" * Nguyên nhân: * Hành động: Lỗi tại Line: 29 Cột: 5 Dòng 29 là "information_schema.key_column_usage" – noboundaries
@noboundaries bạn đang cố gắng trên Oracle, câu hỏi là về MySQL – ymajoros
Vấn đề chính với câu trả lời xác nhận bạn sẽ phải phân tích đầu ra để nhận thông tin. Đây là truy vấn cho phép bạn nhận chúng theo cách dễ sử dụng hơn:
SELECT cols.TABLE_NAME, cols.COLUMN_NAME, cols.ORDINAL_POSITION,
cols.COLUMN_DEFAULT, cols.IS_NULLABLE, cols.DATA_TYPE,
cols.CHARACTER_MAXIMUM_LENGTH, cols.CHARACTER_OCTET_LENGTH,
cols.NUMERIC_PRECISION, cols.NUMERIC_SCALE,
cols.COLUMN_TYPE, cols.COLUMN_KEY, cols.EXTRA,
cols.COLUMN_COMMENT, refs.REFERENCED_TABLE_NAME, refs.REFERENCED_COLUMN_NAME,
cRefs.UPDATE_RULE, cRefs.DELETE_RULE,
links.TABLE_NAME, links.COLUMN_NAME,
cLinks.UPDATE_RULE, cLinks.DELETE_RULE
FROM INFORMATION_SCHEMA.`COLUMNS` as cols
LEFT JOIN INFORMATION_SCHEMA.`KEY_COLUMN_USAGE` AS refs
ON refs.TABLE_SCHEMA=cols.TABLE_SCHEMA
AND refs.REFERENCED_TABLE_SCHEMA=cols.TABLE_SCHEMA
AND refs.TABLE_NAME=cols.TABLE_NAME
AND refs.COLUMN_NAME=cols.COLUMN_NAME
LEFT JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS AS cRefs
ON cRefs.CONSTRAINT_SCHEMA=cols.TABLE_SCHEMA
AND cRefs.CONSTRAINT_NAME=refs.CONSTRAINT_NAME
LEFT JOIN INFORMATION_SCHEMA.`KEY_COLUMN_USAGE` AS links
ON links.TABLE_SCHEMA=cols.TABLE_SCHEMA
AND links.REFERENCED_TABLE_SCHEMA=cols.TABLE_SCHEMA
AND links.REFERENCED_TABLE_NAME=cols.TABLE_NAME
AND links.REFERENCED_COLUMN_NAME=cols.COLUMN_NAME
LEFT JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS AS cLinks
ON cLinks.CONSTRAINT_SCHEMA=cols.TABLE_SCHEMA
AND cLinks.CONSTRAINT_NAME=links.CONSTRAINT_NAME
WHERE cols.TABLE_SCHEMA=DATABASE()
AND cols.TABLE_NAME="table"
afaik để yêu cầu information_schema
bạn cần đặc quyền. Nếu quý vị cần danh sách đơn giản của các phím, bạn có thể sử dụng lệnh này:
SHOW INDEXES IN <tablename>
cảm ơn đã làm việc cho tôi –
Làm thế nào là gọi information_schema là tốt hơn này, cảm ơn rất nhiều –
Cảm ơn, đây là tốt nhất –
Ngoài ra còn có một công cụ mà oracle khiến gọi mysqlshow
Nếu bạn chạy nó với --k keys $table_name
tùy chọn nó sẽ hiển thị các phím.
SYNOPSIS
mysqlshow [options] [db_name [tbl_name [col_name]]]
.......
.......
.......
· --keys, -k
Show table indexes.
dụ:
╰─➤ mysqlshow -h 127.0.0.1 -u root -p --keys database tokens
Database: database Table: tokens
+-----------------+------------------+--------------------+------+-----+---------+----------------+---------------------------------+---------+
| Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment |
+-----------------+------------------+--------------------+------+-----+---------+----------------+---------------------------------+---------+
| id | int(10) unsigned | | NO | PRI | | auto_increment | select,insert,update,references | |
| token | text | utf8mb4_unicode_ci | NO | | | | select,insert,update,references | |
| user_id | int(10) unsigned | | NO | MUL | | | select,insert,update,references | |
| expires_in | datetime | | YES | | | | select,insert,update,references | |
| created_at | timestamp | | YES | | | | select,insert,update,references | |
| updated_at | timestamp | | YES | | | | select,insert,update,references | |
+-----------------+------------------+--------------------+------+-----+---------+----------------+---------------------------------+---------+
+--------+------------+--------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+--------+------------+--------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| tokens | 0 | PRIMARY | 1 | id | A | 2 | | | | BTREE | | |
| tokens | 1 | tokens_user_id_foreign | 1 | user_id | A | 2 | | | | BTREE | | |
+--------+------------+--------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
Tương tự như @Resh32, nhưng không có nhu cầu sử dụng các USE
tuyên bố:
SELECT TABLE_NAME,
COLUMN_NAME,
CONSTRAINT_NAME,
REFERENCED_TABLE_NAME,
REFERENCED_COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = "database_name"
AND TABLE_NAME = "table_name"
AND REFERENCED_COLUMN_NAME IS NOT NULL;
hữu ích, ví dụ sử dụng ORM.
Điều đó sẽ không hiển thị các quy tắc ràng buộc thực tế - ví dụ 'ON UPDATE CASCADE' – stamster
- 1. Hiển thị các ràng buộc trong một bảng
- 2. Mysql hiển thị tạo ra ràng buộc?
- 3. Silverlight DataGridTextColumn Hiển thị ràng buộc
- 4. Làm cách nào để hiển thị các ràng buộc duy nhất của bảng trong MySQL?
- 5. Ràng buộc với các lệnh trong WinForms
- 6. Ràng buộc một tham số hiển thị vào câu lệnh 'hoặc' trong Knockout
- 7. SQL Server 2008- Nhận các ràng buộc bảng
- 8. OneWay ràng buộc trên WinForms?
- 9. Ràng buộc bảng SQLite - duy nhất trên nhiều cột
- 10. sql: cần thay đổi ràng buộc trên bảng đổi tên?
- 11. Hiển thị "Tán" trên dòng lệnh
- 12. Hiển thị các kết quả không rõ ràng của python ở dạng bảng, đẹp
- 13. Dữ liệu ràng buộc các thuộc tính enum thành lưới và hiển thị mô tả
- 14. WPF Ràng buộc một ListBox vào một enum, hiển thị các thuộc tính mô tả
- 15. Các bảng hiển thị mysql sắp xếp theo tên bảng
- 16. Lệnh ràng buộc bên trong DataGridTemplateColumn
- 17. Hiển thị tên bảng trong câu lệnh chọn
- 18. tạo ràng buộc bảng trong mysql
- 19. Hiển thị hình ảnh trong một DataGridViewImageColumn ràng buộc văn bản lĩnh vực
- 20. WPF: Ràng buộc các lệnh trong mã phía sau
- 21. Tìm bảng nào ràng buộc thuộc về
- 22. Có cách nào để có được các ràng buộc của một bảng trong SQLite không?
- 23. Ràng buộc duy nhất trên nhiều cột
- 24. Làm thế nào tôi có thể thả tất cả ràng buộc ràng buộc mặc định trên một bảng
- 25. Derby - ràng buộc
- 26. Ràng buộc các Procs
- 27. SQLite3 có hỗ trợ các ràng buộc khoá ngoại không?
- 28. MySQL: làm thế nào tôi có thể thấy tất cả các ràng buộc trên một bảng?
- 29. Thay đổi bảng để cung cấp ràng buộc khóa ngoài
- 30. Ràng buộc khoá ngoại có được kiểm tra trên câu lệnh cập nhật SQL không cập nhật các cột có ràng buộc không?
Tôi không nghĩ rằng nó cho thấy các mối quan hệ fk đến? như trong ví dụ, 'a.col_one references b.col_one' và trong' show create table b' sẽ không chứa chi tiết về mối quan hệ đã nói ở trên. –
Tôi xác nhận rằng lệnh này không hiển thị ràng buộc khóa ngoài. –
Hãy coi chừng MariaDB bắt đầu bằng 10.2 sẽ trả về kết quả khó xử ở đây. https://jira.mariadb.org/browse/MDEV-15377 – stamster