mysql相关知识总结

目录

1.建表

sql 复制代码
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.添加字段

sql 复制代码
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.修改字段类型

sql 复制代码
ALTER TABLE mytable MODIFY COLUMN mycolumn INT;

4.添加索引

sql 复制代码
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存储引擎有一个索引键长度的限制,这个限制基于字符集的不同而不同。

下面是建表时的语句:

sql 复制代码
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编码:一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。

相关推荐
容器( ु⁎ᴗ_ᴗ⁎)ु.。oO1 小时前
MySQL事务
数据库·mysql
数据龙傲天2 小时前
1688商品API接口:电商数据自动化的新引擎
java·大数据·sql·mysql
engineer-gxd3 小时前
MySQL 表的操作
mysql
cyt涛3 小时前
MyBatis 学习总结
数据库·sql·学习·mysql·mybatis·jdbc·lombok
看山还是山,看水还是。4 小时前
MySQL 管理
数据库·笔记·mysql·adb
momo小菜pa4 小时前
【MySQL 09】表的内外连接
数据库·mysql
Jasonakeke5 小时前
【重学 MySQL】四十九、阿里 MySQL 命名规范及 MySQL8 DDL 的原子化
数据库·mysql
小宇成长录5 小时前
Mysql:数据库和表增删查改基本语句
数据库·mysql·数据库备份
团儿.6 小时前
解锁MySQL高可用新境界:深入探索MHA架构的无限魅力与实战部署
数据库·mysql·架构·mysql之mha架构
权^7 小时前
MySQL--聚合查询、联合查询、子查询、合并查询(上万字超详解!!!)
大数据·数据库·学习·mysql