最近公司需要對一個項目的數據庫做一個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