Come sapere il motore di archiviazione utilizzato di un database?


13

In precedenza, su ogni database creato, utilizzo:

mysql -u root -p
CREATE DATABASE dbname CHARACTER SET utf8 COLLATE utf8_bin;
GRANT ALL ON dbname.* TO 'dbuser'@'localhost';

e quindi utilizzare il database senza pensare a MyISAM o InnoDB

Come sapere il motore di archiviazione utilizzato di un database?

Risposte:


14

Puoi controllare per tabella in questo modo:

USE <database>;
SHOW TABLE STATUS\G

otterrai un output lungo queste linee:

root@localhost/database> show table status\G
*************************** 1. row ***************************
           Name: tablename
         Engine: MyISAM
        Version: 10
     Row_format: Fixed
           Rows: 101
 Avg_row_length: 70
    Data_length: 7070
Max_data_length: 19703248369745919
   Index_length: 2048
      Data_free: 0
 Auto_increment: 1004
    Create_time: 2009-12-07 20:15:53
    Update_time: 2010-11-10 21:55:01
     Check_time: NULL
      Collation: latin1_swedish_ci
       Checksum: NULL
 Create_options: 
        Comment: 

in qualsiasi modo tu sappia di fare tutte le tabelle in un DB (oltre a scrivere uno script SHOW TABLEper ogni tabella nel DB)?
voretaq7,

2
@ voretaq7 lo "SHOW TABLE STATUS" mostra tutte le tabelle per impostazione predefinita.
Coop

fico - Sono un ragazzo di Postgres, quindi tutta questa roba su MySQL e sui motori di archiviazione multipli è strana per me :-)
voretaq7

5

Utilizzare il comando 'show engine' per visualizzare il motore predefinito attivo

Aggiungi default-storage-engine = InnoDB nella sezione [mysqld] del file my.cnf per rendere attivo il motore predefinito.

Utilizzare il comando 'show create table nome_tabella' per visualizzare il motore predefinito nella tabella.


SHOW ENGINEmi dà ERRORE 1064 (42000).
mstrap,

1
show engines;
wt

4

Questa query elenca tutte le tabelle InnoDB e i loro database in MySQL:

SELECT table_name, table_schema 
FROM information_schema.tables 
WHERE engine = 'InnoDB';

Puoi anche elencare tutte le tabelle e i loro motori di archiviazione:

SELECT table_name, table_schema, engine
FROM information_schema.tables;

Ho provato la seconda query - Ottengo l'errore: ERROR 1146 (42S02): Table 'information_scheme.tables' doesn't exist (su MySQL 5.6.37)
nnyby

1

Per ottenere il nome del motore per una tabella specifica

use <database_name>
show table status like '<table_name>';

Per cambiare motore

alter table <table_name> engine <engine_name>;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.