数据库Mysql遇到的总结20200212

数据库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

增加外键的方法

有两种方式

  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;
  1. 在表已存在的时候创建外键约束
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

版权声明:本文为qq1010234991原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。