MySQL是一種常用的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),使用TYINYINT(TinyInt)作為默認數(shù)據(jù)類型,這對于很多用戶來說是不可避免的問題,因為在實際應用過程中,一些表格的字段很多時候都是用來表示狀態(tài)類數(shù)據(jù),這就造成了TYINYINT默認值0的至關(guān)重要的影響。
CREATE TABLE sample ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL, status TINYINT NOT NULL DEFAULT '0', ); INSERT INTO sample (name, status) VALUES ('john', 1), ('alice', 0); SELECT * FROM sample;
在代碼中,我們創(chuàng)建了一個名為“sample”的表格,并定義了三個字段:id、name、status,在其中status字段使用了TYINYINT類型作為默認數(shù)據(jù)類型,并將默認值設置為0。現(xiàn)在我們來插入兩條記錄,驗證這個默認值對于數(shù)據(jù)的影響。
+----+-------+--------+ | id | name | status | +----+-------+--------+ | 1 | john | 1 | | 2 | alice | 0 | +----+-------+--------+
從查詢結(jié)果的數(shù)據(jù)表格中,可以明顯看到配置TYINYINT默認值為0的數(shù)據(jù)字段status,輸入數(shù)據(jù)值為0時,數(shù)據(jù)被成功插入進去。但是,這僅僅是從視覺上的查詢結(jié)果,更深入的理解TYINYINT默認為0才能更好的進行數(shù)據(jù)庫操作。
一種最常見的情況就是,數(shù)據(jù)庫管理員需要查找顧客是否購買過商品,但是系統(tǒng)中某些顧客的購買記錄并沒有經(jīng)過系統(tǒng)更新,因此在數(shù)據(jù)表中并沒有對應的記錄。如果管理員采用了類似下面的SQL語句:
SELECT * FROM customers WHERE buying = 0;
那么最終得到的是所有在數(shù)據(jù)表中都不存在購買記錄的顧客,這是不符合實際的。因此,在實際使用TYINYINT類型時,一定要對數(shù)據(jù)類型以及默認值進行精心的配置,從而避免因為數(shù)據(jù)插入或者查詢錯誤而產(chǎn)生的哪怕是微不足道的誤解。