【Django是一個機智的框架】
默認情況下Djang會為ORM中定義的每一張表加上一個自增ID列,並且用這個列來做主鍵;出於一個MySQL-DBA的工作經歷我覺得
Djanog還真是機智;這樣么說主要是因為我遇到過許多主從延時的問題,有些比較過分的會延時好幾周,通常這些都是因為binlog格式
為“ROW”但是表上不存在主鍵引起的。
如果當前網站用的是Django開發的,我想就不會有這種事情發生了吧。
【AutoField】
Django默認的行為就像這樣
class TestModel(models.Model): id = models.AutoField(primary_key=True)
數據庫層面對應的SQL如下
CREATE TABLE `myapp_testmodel` ( `id` int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
【注意】
如果你想的工增加AutoField列,但是又不指定這個列做為主鍵的話,是會報錯的
class TestModel(models.Model): tid = models.AutoField()
不顯示指定主鍵,但是又給表增加AutoField列的話就會報錯
assert not cls._meta.auto_field, "Model %s can't have more than one AutoField." % cls._meta.label AssertionError: Model myapp.TestModel can't have more than one AutoField.
----
