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

相关推荐
韩立学长1 小时前
【开题答辩实录分享】以《走失人口系统档案的设计与实现》为例进行答辩实录分享
mysql·mybatis·springboot
杨云龙UP2 小时前
小工具大体验:rlwrap加持下的Oracle/MySQL/SQL Server命令行交互
运维·服务器·数据库·sql·mysql·oracle·sqlserver
阿巴~阿巴~2 小时前
使用 C 语言连接 MySQL 客户端(重点)
服务器·数据库·sql·mysql·ubuntu
清水加冰2 小时前
【MySQL】SQL调优-如何分析SQL性能
数据库·sql·mysql
知其然亦知其所以然2 小时前
MySQL性能暴涨100倍?其实只差一个“垂直分区”!
后端·mysql·面试
风跟我说过她2 小时前
CentOS 7 环境下 MySQL 5.7 深度指南:从安装、配置到基础 SQL 操作
sql·mysql·centos
数据知道4 小时前
Go基础:正则表达式 regexp 库详解
开发语言·mysql·golang·正则表达式·go语言
2301_7720935614 小时前
tuchuang_后端_前端_注册登录
数据库·后端·网络协议·mysql·wireshark
K_i13414 小时前
中国电信用户行为实时分析系统运维实战
hadoop·mysql
武子康15 小时前
Java-141 深入浅出 MySQL Spring事务失效的常见场景与解决方案详解(3)
java·数据库·mysql·spring·性能优化·系统架构·事务