mysql 基础知识(3) - 创建修改表和权限


Author: yifei / Created: Nov. 13, 2017, 11:47 p.m. / Modified: Nov. 13, 2017, 10:48 a.m. / Edit

创建表

 

CREATE TABLE table_name (
    field_name type is_null default options,
    ...
    PRIMAR KEY (id),
    INDEX/KEY index_name (field_name),
) ENGINE=InnoDB;
 
// 注意:KEY is normally a synonym for INDEX

 

数据类型

字符串

字符串分两种,定长和变长,MySQL处理定长数据比变长数据快得多。CHAR属于定长类型,VARCHAR和TEXT属于变长类型。

数字

注意数字后面跟的数字,例如INT(5),并不是限制数字的存储长度,而是限制数字的展示长度(显示时填充0)!可以使用UNSIGNED指定为非负值,默认为signed

日期

使用DATETIME,不要使用TIMESTAMP,防止2038年溢出

tips

创建 modify_time/update_time 字段时使用自动更新时间

`modify_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

设计表要注意每个字段的正交性,不要出现一个字段表示“xx且xx”的状态。

 

更新表

rename table 'old_name' to 'new_name'

添加一列,其中的 COLUMN 关键字是 optional 的。

ALTER TABLE table_name ADD COLUMN field_name type;

更新某个字段的数据类型

Alter TABLE `tableName` MODIFY COLUMN `ColumnName` datatype(length);

比如说:

Alter TABLE `tbl_users` MODIFY COLUMN `dup` VARCHAR(120);

添加不同类型的索引

ALTER TABLE table_name ADD INDEX index_name (column_list)

ALTER TABLE table_name ADD UNIQUE index_name (column_list)

ALTER TABLE table_name ADD PRIMARY KEY index_name (column_list)

------------------之前笔记的分割线------------------------    

组合索引

  如果有一个组合索引(col_a,col_b,col_c)   下面的情况都会用到这个索引:

col_a = "some value";
col_a = "some value" and col_b = "some value";
col_a = "some value" and col_b = "some value" and col_c = "some value";
col_b = "some value" and col_a = "some value" and col_c = "some value";

对于最后一条语句,mysql会自动优化成第三条的样子   下面的情况就不会用到索引:

col_b = "aaaaaa";
col_b = "aaaa" and col_c = "cccccc";

评论区