Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Bảng MySQL chỉ có varchar làm khóa ngoại

Tôi đã chạy một bài kiểm tra đơn giản:tạo 3 bảng, một bảng để giữ dữ liệu với hai cột và ID (int) và dữ liệu (varchar [120]), một bảng khác sử dụng ID làm khóa ngoại và một bảng cuối cùng sử dụng dữ liệu dưới dạng khóa ngoại:

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;

Đã chèn 100 bản ghi vào mỗi bảng và so sánh kích thước bảng cuối cùng:

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

Vì vậy, tôi đoán dữ liệu KHÔNG được sao chép trong khóa ngoại varchar, ít nhất là trong phiên bản 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. Cập nhật lược đồ bảng mà không ảnh hưởng đến dữ liệu trong Laravel

  2. MySQL:Sự kết hợp giữa kết hợp bên trái với sự kết hợp bên phải

  3. Sự cố khi sử dụng MySQL kết hợp với Emacs

  4. Hủy yêu cầu AJAX đang chờ xử lý trong ứng dụng PHP?

  5. Tải lên nhiều hình ảnh với PHP chỉ lưu một đường dẫn tệp vào Cơ sở dữ liệu MySQL