【踩坑实录】mysql新增联合主键报错
mysql新增联合主键报错:
error:(1265)mysql data truncated for column(表字段长度已经调整到足够长度)
有可能是因为表中这个字段已经包含空数据了,主键要求非空,可以先将数据修改为字符串的null,之后再进行修改。
update rpt_yyyq_uv_activity_day set app_code ='null' where app_code is null;
复合主键:
alter table tb_name add primary key (字段1,字段2,字段3);
查看mysql是否安装了innodb插件。
show plugins;
如果发现没有安装innodb插件,可以执行下面语句进行安装:
install plugin innodb soname 'ha_innodb.so';
查看mysql现在已提供什么存储引擎:
show engines;
查看mysql当前默认的存储引擎:
show variables like '%storage_engine%';
看某个表用了什么引擎(在显示结果里参数engine后面的就表示该表当前用的存储引擎):
show create table 表名;
如何将MyISAM库导成INNODB引擎格式的:
在备份出的xxx.sql文件中把ENGINE=MyISAM全换成ENGINE=INNODB
再次导入就可以了。
转换表的命令:
mysql> alter table 表名 engine=innodb;
alter table ynrpt.rpt_yyyq_client_info engine=MyISAM;
有上面可以查到看,本机mysql使用的存储引擎是默认的MyISAN,由于业务需要,先要将其存储引擎改为Innodb。
操作记录如下:
1)以安全模式关闭mysql
[root@dev mysql5.1.57]# mysqladmin -uroot -p shutdown
Enter password:
[root@dev mysql5.1.57]# ps -ef|grep mysql
2)备份my.cnf
[root@dev mysql5.1.57]# cp my.cnf my.cnf.old
3)修改my.cnf配置文件
[root@dev mysql5.1.57]# vim my.cnf
.....
[mysqld] //在这个配置区域添加下面一行,指定存储引擎为innodb
default-storage-engine = InnoDB
4)删除/mysql/data目录下的ib_logfile0,ib_logfile1。删除或剪切到别处都行。
[root@dev var]# mv ib_logfile0 ib_logfile1 /tmp/back/
5)启动mysql,登陆mysql验证存储引擎是否已切换
[root@dev var]# /Data/app/mysql5.1.57/bin/mysqld_safe --defaults-file=/Data/app/mysql5.1.57/my.cnf &
mysql> show variables like '%storage_engine%'; +----------------+--------+ | Variable_name | Value | +----------------+--------+ | storage_engine | InnoDB | +----------------+--------+ 1 row in set (0.00 sec)