数据库初探(五)-Data Definition Language:数据定义语言(1)


DDL:数据定义语言,语句是操作数据库对象的语句,包括创建(create)、删除(drop)和修改(alter)数据库对象。

前面介绍过,数据库对象最基本的是数据表,数据表是存储的逻辑单元。除了表以外还有其他几种常见的数据库对象:索引,视图,图表缺省值,规则,触发器,用户,函数等,具体描述可以去百度百科:数据库对象

数据库操作:

1、首先来看一下有关数据库的操作:

(1)查看数据库:

SHOW DATABASES; // 在数据库客户端输入这条命令并执行,即可看到该服务器上所有数据库

(2)切换数据库:

USE 数据库名称; // 在操作某个数据库之前需要使用该命令选中该数据库

(3)操作数据库:

a. 创建数据库:

CREATE DATABASE [IF NOT EXISTS] 数据库名称;  

"IF NOT EXISTS"是一个判断条件,可有可无,用来保证创建数据库时,会查看数据库是否存在,避免报错,如果没有该条件,当数据库中存在与要创建数据库名相同时,系统会报错;

b. 删除数据库:

DROP DATABASE [IF EXISTS] 数据库名称;

"IF EXISTS"与创建数据库时的"IF NOT EXISTS"条件作用相似,用来保证要删除的数据库存在,避免报错。

c. 更改数据库字符集:

SHOW CHARACTER SET;  // 查看当前使用的字符集

ALTER DATABASE 数据库名 CHARACTER SET 字符集名;

在实际应用中一般使用utf-8字符集,注意在MySQL数据库中utf-8字符集名为"UTF8";

以上就是常用的对于数据库操作的命令,下面在介绍对数据表操作的命令之前,我们先来看一下数据表支持的列的类型。

每一门语言都有自己所支持的基本数据类型,SQL也不例外,它定义了数据表的基本列数据类型,主要有以下几类构成(这里我们主要介绍MySQL数据库支持的数据库类型,Microsoft Access数据库和SQL Server数据库支持的数据库类型与之有所不同,这里不做过多介绍):

(1)整型

类型                     大小                     范围(有符号)                        范围(无符号)

tinyint                   1字节                 (-127,128)                          (0,255)

smallint                2字节                 (-32768,32767)                  (0,65535)

mediumint            3字节                 (-8388608,8388607)         (0,16777215)

int                         4字节           (-2147483648,2147483647)    (0,4294967295)

bigint                    8字节               数值较大,在这就不详细写了。。。

MySQL以一个可选的宽度指示器对SQL标准进行扩展,这样当从数据库中检索一个值时,可以增加到指定长度。例如定义一个字段的类型为INT(6),就可以保证所包含数字少于六个的值从数据库中检索出来之后自动用空格填充,如果使用ZREOFILL约束,则不会使用空格填充,而是使用0进行填充。值得提一下的是,在MySQL中,INT字段的默认宽度为11,使用宽度指示器不会影响数据库字段的大小和它可以存储的范围,因此,INT括号中的数字对MySQL是没有意义的,不写没关系,写了也不影响,只要不越界即可,如果要使用更大的数字,可以使用BIGINT进行存储。

另外,还需要注意,在定义字段类型时,尽量选择合适的数据类型进行定义,这样可以节省存储空间,提高存储效率,例如:人的年龄按照常理来说不可能超过无符号TINYINT的最大值,因此人的年龄采用无符号的TINYINT类型存储即可。

(2)浮点型

MySQL支持的三个浮点类型的数据类型为FLOAT, DOUBLE, DECIMAL三种类型。

首先是FLOAT类型的浮点数:其定义类型可以直接为FLOAT,这是默认的数据定义,如果使用FLOAT(M, D),会使创建的字段成为宽度为M,小数位为D的浮点型数据,从而整数位有M-D位;其次是DOUBLE类型,它的使用与FLOAT类型相似,表示数据的范围更大。在定义FLOAT类型和DOUBLE类型时,我们不建议定义其长度。在学习java SE时,我们知道FLOAT, DOUBLE类型都会产生精度丢失,因此我们在使用浮点类型数据进行计算时,都会使用一个BigDecimal的工具类帮助我们进行计算,在MySQL中也有一个叫做DECIMAL的数据类型,不会产生精度丢失,因此在涉及浮点类型数据进行存储和计算时,我们应该使用DECIMEL类型进行定义字段。

DECIMAL数据类型介绍:MySQL使用DECIMAL类型去存储对精度要求比较高的数值,比如金额,叫做定点数。DECIMAL在MySQL内存是以字符串存储的。声明语法是DECIMAL(M,D),占用字节 M+2 bytes。M是数字最大位数(精度precision),范围1-65;D是小数点右侧数字个数(标度scale),范围0-30,但不得超过M。

比如定义DECIMAL(7,3):能存的数值范围是 -9999.999 ~ 9999.999,占用9个字节。

(1)123.12 --> 123.120,因为小数点后未满3位,补0。

(2)123.1245--> 123.125,小数点只留3位,多余的自动四舍五入截断。

(3)12345.12--> 保存失败,因为小数点未满3位,补0变成12345.120,超过了7位。严格模式下报错,非严格模式存成9999.999。


(3)CHAR和VARCHAR

 CHAR(LENGTH) 类型用于定长字符串,并且必须在圆括号内用一个大小修饰符来定义。这个大小修饰符的范围从 0-255。比指定长度大的值将被截短,而比指定长度小的值将会用空格作填补。

 CHAR 类型的一个变体是 VARCHAR 类型。它是一种可变长度的字符串类型,并且也必须带有一个范围在0-65535 之间的指示器。当不指定时,CHAR默认长度是1。

CHAR 和 VARCHGAR 不同之处在于 MYSQL 数据库处理这个指示器的方式:CHAR 把这个大小视为值的大小,长度不足的情况下就用空格补足。而 VARCHAR 类型把它视为最大值并且只使用存储字符串实际需要的长度(增加一个额外字节来存储字符串本身的长度)来存储值。所以短于指示器长度的 VARCHAR 类型不会被空格填补,但长于指示器的值仍然会被截短。

因为 VARCHAR 类型可以根据实际内容动态改变存储值的长度,所以在不能确定字段需要多少字符时使用 VARCHAR 类型可以大大地节约磁盘空间、提高存储效率。

选择建议:

1、char。char存储定长数据很方便,char字段上的索引效率高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间。

2、varchar。存储变长数据,但存储效率没有char高。如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 varchar(10)是最合算的。varchar类型的实际长度是它的值的实际长度+1。为什么“+1”呢?这一个字节用于保存实际使用了多大的长度。

从空间上考虑,用varchar合适;从效率上考虑,用char合适,关键是根据实际情况找到权衡点。


binary,定长二进制字符串类型,它以二进制形式保存字符串

varbinary,可变长度的二进制字符串类型,它以二进制形式保存字符串

(4)TEXT 和BLOB 类型

MySQL 提供了 TEXT 和 BLOB 两种类型。根据存储数据的大小,它们都有不同的子类型。这些大型的数据用于存储文本块或图像、声音文件等二进制数据类型。

TEXT 和 BLOB 类型在分类和比较上存在区别。BLOB 类型区分大小写,而 TEXT 不区分大小写。大小修饰符不用于各种 BLOB 和 TEXT 子类型。

比指定类型支持的最大范围大的值将被自动截短。

但不会把文件存储在数据库中,一般操作是数据库中只存储文件所在本地路径,根据路径在本地中使用文件。

(5)MySQL日期和时间类型:

在处理日期和时间类型的值时,MySQL 带有 5 个不同的数据类型可供选择。它们可以被分成简单的日期、时间类型,和混合日期、时间类型。

根据要求的精度,子类型在每个分类型中都可以使用,并且 MySQL 带有内置功能可以把多样化的输入格式变为一个标准格式。

a. DATE、TIME 和 YEAR 类型:

MySQL 用 DATE 和 TIME 类型存储简单的日期值,使用 TIME 类型存储时间值。这些类型可以描述为字符串或不带分隔符的整数序列。如果描述为字符串,DATE 类型的值应该使用连字号作为分隔符分开,而 TIME 类型的值应该使用冒号作为分隔符分开。

需要注意的是,没有冒号分隔符的 TIME 类型值,将会被 MySQL 理解为持续的时间,而不是时间戳。

 MySQL 还对日期的年份中的两个数字的值,或是 SQL 语句中为 YEAR 类型输入的两个数字进行最大限度的通译。因为所有 YEAR 类型的值必须用 4 个数字存储。

MySQL 试图将 2 个数字的年份转换为 4 个数字的值。把在 00-69 范围内的值转换到 2000-2069 范围内。把 70-99 范围内的值转换到 1970-1979 之内。

如果 MySQL 自动转换后的值并不符合我们的需要,请输入 4 个数字表示的年份。

b. DATETIME 和 TIMESTAMP 类型

除了日期和时间数据类型,MySQL 还支持 DATEYIME 和 TIMESTAMP 这两种混合类型。它们可以把日期和时间作为单个的值进行存储。

这两种类型通常用于自动存储包含当前日期和时间的时间戳,并可在需要执行大量数据库事务和需要建立一个调试和审查用途的审计跟踪的应用程序中发挥良好作用。

如果我们对 TIMESTAMP 类型的字段没有明确赋值,或是被赋与了 null 值。MySQL 会自动使用系统当前的日期和时间来填充它。

以上就是对DDL语言、数据库创建以及MySQL数据库常用数据类型的简单介绍。

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

推荐阅读更多精彩内容