2013-08-22 81 views
2

MYSQL中的新問題我試圖爲existsants表創建manualy外鍵,因爲Django不會修改它。MYSQL問題1025

python2 manage.py sqlall <appname> 

表明我所期待的,但

python2 manage.py syncdb 

沒有做任何事情來表。 下面是型號:

class A(models.Model): 
    A_field1 = models.IntegerField(unique=True) # is not the primary key 
    A_field2 = models.CharField(max_length=200) 
    ... 
    A_field3 = models.CharField(max_length=30) 

# this method is to get the good name in the admin interface 
def __unicode__(self): 
    return self.name 


class B(models.Model): 
    B_field1 = models.FloatField() 
    ... 
    B_field2 = models.ForeignKey(A, to_field='A_field1') 

但顯然我錯了操作,因爲它沒有找到所引用的領域,當我運行服務器,所以我試圖刪除外鍵,我得到這個奇怪的錯誤:

mysql> ALTER TABLE A DROP COLUMN A_field1; 
ERROR 1025 (HY000): Error on rename of './website/#sql-41e_740' to 
'./website/<tablename>' (errno: 150) 

而且,我試圖

mysql> ALTER TABLE B DROP COLUMN B_field2; 

卻得到了幾乎同樣的錯誤如上

任何想法?

下面表格:

+--------------+--------------+------+-----+---------+----------------+ 
| Field  | Type   | Null | Key | Default | Extra   | 
+--------------+--------------+------+-----+---------+----------------+ 
| A_field1  | int(11)  | NO | PRI | NULL | auto_increment | 
| A_field2  | varchar(200) | NO |  | NULL |    | 
| A_field3  | varchar(30) | NO |  | NULL |    | 
.... 
+--------------+--------------+------+-----+---------+----------------+ 


+-----------------+----------+------+-----+---------+----------------+ 
| Field   | Type  | Null | Key | Default | Extra   | 
+-----------------+----------+------+-----+---------+----------------+ 
| id    | int(11) | NO | PRI | NULL | auto_increment | 
| B_field1  | double | NO |  | NULL |    | 
... 
| B_field2  | int(11) | NO | MUL | NULL |    | 
+-----------------+----------+------+-----+---------+----------------+ 
+0

這不是應用程序問題,這是數據庫問題中的數據結構。所以,提供你的桌子完整的結構 –

回答

0

使用列名不能刪除外鍵,所以:

SHOW CREATE TABLE myTable 

這將顯示你的密鑰的名稱,然後放下它

ALTER TABLE myTable DROP FOREIGN KEY its_name 

Then then drop the column

ALTER TABLE mytable DROP COLUMN myColumn; 
+0

Thx它完美的工作,那麼這個錯誤信息是什麼? – tbenett

+0

爲什麼django拒絕這麼做? – tbenett

+0

不是django,Mysql錯誤150是一個形成不良的外鍵。由外鍵引用的列必須是完全相同的類型,或者爲不存在的東西添加外鍵。 – Mihai