sql >> Database >  >> RDS >> Mysql

mysql innodb:beschrijf tabel toont geen kolomverwijzingen, wat laat ze zien?

Bij het testen worden de externe sleutels niet op mijn computer gemaakt met deze syntaxis:

CREATE TABLE bugs (
  ...
  reported_by       VARCHAR(100) REFERENCES accounts(account_name),
  ...
 ) ENGINE = INNODB;

Maar dat zijn ze wel als ik deze aanmaakverklaring gebruik:

CREATE TABLE bugs (
  ...
  reported_by       VARCHAR(100),
  ...
  FOREIGN KEY (reported_by) REFERENCES accounts(account_name)
 ) ENGINE = INNODB;

Een gemakkelijke manier om te zien of er externe sleutels op een tafel staan, is:

show create table bugs_products

Of u kunt het informatieschema opvragen:

select
  table_schema
, table_name
, column_name
, referenced_table_schema
, referenced_table_name
, referenced_column_name
from information_schema.KEY_COLUMN_USAGE
where table_name = 'bugs'

Controleer ook of u de InnoDB-opslagengine gebruikt. De MyISAM-engine ondersteunt geen externe sleutels. Je kunt de motor vinden als:

select table_schema, table_name, engine
from information_schema.TABLES
where table_name = 'bugs'

Als u een externe sleutel op een MyISAM-tabel probeert te maken, worden de verwijzingen in stilte weggegooid en doet het alsof het lukt.




  1. mysql krijgt last_insert_id() in een trigger

  2. Kan ik SQL-selecties opnieuw ordenen nadat de limiet is toegepast?

  3. PostgreSQL 11 upgraden naar PostgreSQL 12 zonder downtime

  4. Hoe het MySQL-rootwachtwoord opnieuw in te stellen