sql >> Database >  >> RDS >> Mysql

MySQL-tabel met alleen een varchar als externe sleutel

Ik heb een eenvoudige test uitgevoerd:maak 3 tabellen, een om de gegevens zelf te bewaren met twee kolommen, en ID (int) en de gegevens (varchar [120]), een andere tabel die de ID als externe sleutel gebruikt en een laatste die gebruik maakt van de gegevens als externe sleutel:

CREATE TABLE `dados` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(120) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`) USING BTREE,
  KEY `idx` (`id`,`name`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

CREATE TABLE `refINT` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `dado` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `id` (`dado`),
  CONSTRAINT `id` FOREIGN KEY (`dado`) REFERENCES `dados` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

CREATE TABLE `refSTR` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `dado` varchar(120) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
  KEY `nome` (`dado`),
  CONSTRAINT `nome` FOREIGN KEY (`dado`) REFERENCES `dados` (`name`) ON DELETE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

100 records in elke tafel ingevoegd en de grootte van de finaletafel vergeleken:

dados:  192.0 KB
refINT: 32.0 KB
refSTR: 32.0 KB

Dus ik denk dat de gegevens NIET worden gerepliceerd in de externe sleutel van varchar, nou ja, in ieder geval in de MySQL 5.1-versie.



  1. Genereer INSERT-instructies van SQLite-queryresultaten

  2. phpMyAdmin op MySQL 8.0

  3. NodeJS:MySQL roept soms ETIMEDOUT-fout op

  4. Gedrag van SQL Server 2016-queryplan voor tijdelijke tabellen