最近在做**,c#+mysql,然而在建表的時候遇到了一大堆的問題,特別是建外鍵,呵呵呵,消耗了一上午的時間也沒成,一直報err150。上網查資料發現也不是很全,最後看到了一些比較有用的方法對付err150,推薦給大家。。。
1.innodb引擎問題
在建表時,將表型別設定成innodb,寫法是
create table tablename(
numberr varchar(15),
name varchar(10),
gender tinyint
)engine=innodb;
其中乙個或者兩個表是myisam引擎的表,若想要使用外來鍵約束,必須是innodb引擎,(實際上,如果兩個表都是myisam 引擎的,這個錯誤根本不會發生,但也不會產生外來鍵),你可以通過查詢瀏覽器來設定表的引擎型別。
還有額,筆者學長還建議用大寫會更加規範些。【好像跑遠了。。。】
2.型別問題
兩個欄位的型別或者大小不嚴格匹配,例如,如果乙個是int(10), 那麼外來鍵也必須設定成int(10), 而不是 int(11) 也不能是 tinyint. 你得使用 show 命令來檢視欄位的大小,因為一些查詢瀏覽器有時候把 int(10) 和int(11) 都顯示為integer。另外,你還必須確定兩個字段是否乙個為 signed,而另乙個又是unsigned, 這兩欄位必須嚴格地一致匹配。即字段與字段的建立起外來鍵,這兩者的型別應是一樣的。
3.字符集的bug(我就是這麼掉坑里)
如果你實在不知道哪錯了那就檢查表的字元編碼,筆者已把資料庫的預設設定設定為utf8,還以為天衣無縫,但too young too ****** ,我還是愉快的掉坑了。跟型別的嚴格匹配一樣,對應的字段的字元編碼必須一致。建議大家在建表時這麼寫 engine=innodb default charset=utf8;
4.要為你的被外來鍵物件建立索引
如果你的被外來鍵物件是primary key是最好的,如果不是,最好為這個字段建立索引。
5.外鍵名必須唯一
這個可能性不大,但是也是有可能的,你的外鍵名必須是唯一的,如果重名請修改外鍵名。
6.alter語句出錯
這個可能性也不大。但還是拿出來說說。
alter table 表名 add constraint 外鍵名 foreign key (欄位名) references 被聯絡的表名(被外來鍵的欄位名);------新增外來鍵
alter table 表名 drop foreign key 外鍵名;-------刪除外來鍵
mySQL中建外來鍵的原則 外來鍵的建立原則
首先,外來鍵引用的那個列在主表中必須是主鍵列或者唯一列。所以1 n的把外來鍵建立在n的那張表上。1 1,一般要看誰是主表,誰是附屬表,外來鍵建立在附屬表中。n m的情況,需要建立乙個關係表,兩個原表和其關係分別是1 n,1 mmysql具體 建立外來鍵語句 1 建立s user表 create ta...
2016 11 10 MySQL外來鍵約束不能建表
因為時間比較遠了,當時遇到這個問題時查詢資料解決了,但是沒有保留引用位址,如原作者認為侵權,立刪!在mysql中建立外來鍵時,經常會遇到問題而失敗,這是因為mysql中還有很多細節需要我們去留意可能有以下幾種常見原因。1.兩個欄位的型別或者大小不嚴格匹配。例如,如果乙個是int 10 那麼外來鍵也必...
mysql基本操作(建表,新增外來鍵等)
考研結束放假在家等成績是在著急,突然想起畢業設計,在使用mysql發現過於依賴第三方工具基本的命令都忘記了,做乙個簡單的整理和複習 一,建表的操作,基本格式 create table 表名 實際操作 建立表的簡單操作完成,但是在建立表的時候回新增注釋或者設定約束又或者設定儲存引擎等等,這些操作可以參...