mysql要不要加删除字段_MySQL 添加字段和删除字段

MySQL 添加字段和删除字段

MySQL - 关于数据库建表的一些关点和建议

MySQL 作为关系型数据库, 被用来存储持久化的数据, 避免不了需要创建表. 如果没有利用 ORM(对象关系模型)来自动创建表, 则需要开发者通过图形界面 (Navicat) 或者手写 MySQL 语句.

ab7653affab982b574eb7acc55df2e04.gif

MySQL 作为关系型数据库, 被用来存储持久化的数据, 避免不了需要创建表. 如果没有利用 ORM(对象关系模型)来自动创建表, 则需要开发者通过图形界面 (Navicat) 或者手写 MySQL 语句.

由于在生产环境下, 我们对 MySQL 数据库的操作通常是通过命令行进行操作, 因此, 建议建表的时候也手写 MySQL 语句(不建议用图形界面建表).

1, 添加注释的格式

在编写 MySQL 语句时, 我们通常会被要求加上注释, 推荐的注释格式为:

ab7653affab982b574eb7acc55df2e04.gif

理由: 这种注释格式 MySQL 解析器也会认为是注释的, 然后, 会正确执行你的 create table 相关语句. 我们通常将要更改的 sql 语句整理到一个 1.0.0.sql 文件中, 然后, 你只需要登录 MySQL 客户端, 输入: source / 文件目录 / 1.0.0.sql. 因此, 这样的注释可以达到一举两得的目的.

2, 指定表的引擎和缺省的编码格式以及该表的说明

示例语句如下:

ab7653affab982b574eb7acc55df2e04.gif

理由: 上述显示的指定使用的引擎为 innodb, 在 5.6 之前默认的引擎是 MyISAM, 而现在主流推荐性能较好的是 innodb, 具体参考: 高性能 MySQL 这本书. 上述也指定了缺省字符集为 utf8, 还有不要漏掉使用 comment 来注释下这张表的用途, 便于其他开发人员了解这张表的意图.

3, 一个经典的建表语句示例并分析

示例语句如下:

ab7653affab982b574eb7acc55df2e04.gif

需要注意的点如下:

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 日期格式.

示例如下:

ab7653affab982b574eb7acc55df2e04.gif

效果如下:

ab7653affab982b574eb7acc55df2e04.gif

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 组合, 则会报联合索引重复错误, 比如, 再次执行:

ab7653affab982b574eb7acc55df2e04.gif

提示:

ab7653affab982b574eb7acc55df2e04.gif

我们可以通过返回结果 result 进行判断, 如果 result 为 0, 则表示重复插入.

来源: http://database.51cto.com/art/201807/579915.htm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值