MySQL-关于数据库建表的一些观点和建议
技能沙龙 | 邀您于8月25日与国美/AWS/转转三位专家配合切磋小措施电商拭魅战
MySQL作为相关型数据库,被用来存储耐久化的数据,停止不了必要建设表。假如没有操作ORM(工具相关模子)来自动建设表,则必要开拓者通过图形界面(Navicat)可妙手写MySQL语句。 因为在出产情形下,我们对MySQL数据库的操纵凡是是通过呼吁行举办操纵,因此,提议建表的时辰也手写MySQL语句(不提议用图形界面建表)。 1、添加注释的名目 在编写MySQL语句时,我们凡是会被要求加上注释,保举的注释名目为: ![]() 来由:这种注释名目MySQL理会器也会以为是注释的,然后,会正确执行你的create table相干语句。我们凡是将要变动的sql语句清算到一个1.0.0.sql文件中,然后,你只必要登录MySQL客户端,输入:source /文件目次/1.0.0.sql。因此,这样的注释可以到达一石二鸟的目标。 2、指定表的引擎和缺省的编码名目以及该表的声名 示例语句如下: ![]() 来由:上述表现的指定行使的引擎为innodb,在5.6之前默认的引擎是MyISAM,而此刻主流保举机能较好的是innodb,详细参考:高机能MySQL 这本书。上述也指定了缺省字符集为utf8,尚有不要遗漏行使comment来注释下这张表的用途,便于其他开拓职员相识这张表的意图。 3、一个经典的建表语句示例并说明 示例语句如下: ![]() 必要留意的点如下: 1)全部的字段要加commet注释 因为我们建设的表也也许被其他人所用,因此加上comment注释,其他人可能我们本身可以通过呼吁show create tabletb_example来查察表的功效信息。 2)、int 标记确定 假如确定整形为非负数,就将int配置为无标记型的,即int unsigned,可以多一半的值范畴,又能停止插入负数。int配置为无标记的场景在许多场所都行使。 3)、不定长varchar的长度配置 对付不定长字符串varchar假如不确定字符串长度(且知道字符串长度小于255)可以配置为vachar(255),此时,存储空间只比正常的多一个字节(与配置varcahr(10)特殊存储的空间是一样的),又可以或许最大限度的操作varchar的特定。留意:高出255则用于存储该长度的空间会多于一个字节。详细参考:高机能MySQL。 4)、有限状态的范例配置 对付暗示状态数值的数据范例提议配置为tinyint unsigned(只占用一个字节的空间) 可以暗示0到255的范畴。留意:无需用int,占用四个字节的空间。 5)字段建设时刻ctime和修改时刻mtime 每个表中只管加上字段建设时刻ctime和字段修改时刻mtime,便于后期排盘查题,知道该笔记录是何时插入,何时修改。 6)、日期时刻配置为int时的查询 这里的ctime暗示建设时刻,用的是unix时刻戳来存储,可是不能配置缺省值unix_timestamp(),我们在现实查询的时辰,可以行使from_unixtime(ctime)来将unix时刻戳转为date日期名目。 示譬喻下: ![]() 结果如下: ![]() 7)全部的字段只管配置为not null。 8)尽也许的配置default的值 好比:app_name 中通过配置default ‘’,click_cnt配置default ‘0’。 9)将有也许要举办查询的字段配置为索引 好比:key idx_date(“date”),这里由于也许会查询一段时刻内的数据,因此添加字段“date”的索引。留意:一样平常索引的定名法则是idx_字段名 10)配置独一索引 按照营业确定哪些字段可能字段组合的值是独一的,则将该字段或字段组合配置为独一索引。 好比:unique keyunique_date_appid(“date”, “app_id”) 这里由于按照营业我们只要对付详细的某一天详细的某个应用的记录必然只能有一条,因此,配置连系独一索引可以防备改天对应的该应用的数据一再插入。留意:独一索引的定名法则为:unique_字段1_字段2。 11)SQL PRIMARY KEY 束缚 PRIMARY KEY 束缚独一标识数据库表中的每笔记录。 主键必需包括独一的值。 主键列不能包括 NULL 值。 每个表都应该有一个主键,而且每个表只能有一个主键。 一个小常识点: 因为我们添加了独一索引unique_date_appid,假如插入一再的date 和 app_id组合,则会报连系索引一再错误,好比,再次执行: ![]() 提醒: ![]() 我们可以通过返回功效result举办判定,假如result为0,则暗示一再插入。 【编辑保举】
点赞 0 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |