建表
- 先讲一下常规建表:
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;
这种方式就是在修改某个字段的数据类型的语句后面加上一点东西,可能客户端改更方便,但当处理到那些几十万上百万的大表的时候,客户端改表结构的操作简直就是自找麻烦,因为这种操作经常会导致客户端卡死,必须强制终止程序,而强行终止客户端是没办法确定数据库服务器是否已经做了响应,因为指令已经发出。因此,我会尽可能地将这些操作都做成命令行。