sql >> データベース >  >> RDS >> Mysql

外部キーとしてvarcharのみを含むMySQLテーブル

    簡単なテストを実行しました。3つのテーブルを作成します。1つは2つの列を持つデータ自体を保持し、ID(int)とデータ(varchar [120])、もう1つはIDを外部キーとして使用し、最後のテーブルは外部キーとしてのデータ:

    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
    

    したがって、少なくともMySQL 5.1バージョンでは、データはvarchar外部キーで複製されないと思います。



    1. エラー#2002ソケット'/Applications/MAMP/tmp/mysql/mysql.sock'を介してローカルMySQLサーバーに接続できません(2)

    2. MySQLでinitcap機能を実現するにはどうすればよいですか?

    3. エイリアスmysqlの使用中に不明な列

    4. SQLステートメントでmysqliをDELIMITERと連携させる方法は?