目錄
- 1.建表
- 2.添加字段
- 3.修改字段類型
- 4.添加索引
- 5.遇到的問題
1.建表
CREATE TABLE `test`.`table_test` (
`id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主鍵id',
`day` date DEFAULT NULL COMMENT '日期',
`show_cnt` bigint(20) DEFAULT 0 COMMENT '曝光次數',
`play_time` double(20, 2) DEFAULT 0.00 COMMENT '播放時長',
`start_type` varchar(100) DEFAULT '' COMMENT '啟動方式',
PRIMARY KEY (`id`),
KEY `idx_start_type` (`day`,`start_type`)
) ENGINE = InnoDB CHARSET = utf8 ROW_FORMAT=DYNAMIC COMMENT '該表用于測試,天增量';
注意:
1、表有主鍵,PRIMARY KEY;
2、有索引,idx_start_type;
3、各字段有字段類型
2.添加字段
ALTER TABLE `user`
ADD COLUMN `age` INT DEFAULT 0 COMMENT '年齡',
ADD COLUMN `sex` VARCHAR(10) DEFAULT '' COMMENT '性別';ALTER TABLE `user` ADD (`age` INT DEFAULT 0 COMMENT '年齡',,`sex` VARCHAR(10) DEFAULT '' COMMENT '性別');
3.修改字段類型
ALTER TABLE mytable MODIFY COLUMN mycolumn INT;
4.添加索引
ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )ALTER TABLE `payment` ADD INDEX idx_customer_id_staff_id(`customer_id`, `staff_id`);ALTER TABLE table_name ADD INDEX idx1 ( `aaa`), ADD INDEX idx2 ( `bbb`,`ccc`), ADD INDEX idx3( `ddd`);
5.遇到的問題
在創建要給表的時候遇到一個有意思的問題,提示Specified key was too long; max key length is 767 bytes,從描述上來看,是Key太長,超過了指定的 767字節限制。通常出現在嘗試創建一個過長的唯一鍵(UNIQUE KEY)或主鍵(PRIMARY KEY)時。MySQL對于InnoDB存儲引擎有一個索引鍵長度的限制,這個限制基于字符集的不同而不同。
下面是建表時的語句:
CREATE TABLE `test_table` (`id` int(11) unsigned NOT NULL AUTO_INCREMENT,`name` varchar(1000) NOT NULL DEFAULT '',`link` varchar(1000) NOT NULL DEFAULT '',PRIMARY KEY (`id`),KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
分析原因:
在使用utf8字符集時,每個字符可能占用3個字節,那么對于innodb表,索引鍵的最大長度大約為1000個字符左右(因為3072 / 3 ≈ 1024)。若字符集是utf8mb4,每個字符可能占用4個字節,所以最大長度會進一步減少到768個字符左右(3072 / 4 = 768)
解決方法:
修改索引中字段的長度,比如你的索引字段是字符串,類型是varchar(512),修改到varchar(225),或者更低,比如varchar(100),
注意:UTF-8編碼:一個英文字符等于一個字節,一個中文(含繁體)等于三個字節。