SQL的主键、表注释与默认值

一、设置主键

什么是主键?主键,是唯一标识表中每一行的某个列或多个列。

大家一定在记住这个定义,因为对于表中的所有字段来说,主键字段是最关键的。大家在看到一张表时,其他字段都可以先不关注,首先看一下这张表的主键是什么。

因为主键表达了两方面的含义:

主键表示了表所描述的对象
主键表示了表中数据的粒度

什么叫表所描述的对象呢?

比如,对于学生表,它所描述的对象就是学生,而表中的主键就是唯一标识一个学生的学生编号。如果看到一张表的主键是学生编号,那基本可以肯定,这张表就是描述学生的属性的。

对于老师表也一样,它所描述的对象就是老师,表中的主键字段就是唯一标识一个老师的老师编号。如果看到一张表的主键是老师编号,那基本可以肯定,这张表就是描述老师的属性的。

什么叫表中数据的粒度呢?

比如,对于考试成绩表,主键是学生编号+课程编号,它描述的是每一个学生对应的课程考了多少分,那么这张表的数据粒度就是学生+课程。

在SQL语言里,使用PRIMARY KEY关键字来定义一张表的主键。比如,为teacher表定义主键teacher_id:

CREATE TABLE teacher( teacher_id VARCHAR(20),    teacher_name VARCHAR(50),gender VARCHAR(10),    primary key ( teacher_id));

主键具有以下特点:

一个表只能有一个主键;
一个表中的所有行,主键字段的值不允许重复;注意:当多个字段同时做组合主键时,不允许重复,指的是所有主键字段的值加起来不重复就可以,而不是说组合主键中的某单个字段的值不允许重复。比如,主键字段值(2017,1)与另一个值(2018,1),虽然第二个字段的值都是1,但这是两条不主键不重复的数据;
主键的作用是保证数据的唯一性和完整性
主键字段可以为多个,甚至是表中所有字段一起做主键;多个字段一起做主键时,我们称为联合主键或重复主键;不过一般来说不应该超过5个,否则会影响操作性能;
允许为NULL的字段不能做主键字段;
主键不应包含动态变化的数据;所以,永远也不要更新主键字段的值;

二、设置表注释

在创建表时,对于表名和字段名,是不可以使用中文名的(虽然有的数据库也支持中文表名和中文字段名,但是我们并不建议这么做,因为很容易导致中文乱码的问题)。

可是,对于我们中国人来说,还对中文是比较有感觉,而对英文可能不太容易记住。那如果表只有英文名,觉得不好记,怎么办呢?

数据库为表提供了一个属性,叫COMMENT,也就是注释。可以为表设置一个中文注释(当然了,设置一个英文注释也是可以的)。

为表设置注释,使用关键字:COMMENT,语法如下:

1、ALTER TABLE 表名 COMMENT '表注释';

比如,为teacher表添加注释”老师”:

ALTER TABLE teacher COMMENT '老师';

在创建表时,就可以为表添加注释,比如下面这样:

CREATE TABLE teacher( teacher_id VARCHAR(20),  teacher_name VARCHAR(50),gender VARCHAR(10))COMMENT '老师';

三、设置默认值

在创建一张表时,需要为表中的字段定义数据类型。这样在向表中插入数据时,就需要插入与对应位置字段的字段类型一致的数据,否则是会报错的。

但当我们插入数据的时候,并不想或并不需要对某个字段赋值时,如果字段有设置默认值,则会以默认值来填充该字段的值而不会导致错误;比如,在网上下订单时,对于下订单的日期字段,可以使用数据库的系统变量“当前日期”来默认赋值,这样就不需要在向订单表插入订单数据时,单独再对下订单的日期字段进行赋值。

再举个例子,我们在简书上注册一个新用户时,除了用户名、密码、手机号外,还有一些非必填信息,比如性别、QQ号、职业等。这些信息如果没有填写,那向数据库插入时,默认就会赋值为NULL值。

可如果性别、QQ号、职业等,这些字段被设置为NOT NULL,不可以插入NULL值,那怎么办呢?

这时候,就可以在创建表时,为字段设置默认值。

在向表中插入数据的时候,如果某个字段并没有指定赋值为多少,而此时该字段也没有赋默认值,那么就会向该字段插入NULL值。而NULL值的使用效率并不高,并且使用起来也比较麻烦。

所以,为避免字段的值被插入NULL值,一般在表创建时,都会为字段指定默认值。

设置默认值的关键字为DEFAULT,比如,像下面这样为老师姓名字段设置默认值”,也就是空字段串,为年龄字段设置默认值0:

CREATE TABLE teacher( teacher_id VARCHAR(20),  teacher_name VARCHAR(50) DEFAULT '',gender VARCHAR(10),  age INT DEFAULT 0)COMMENT '老师';

设置默认值需要关注以下几点:

表中所有的字段都可以设置默认值;
默认值的数据类型必须与字段类型保持一致;(不一致时,数据库虽然有时也会默认做隐式类型转换,但并不推荐这样做。一方面是这样做并不规范,另一方面是这样做可能会导致未知的错误)
除主键字段外,建议其他所有字段都设置默认值;

那一般根据什么来决定字段应该赋什么默认值呢?

对于字符型字段来说,一般赋值为空字符串,或者具有某种业务含义的值。比如,对于性别字段,有三个取值,F-女,M-男,N-未知,当向这个性别字段插入数据时,可能并不知道性别是男还是女,那这时,就可以定义默认值为N-未知,代表我们并不知道这条数据记录的值到底是多少。

对于数值型字段来说,一般赋值为0,或者具有某种业务含义的值,或者该字段所表示的业务含义的最大值或极大值。

对于日期和时间型呢,常见的赋值有系统当前日期CURRENT_DATE、系统当前时间CURRENT_TIME、系统当前时间戳CURRENT_TIMESTAMP及NOW()等。

总的来说,我们都可以根据字段的业务含义来为字段赋默认值。

下面的表格列出了各数据类型常用的默认值:

各数据类型常用的默认值
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容