mysql修改表结构

Posted 火龙果果儿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql修改表结构相关的知识,希望对你有一定的参考价值。

一、建表

1、建表语句

CREATE TABLE  if not exists `pl_account_repay_daily_fact` (
`main_order_id` bigint(32) NOT NULL COMMENT \'总order_id\',
`split_order_id` bigint(32) NOT NULL COMMENT \'拆分order_id\',
`user_id` bigint(11) NOT NULL COMMENT \'用户id\',
`term_no` smallint(6) NOT NULL COMMENT \'期号\',
`term_start_date` date NOT NULL COMMENT \'本期起始日\',
`term_end_date` date NOT NULL COMMENT \'本期到期日\',
`loan_vintage_date` date NOT NULL COMMENT \'首期到期日\',
`term_principal` decimal(16,2) NOT NULL DEFAULT \'0.00\' COMMENT \'本期到期应还本金\',
`term_interest` decimal(16,2) NOT NULL DEFAULT \'0.00\' COMMENT \'本期到期应还利息\',
`act_date` date NOT NULL COMMENT \'统计截止日\',
`past_days` int(11) NOT NULL COMMENT \'统计截止日距当期到期日天数\',
`actual_repay_principal` decimal(16,2) DEFAULT \'0.00\' COMMENT \'本期实还本期本金\',
`actual_repay_interest` decimal(16,2) DEFAULT \'0.00\' COMMENT \'本期实还本期利息\',
`actual_repay_overdue_fine` decimal(16,2) DEFAULT \'0.00\' COMMENT \'本期实还本期罚金\',
`actual_repay_tot` decimal(16,2) DEFAULT \'0.00\' COMMENT \'本期实还总额度\',
`accum_actual_repay_principal` decimal(16,2) DEFAULT \'0.00\' COMMENT \'本期累计实还本期本金\',
`accum_actual_repay_interest` decimal(16,2) DEFAULT \'0.00\' COMMENT \'本期累计实还本期利息\',
`accum_actual_repay_overdue_fine` decimal(16,2) DEFAULT \'0.00\' COMMENT \'本期累计实还本期罚金\',
`accum_actual_repay_tot` decimal(16,2) DEFAULT \'0.00\' COMMENT \'本期累计实还总额度\',
`term_balance` decimal(16,2) DEFAULT NULL COMMENT \'本期合同余额\',
`loan_balance` decimal(16,2) DEFAULT NULL COMMENT \'贷款合同余额\',
`due_date` date NOT NULL COMMENT \'当日\',
`due_overdue_days` smallint(6) DEFAULT NULL COMMENT \'逾期天数\',
`due_is_overdue` smallint(6) DEFAULT NULL COMMENT \'是否逾期\',
`due_overdue_status` smallint(6) DEFAULT NULL COMMENT \'逾期状态(逾期期数)\',
`due_overdue_fine_daily` decimal(16,2) DEFAULT NULL COMMENT \'本期当日产生逾期罚金\',
`accum_due_overdue_fine` decimal(16,2) DEFAULT NULL COMMENT \'本期当日累计产生逾期罚金\',
`due_repay_principal` decimal(16,2) DEFAULT \'0.00\' COMMENT \'本期当日应还本金\',
`due_repay_interest` decimal(16,2) DEFAULT \'0.00\' COMMENT \'本期当日应还利息\',
`due_repay_overdue_fine` decimal(16,2) DEFAULT \'0.00\' COMMENT \'本期当日应还逾期罚金\',
KEY `main_order_id` (`main_order_id`),
KEY `split_order_id` (`split_order_id`),
KEY `user_id` (`user_id`),
KEY `term_start_date` (`term_start_date`),
KEY `term_end_date` (`term_end_date`),
KEY `term_no` (`term_no`),
KEY `due_date` (`due_date`),
KEY `act_date` (`act_date`),
KEY `loan_balance` (`loan_balance`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2、删除表

drop table if exists pl_account_repay_daily_fact

3、清空表数据

truncate table pl_account_repay_daily_fact

二、修改表结构或数据

1、添加/删除列

alter table lp_test
add column `customer_group_id_raw_1` varchar(10) NOT NULL COMMENT \'账龄\';

#这条语句会向已有的表中加入一列,这一列在表的最后一列位置。


如果我们希望添加在指定的一列,可以用:

alter table lp_test
add column `customer_group_id_raw_2` varchar(10) NOT NULL COMMENT \'账龄\' after `merchant_no`;

注意,上面这个命令的意思是说添加customer_group_id_raw_2列到merchant_no这一列后面.

 

如果想添加到第一列的话,可以用:

alter table lp_test
add column `customer_group_id_raw_3` varchar(10) NOT NULL COMMENT \'账龄\' first;

 

将表lp_test表中,列名customer_group_id_raw_3的列删除

alter table lp_test
drop column `customer_group_id_raw_3`;

 

2、修改列名(或格式)

alter table dim_collect_period_company

change  `bind_user_name` `bind_user_name_new`  varchar(50) NOT NULL COMMENT \'催收员\';

 

 

--修改表名

alter table 原来表名 rename to 新的表名

 

 

3、手动插入列的数据

 

INSERT INTO `pl_account_loan_overdue_daily_raw` (`id`, `split_order_id`, `term_no`, `due_date`, `due_overdue_fine_daily`)
VALUES (21, 235, 2, \'2020-01-22\', 10000.00);

 

 

4、更新列的数据

update tmp_account_loan_overdue_daily_pre set term_overdue_fine=\'20000.00\' where split_order_id=\'236\' and due_date=\'2020-01-16\';
#update tmp_account_loan_overdue_daily_pre set term_overdue_fine=\'30000.00\' where split_order_id=\'236\' and due_date=\'2020-01-17\';

update pl_collect_task_info set bind_user_name=concat(bind_user_name_raw,\'@\',customer_group_id)  where bind_user_name is null;

 

二、修改主键约束

数据库操作中有时需要将一个主键修改为联合主键或者把主键改为其他列,这时候单纯的add primary key是没有用的,必须先删除主键约束,再重新添加。

1、alter table dlp_test_20200224 drop primary key;

2、alter table dlp_test_20200224 add primary key(`loan_settle_times`,`term_no`,`term_end_date`,`due_days`,`due_date`,`customer_group_id`);

 

三、添加索引

1.添加PRIMARY KEY(主键索引)

alter table products drop primary key; ##添加主键前要先删除(如果有的话)

ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` );

 

2.添加UNIQUE(唯一索引) 
ALTER TABLE `table_name` ADD UNIQUE ( `column` ) ;

 

3.添加INDEX(普通索引) 

ALTER TABLE `table_name` ADD INDEX index_name ( `column` ) ;

例如:ALTER TABLE `dlp_test_20200224` ADD INDEX merchant_no ( `merchant_no` ) ;

删除索引:

ALTER TABLE `table_name` drop key  index_name;

例如:ALTER TABLE `dlp_test_20200224` drop key merchant_no;

 

4.添加FULLTEXT(全文索引) 

ALTER TABLE `table_name` ADD FULLTEXT ( `column`) ;

 

5.添加多列索引 
ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` );

 

以上是关于mysql修改表结构的主要内容,如果未能解决你的问题,请参考以下文章

mysql管理表(修改表结构)

如何修改mysql数据库表结构

mysql修改表结构语句

mysql修改表结构

快速修改MySQL某张表的表结构

在线批量修改mysql中表结构