文章目录
- 数据库Mysql总结20200212
- mysql 数据库改名
- 方式一
- 方式二: 自己写脚本实现
- navicat导入SQL文件太慢
- Linux下my.ini/my.cnf文件路径
- MySQL error 1452
- 删除外键
- 增加外键的方法
- mysql 1022error
- 删除数据库时Lock
- 背景
- 原因和解决方法
- 参考链接
数据库Mysql总结20200212
mysql 数据库改名
方式一
rename database oldname to newname ;
这条命令仅在Mysql5.1.7添加,5.1.23删除
方式二: 自己写脚本实现
#!/bin/bash
mysql -uroot -e "create database if not exists db_ym_account"
list_table=$(mysql -uroot -Nse "select table_name from information_schema.TABLES where TABLE_SCHEMA='foundwant'")
echo $list_table
for tab in $list_table
do
echo "$tab"
mysql -uroot -e "rename table foundwant.$tab to db_ym_account.$tab"
done
脚本功能描述:我们想把db中foundwant的库名改成db_ym_account;
实质上,是创建一个db_ym_account数据库,然后把库foundwant中的表记录下来, 然后使用rename命令将表所属的库改成新的库名称
navicat导入SQL文件太慢
解决办法
my.ini添加:
max_allowed_packet=500M
Linux下my.ini/my.cnf文件路径
linux版本是my.cnf,一般会放在/etc/my.cnf,/etc/mysql/my.cnf
或者 : /usr/my.cnf 下
MySQL error 1452
外键相关的错误
删除外键
首先查询外键的名称
使用SQL语句查询:show create table test_table(表名)
执行删除外键约束的SQL语句
alter table test_table drop foreign key test_table_ibfk_1
增加外键的方法
有两种方式
- 创建的时候建立外键
/*保存表其他信息: 是否共享,表对应主题*/
CREATE TABLE T_TABLE_OTHER (
ID BIGINT AUTO_INCREMENT,
TABLE_ID BIGINT,
`IS_SHARE` int(11) DEFAULT NULL COMMENT '表是否是共享表 1是 0 否',
`GROUP_ID` bigint(20) DEFAULT NULL COMMENT '小主题id',
PRIMARY KEY (ID),
FOREIGN KEY (TABLE_ID) REFERENCES T_TABLE(ID) ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE InnoDB, CHARSET UTF8;
- 在表已存在的时候创建外键约束
alter table T_TABLE_OTHER add constraint T_TABLE_OTHER_ibfk_1 foreign key(TABLE_ID) REFERENCES T_TABLE(ID);
注意: 在表已存在的情况下并且有数据的情况下,添加外键的时候,需要注意数据 是正确的(外键字段值和原表能够对应上),否则会添加失败
mysql 1022error
mysql 创建外键时 提示 [Err] 1022
删除数据库时Lock
背景
在已经备份的情况下,删除这个数据库,执行删除命令后,程序一直卡住,没有相应,使用linux命令查询,显示没有删除掉,就这样一直卡住
原因和解决方法
远程主机登录 show full processlist;
观察 state 和info 两列,查看有哪些相关的线程,然后发现之前远程删除的时候由于网络中断,锁表了。
所以导致再次登录的时候删除操作无响应。
解决
使用Kill命令杀死线程 kill + 显示的前面的id
原因:
个人经验是关键字重复,或者外键已经重复存在,所以先进行查看是否已存在。否则会添加失败
参考链接
- https://www.itdaan.com/blog/2016/11/25/137014340f43b1f2c612d2301fe9b6c2.html