DDL创建数据库表以及约束(极客时间学习笔记).doc
PAGE
PAGE1
DDL创建数据库,表以及约束(极客时间学习笔记)
DDL
DDL是DBMS的核心组件,是SQL的重要组成部分.DDL的正确性和稳定性是整个SQL发型的重要基础.
DDL的基础语法及设计工具
DDL的英文是DataDefinitionLanguage,也就是数据定义语言.定义了数据库的结构和数据表的结构.常用的功能急救室增删改,对应的命令分别是CREATE、DROP和ALTER.
对数据库进行定义
CREATEDATABASEnba;//创建名为nba的数据库
DROPDATABASEnba;//删除名为nba的数据库
对数据表进行定义
CREATETABLEtable_name;//创建表,table_name指表名
创建表的结构呢?举个实际的例子,我们创建一个球员表,表名为player,里面有两个字段,一个是player_id,它是int类型,另一个是player_name字段是varchar(255)类型,两个字段都不能为空,并且player_id是递增的.
接下来创建表的语句这么就是:
CREATETABLEplayer(
player_idint(11)NOTNULLAUTO_INCREMENT,
player_namevarchar(255)NOTNULL
);
注意的是每个字段定义的语句最后使用,作为结束符,最后一个字段的定义结束之后没有逗号的,并且语句最后是以;结尾的.数据类型中int(11)代表整数类型,显示长度是11位,括号中的参数11代表的是最大有效显示长度,与类型包含的数值大小无关.varchar(255)代表的是最大长度为255的可变字符串类型.NOTNULL表名整个字段不能为空值,是一种数据约束.AUTO_INCREMENT代表主键自动增长.(一般情况下使用可视化工具类创建和操作数据库和数据库表,比如Navicat)
接下来针对player表,设计下面字段:
其中player_id是数据表player的主键,且自动增长,也就是player_id会从1开始,然后每次加一,不必为它赋值.player_id、team_id、player_name这三个字段均不为空,height字段可以为空.
使用Navicat工具创建表并导出的SQL文件如下所示:
DROPTABLEIFEXISTS`player`;
CREATETABLE`player`(
`player_id`int(11)NOTNULLAUTO_INCREMENT,
`team_id`int(11)NOTNULL,
`team_name`varchar(255)CHARACTERSETutf8collateutf8_general_ciNOTNULL,
`height`float(3,2)NULLDEFAULT0.00,
PRIMARYKEY(`player_id`)USINGBTREE,
UNIQUEINDEX`player_name`(`player_name`)USINGBTREE
)ENGINE=InnoDBCHARACTERSET=utf8COLLATE=utf8_general_ciROW_FORMAT=Dynamic;
可以看到整个SQL文件中的DDL处理,首先删除player表(如果数据库中存在该表的话),然后再创建player表,里面的字段名和表名都使用了反引号,这是为了避免名称与MYSQL保留字段相同,对数据库表和字段名都加上反引号.
其中player_name字段的字符集是utf8,排序规则是utf8_general_ci,代表对大小写不敏感,如果设置为utf8_bin,表示对大小写敏感.
因为player_id设置为了主键,所以在DDL中使用PRIMARYKEY进行规定,同时索引方法采用BTREE.
对player_name字段进行索引,在设置索引时,可以设置UNIQUEINDEX(唯一索引),也可以设置为其它索引方式,比如NORMALINDEX(普通索引),这里我们采用UNIQUEINDEX.唯一索引和普通索引的区别在于对字段进行了唯一性约束.在索引方式上,可以选择BTREE和HASH,这里采用BTREE方法进行索引.
整个数据表的存储规则采用InnoDB,是MYSQL5.5之后的默认存储引擎,将字符集设置为utf8,排序规则设置为utf8_general_ci,行格式为Dynamic,就可以定义数据表的最后约定了:
ENGINE=InnoDB