Mysql更改表字段、编码、分区、添加索引

Mysql笔记

最近工作中会用到相关mysql 和Python,碰到想不起来的或者不会的就记录一下,好记性不如烂笔头!

更改表字段及默认编码:

//更改表的字段
alter table table_name modify `real_name` double DEFAULT NULL COMMENT '';
//更改表的默认编码为utf8
ALTER TABLE `table_name` DEFAULT CHARACTER SET utf8;
//更改表内所有字段编码为utf8
alter table `table_name` convert to character set utf8;

我们经常在开发的时候遇到查询结果直接写入mysql的情况

CREATE TABLE test SELECT * from test1;

但这种表没有自增主键需要我们在削微处理下:

//添加自增主键并置前:
alter table table_name add column id int(10) not null auto_increment primary key;
alter table table_name modify id int(10) unsigned auto_increment first;
//改变mysql列顺序,将id 放在第一位
alter table table_name modify id int(10) unsigned auto_increment first;
//改变mysql列顺序,将name 放在id后面
alter table table_name modify name varchar(10) after id;
//新增一列
ALTER TABLE `table_name` ADD `name` VARCHAR(15) NOT NULL AFTER `create_time`;

// 添加唯一索引:
ALTER TABLE table_name ADD UNIQUE user_id (`uid`,`symbol`,`dt`);
// 删除自增主键:
alter table table_name modify id int, drop primary key;
// 删除索引
ALTER  TABLE  table_name   DROP  INDEX  index_name;

添加分区

工作中时常遇到mysql数据量大的时候,这个时候需要做一些分区分表的操作来优化我们的查询速度了
最常见的是根据时间来分区,但分区的字段必须是主键。。

//取消自增
alter table test modify id int;
//删除主键
alter table test drop PRIMARY KEY;
// 添加复合主键
alter table test add PRIMARY KEY(id,create_time);
// id 改为自增
alter table test modify  id int AUTO_INCREMENT;
// 最后增加分区。。 dt 是datetime 类型 
// 为什么分区的名字跟less than 的时间不一致呢? 因为less than 不包含边界!!
ALTER TABLE table_name PARTITION BY RANGE COLUMNS(dt) (
				PARTITION  p20200131  VALUES LESS THAN ('20200201'),
		        PARTITION  p20200229  VALUES LESS THAN ('20200301'),
		        PARTITION  p20200331  VALUES LESS THAN ('20200401'),
		        PARTITION  p20200430  VALUES LESS THAN ('20200501'),
		        PARTITION  p20200531  VALUES LESS THAN ('20200601'),
		        PARTITION  p20200630  VALUES LESS THAN ('20200701')
		    );
// 上面是一次性加的分区,这条是一个一个加
ALTER TABLE table_name ADD PARTITION (PARTITION p20200721 VALUES LESS THAN ('20200722') ENGINE = InnoDB);
// 查看分区
SELECT
	partition_name part,
	partition_expression expr,
	partition_description descr,
	table_rows 
FROM
	information_schema.PARTITIONS 
WHERE
	TABLE_SCHEMA = 'database_name'
	AND table_name = 'table_name';

猜你喜欢

转载自blog.csdn.net/Pioo_/article/details/107466781