最近公司需要对一个项目的数据库做一个SQL脚本,好让一次性就创建所有表。
原本以为只是创建表就可以了,但是还是出了点问题(现在记下来):
我用的工具:Navicat for mysql
步骤:
①先用工具把之前项目的数据导成.sql 文件。
②再把.Sql文件中的insert语句去掉。
③最后剩下的就可以创建表的SQL了。
④用工具导入.sql文件,生成空表!
that's OK!
过程中出现的问题:
1:报错
Cannot delete or update a parent row: a foreign key constraint fails
这个报错的源头是:Mysql在InnoDB中设置了foreign关联,造成无法更新或删除数据。
解决方案:在.sql文件头加:Set FOREIGN_KEY_CHECKS=0;
2:报错
data too long for column 'name' at row 1
这个报错的源头是:由于在创建的时候想插入数据,有中文的话,就会报'name'过长。但是原因不是这个,是因为编码不一致造成。
解决方案:网络上众说不一,也有许多解决办法,我的方法是 使用工具来解决(哈哈,本人比较嫌麻烦,就依赖工具),
直接在Navicat for Mysql中手动插入数据,就是中文的了,之前解决过我更新数据库编码不一的问题,非常方便
3:还有一些报错
过程中还有一些报错就没有记录了,当时计较急。比如:对于多表关联的数据库,创建表的时候要考虑先后顺序,关联的表在之前创建。
还有就是:遇到报错在Drop表之前,我一直在找那一行,发现不是那行问题,是那行之前创建表的编码设置时候的UTF8的时候,忘记了打分号(;);
4:知识
DROP TABLE IF EXISTS `aosa_account`; //创建之前看是否已存在,存在则删除
CREATE TABLE `aosa_account` (
`id` int(11) NOT NULL auto_increment, //不为空,自动增长
`balance` double default '0',
`description` varchar(255) default NULL, //varchar(可变长字符),缺省值为null
`name` varchar(255) NOT NULL, //不为空
`name_PY` varchar(255) NOT NULL,
`status` bigint(20) default '0', //bigint(大整数值) 缺省为0
`ugroup_id` int(11) NOT NULL,
PRIMARY KEY (`id`), //主键
KEY `FKAAC83BEA2945A6E1` (`ugroup_id`),
CONSTRAINT `FKAAC83BEA2945A6E1` FOREIGN KEY (`ugroup_id`) REFERENCES `aosa_ugroup` (`id`) //约束关联表等
) ENGINE=InnoDB AUTO_INCREMENT=87 DEFAULT CHARSET=utf8; //下面详述
详述:
ENGINE=InnoDB AUTO_INCREMENT=87 DEFAULT CHARSET=utf8;
ENGINE=InnoDB //选择引擎,InnoDB是Mysql引擎
AUTO_INCREMENT=87 //设定该字段为自增字段,每次增加87(也可不写)
DEFAULT CHARSET=UTF8 //设置编码为UTF8
数据库的知识,在以后的"数据库专栏"文章再做讲解!
--------------有什么错误或者问题的,请留言或者私信,希望大家一起进步。
参考:
http://bigwilly.blog.163.com/blog/static/173953547200971811438368/
http://blog.csdn.net/zhaopeipei1985/article/details/2633997
http://stevenjohn.iteye.com/blog/1451909
http://blog.sina.com.cn/s/blog_60407be101016tlw.html