ฉันจะทราบได้อย่างไรว่าตาราง mysql ใช้ myISAM หรือ InnoDB Engine


86

ใน MySQL ไม่มีวิธีระบุเครื่องมือจัดเก็บข้อมูลสำหรับฐานข้อมูลเฉพาะสำหรับตารางเดียวเท่านั้น อย่างไรก็ตามคุณสามารถระบุเครื่องมือจัดเก็บข้อมูลที่จะใช้ในช่วงหนึ่งเซสชันด้วย:

SET storage_engine=InnoDB;

ดังนั้นคุณไม่จำเป็นต้องระบุสำหรับแต่ละตาราง

ฉันจะยืนยันได้อย่างไรว่าตารางทั้งหมดใช้ InnoDB จริงหรือไม่?


คำตอบ:


138

หากคุณใช้ SHOW CREATE TABLE คุณต้องแยกวิเคราะห์เครื่องยนต์ออกจากแบบสอบถาม

การเลือกจากฐานข้อมูล INFORMATION_SCHEMA เป็นการปฏิบัติที่ไม่ดีเนื่องจากนักพัฒนาขอสงวนสิทธิ์ในการเปลี่ยนแปลงสคีมาได้ตลอดเวลา (แม้ว่าจะไม่น่าเป็นไปได้ก็ตาม)

แบบสอบถามที่ถูกต้องที่จะใช้คือสถานะตารางแสดง - คุณสามารถรับข้อมูลเกี่ยวกับตารางทั้งหมดในฐานข้อมูล:

SHOW TABLE STATUS FROM `database`;

หรือสำหรับตารางเฉพาะ:

SHOW TABLE STATUS FROM `database` LIKE 'tablename';

คอลัมน์หนึ่งที่คุณจะได้รับกลับมาคือ Engine


+1 ยกเว้นคุณจะได้รับอนุญาตให้ดูสคีมาข้อมูลสำหรับวัตถุที่คุณได้รับอนุญาตเสมอ
Konerak

@Konerak อาจริงพอแล้ว - ฉันจะแก้ไขคำตอบ นอกจากนี้ฉันยังพบข้อบกพร่องบางอย่างที่การเลือกจาก information_schema ไม่ได้ผลในกรณีที่ผู้ใช้มีสิทธิ์ที่ถูกต้อง
TehShrike

16
SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'db name' AND ENGINE != 'InnoDB'

ข้อแม้เท่านั้นคือข้อมูลใน INFORMATION_SCHEMA ถูกแคชดังนั้นควรใช้FLUSH TABLESก่อนคำสั่งที่คุณให้ไว้
OMG Ponies

ช่วยให้ฉันสามารถนับจำนวนตาราง InnoDB ใน DB ได้
Anon30

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.