建表
- 先講一下常規建表:
CREATE TABLE testCreate ( id int(10) NOT NULL auto_increment, time int(10) NOT NULL, type tinyint(2) NOT NULL, name varchar(20) default null, user_id mediumint(8) NOT NULL, PRIMARY KEY(id), index(id), index(type) )ENGINE=INNODB DEFAULT CHARSET=utf8;
- 設置主鍵、自增、默認值及不太常見的將索引放在建表的操作中,下面要提到的是從已存在的表選取數據建新表:
CREATE TABLE test ( a INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (a), KEY(b) )ENGINE=MyISAM SELECT b,c FROM test2;
添加/刪除字段
- 我這里要講的不是常規的增加字段,而是在指定某個字段后面添加新的字段,如:
ALTER TABLE table_name ADD COLUMN mainId VARCHAR(36) DEFAULT NULL AFTER id;
- 但值得注意的是,mysql似乎不支持在某個字段前面添加字段,雖然before也是關鍵字,但:
ALTER TABLE table_name ADD COLUMN mainId VARCHAR(36) DEFAULT NULL before caption
- 這種寫法就通不過。那么我想要在表頭添加一個新字段怎么辦呢,那需要用到下面的 sql 了:
ALTER TABLE table_name ADD id INT(8) auto_increment PRIMARY KEY FIRST;
- 順帶提一下刪除某個字段: ALTER TABLE table_name DROP COLUMN mainId;
之所以強調在某個特定字段后和在表頭添加新字段,是因為用程序處理數據表的時候,會經常以表中字段的順序號作為處理的切入口,而不是以字段名。同時,我們會經常對一些表添加 id 或者 uuid 以方便對數據表的處理,那為了讓程序准確地拿到它們,我們盡量將其放在表頭,減少不必要的麻煩。
修改表中某個字段的排序規則
- 我們在做關聯查詢或建表的時候經常會碰到做關聯的字段排序規則不一樣的情況(僅針對varchar、text等類型),這時候我們可以利用如下sql進行修改:
ALTER TABLE vehicletype MODIFY name VARCHAR(100) COLLATE utf8_general_ci;
這種方式就是在修改某個字段的數據類型的語句后面加上一點東西,可能客戶端改更方便,但當處理到那些幾十萬上百萬的大表的時候,客戶端改表結構的操作簡直就是自找麻煩,因為這種操作經常會導致客戶端卡死,必須強制終止程序,而強行終止客戶端是沒辦法確定數據庫服務器是否已經做了響應,因為指令已經發出。因此,我會盡可能地將這些操作都做成命令行。
