Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL таблица само с varchar като външен ключ

Проведох прост тест:създайте 3 таблици, едната да съхранява самите данни с две колони и ID (int) и данните (varchar[120]), друга таблица, която използва идентификатора като външен ключ и последна, която използва данните като външен ключ:

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 записа във всяка таблица и сравни крайния размер на таблицата:

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

Така че предполагам, че данните НЕ се репликират във Varchar външен ключ, добре, поне във версията на MySQL 5.1.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Хибернация:каква е разликата между MySQLDialect и MySQLInnoDBDialect?

  2. Как да видите съдържанието на таблицата в Mysql Workbench GUI?

  3. Как да коригирате групата заявки с only_full_group_by

  4. mysqldb python избягва? или %s?

  5. Примери за DAYOFMONTH() – MySQL