【SQL与关系数据库】第三节 数据定义(DDL)(三)表定义

上篇博文讲到如何定义数据库模式,包括创建数据库、删除数据库、修改数据库、选择数据库。只有成功创建数据库之后,才能在数据库中创建数据表。数据表是关系数据库中最重要、最基本地数据对象,也是数据存储的基本单位。若没有表,数据库中其他的数据对象则没有意义。
数据表被定义为字段的集合,数据在表中是按照行和列的格式来存储的,每一行代表一条记录,每一列代表记录中一个字段的取值。创建数据表的过程,实质上就是定义每个字段的过程,同时也是实施数据完整性约束的过程。其中,确定表中每个字段的数据类型是创建表的重要步骤,而字段的数据类型则是定义该字段所能存储的数据值的类型。

1、创建表

在MySQL中,可以使用CREATE TABLE语句创建表。
CREATE TABLE语句的语法内容较多,主要由表创建定义、表选项和分区选项等内容构成。
表创建定义是由表列的名字、列的定义以及可能的一个空值声明、一个完整性约束或表索引项等组成,而表索引项则主要定义表的索引、主键、外键等。实际的表定义(包含所有列)均被括在圆括号中,各列彼此间用逗号分隔,每列的定义以列名(在该表中必须是唯一的)开始,后跟列的数据类型以及可选参数。语法格式如下:

CREATE [TEMPORARY] TABLE tbl_name(
    字段名1 数据类型 [列级完整性约束条件][默认值]
    [,字段名2 数据类型 [列级完整性约束条件] [默认值]]
    [,......]
    [,表级完整性约束条件]
)[ENGINE=引擎类型];

举例1:在一个已有数据库mysql_test中新建一个包含客户姓名、性别、地址、联系方式等内容的客户基本信息表,要求将客户的id号指定为该表的主键。

USE mysql_test;

CREATE TABLE customers (
    cust_id INT NOT NULL AUTO_INCREMENT,
    cust_name CHAR(50) NOT NULL,
    cust_sex CHAR(1) NOT NULL DEFAULT 0,
    cust_address CHAR(50) NULL,
    cust_contact CHAR(50) NULL,
    PRIMARY KEY(cust_id)
);

利用”举例1”梳理几个概念:

(1)临时表与持久表

在创建表的CREATE TABLE语句中,若添加可选项“TEMPORARY”关键字,则表示使用该语句创建的表为临时表,反之则为持久表(一般简称:表)。
在数据库中,持久表一旦创建,则将一直存在,多个用户或者多个应用程序可以同时使用持久表。
临时表的应用场景
在有些应用场景中,用户存在需要临时存放数据的需求 ,比如临时表存储复杂的SELECT语句的查询结果,之后可能需要重复地使用这个结果,但这个结果又不希望被永久保存,那么此时可以使用临时表。
临时表的生命周期比较短,且只能对创建它地用户可见,当断开与该数据库的连接时,MySQL会自动删除它们,这意味着的两个不同的连接可以使用相同的临时表名称,同时两个临时表不会互相冲突,也不与原有同名的非临时表冲突,用户可以像操作持久表一样操作临时表。

(2)数据类型

数据类型是指系统中所允许的数据的类型。数据库中每个列都应有适当的数据类型,用于限制或允许该列中存储的数据。例如,如果列中存储的为数字,则相应的数据类型应该为数值类型;如果列中存储的是日期、文本、注释、金额等,则应该用恰当的数据类型规定出来。数据类型可帮助正确地排序数据,并在优化磁盘方面起着重要作用。在创建表时必须为每个表列指定正确地数据类型及可能的数据长度。
在MySQL中,主要的数据类型包括数值类型(例如,整形int、浮点型double、布尔型bool)、日期和时间类型(例如,日期型date、时间戳timestamp、时间型time)、字符串类型(例如,定长字符类型char、可变长字符类型varchar)、空间数据类型等。
参考:https://blog.csdn.net/anxpp/article/details/51284106

(3)关键字AUTO_INCREMENT

表示为表中数据类型为整形的列设置自动增长属性,实现当插入NULL值或数字0到一个AUTO_INCREMENT列中时,该列的值会被自动设置为“此前表中该列的最大值加1”。其中,AUTO_INCREMENT顺序是从数字1开始,同时每个表只能有一个AUTO_INCREMENT列,并且它必须被索引。
另外,当一个表列被指定为AUTO_INCREMENT后,其值是可以被覆盖的,也就是说可以简单地在表数据插入语句中为该列指定一个值,只要这个值是尚未使用过的,那么这个值将被用来替代系统自动生成的值,并且后续的增量将基于该手工插入的值。

(4)指定默认值

默认值是指在向表插入数据时,如果没有明确给出某个表列所对应的值,则DBMS此时允许的为此表指定的一个值。在MySQL中,默认值是用CREATE TABLE语句的列定义中关键字“DEFAULT”来指定。如上述例子中,给cust_sex列的描述添加“DEFAULT 0”,用于指示MySQL在未给出用户性别的情况下,使用默认值0(代表男)。
如果没有为列指定默认值,MySQL会自动为其分配一个。如若该列可以取NULL值,则默认值为NULL,而如果该列被定义为NOT NULL,则默认值取决于该列的类型:对于没有声明AUTO_INCREMENT属性的数字类型,默认值是0;对于一个AUTO_INCREMENT列,默认值是在顺序中的下一个值;对于除TIMESTAMP以外的日期和时间类型,默认值是该类型适当的“零”值;对于表中第一个TIMESTAMP列,默认值是当前的日期和时间。

(5)NULL值

NULL值是指没有值或缺值。每个表列要么是NULL列,要么是NOT NULL列,这种状态在创建时由表的定义所规定。
NULL为默认设置,如果不指定NOT NULL,则认为指定的是NULL.。
值得注意的是:不能将NULL值与空串相混淆,NULL值是没有值,它不是空串。如果指定”这样两个单引号,其间没有字符,这在NOT NULL列中是允许的,因为空串是一个有效的值,它不是无值,所以NULL值用关键字“NULL”而不是空串指定。

(6)主键

在CREATE TABLE语句中,主键是通过PRIMARY KEY关键字来指定的,在举例1中的PRIMARY KEY(cust_id)它指定用户的id号cust_id作为该表的主键。主键值必须唯一,即表中的每个行必须具有唯一的主键值,而且主键一定要为NOT NULL。如果主键使用单个列,则它的值必须唯一;如果使用多个列,则这些列的组合值也必须唯一。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值