【数据库基础】超详细的MySQL入门,数据类型!

MySQL基础— 入门与初步

 

MySQL 是完全网络化的跨平台关系型数据库系统,同时是具有客户机/服务器体系结构的分布式数据库管理系统。MySQL是一个精巧的SQL数据库管理系统,虽然它不是开放源代码的产品,但在某些情况下你可以自由使用。由于它的功能强大、使用简便、管理方便、运行速度 快、安全可靠性强、灵活性、丰富的应用编程接口(API)以及精巧的系统结构,受到了广大自由软件爱好者甚至是商业软件用户的青睐,特别是与 Apache 和 PHP/PERL 结合,为建立基于数据库的动态网站提供了强大动力。

 


小伙伴们在程序猿的学习和工作过程中,难免会遇到一些磕磕碰碰的问题,难以解决,这些问题可能会困扰你许久,但是懂得人一下就解决了,为此我特意建了一个java+MySql技术学习群,快来加入我们吧:925050116,里面有大量优质视频资料免费领取喔,让你少走弯路,互相学习交流,一起进步,不负年华!!!

你的支持,是我们努力下去的动力!!!


 

SQL和MySQL

  • SQL是结构化查询语言的缩写,是当前关系数据库管理系统(RDBMS)的ANSI标准语言
  • SQL包含关系型操作,允许数据操作或数据处理的主要语句是SELECT、INSERT、UPDATE和DELETE
  • SQL允许数据定义或结构化处理的基本语句是CREATE、ALTER和DROP
  • MySQL 是一个关系数据库系统,支持 SQL 查询语言
  • MySQL 可以是免费的,你不需要为它付费
  • MySQL 系统的速度非常快,同样它的性能也是十分优良的
  • MySQL 是一个管理简捷的数据库,它没有庞大而臃肿的可视化管理工具

关系数据库管理系统(RDBMS)

特点:

  • 数据的基础是关系
  • 数据表的操作只产生关系
  • 关系就是一个描述两个集合的元素如何相互联系或如何一一对应的数学概念

关系表的组成:

  • 属性(attribute)或列: 标示位置,有作用域或数据类型,例如字符或整数
  • 元组(tuple)或行: 就是数据
  • 列和行的交集通常被叫做单元

成为关系模型的必要条件:

  • 贮存在单元中的数据必须是原子的,即每个单元只能存贮一条数据
  • 贮存在列下的数据必须具有相同数据类型
  • 每行是唯一的(没有完全相同的行)
  • 列没有顺序
  • 行没有顺序
  • 列有一个唯一性的名称

关系模型的两个原则:

  • 实体完整性原则(entity integrity rule)
  • 引用完整性原则(referential integrity rule)

主键(primary key) 是能唯一标识行的一列或一组列的集合,数据库设计者决定哪些列的组合能够最准确和有效地反映业务情形,这并不意味着其
他数据未被存贮,只是那一组列被选作主键而已。

MySQL的体系结构
使用 MySQL 时存取数据时,必须至少使用两个或者说两类程序:

  • 一个位于存放您的数据的主机上的程序——数据库服务器
  • 连接到数据库服务器的程序——客户机,MySQL就是最常见的客户机程序

MySQL 的客户机/服务器体系结构具有如下优点:

  • 服务器提供并发控制,使两个用户不能同时修改相同的记录
  • MySQL 可以非常出色的在因特网上工作,因此不必在数据库所在的机器上注册,可以在任何位置运行一个客户机程序连接到网络上的服务器
  • MySQL 含有一个灵活而又有成效的安全系统,只允许那些有权限的人访问数据库并且只能完成他们被允许的操作

MySQL 使用的 SQL 语言

表、列和函数

 是数据在一个 MySQL 数据库中的存储机制,它包含一组固定的列,如下表所示。 表中的列描述该表所跟踪的实体的属性,每个列都有一个名字及各自的特性。

表格 Teachers

IDNameTelSex
1Tom12345678M
2Mary31245678F
3Mike12354876M
4John12354786M
.................

 由两部分组成:数据类型(datatype)和长度(length)。

函数 (function)是存储在数据库中的代码块,其差别在于函数可以把值返回调用程序。

SQL 的语句

SQL 是一种典型的非过程化程序设计语言,这种语言的特点是:只指定哪些数据被操纵,至于对这些数据要执行哪些操作,以及这些操作是如何执行的,则未被指定。例如,我们从上面的表中取出 ID 为 1 的数据:
<pre><code>
SELECT * FROM Teachers WHERE ID=1
</code></pre>


小结

本节介绍了MySQL及其使用的查询语言SQL,采用列表的形式将读书所得的梗概摘录至此。后续将逐步展开MySQL的语法和使用。

 

 

MySQL基础—数据类型和列类型

 

 

MySQL支持大量的列类型,它可以被分为3类:数字类型、日期和时间类型以及字符串(字符)类型。首先给出可用类型的一个概述,并且总结每个列类型的存储需求,然后提供每个类中的类型性质的更详细的描述。

MySQL的基本数据类型

数字

MySQL中的数字是类似于100或3.1415926这样的值。MySQL支持说明为整数(无小数部分)或浮点数(有小数部分)的值:

  • 整数由数字序列组成;浮点数由一个阿拉伯数字序列、一个小数点和另一个阿拉伯数字序列组成。两个阿拉伯数字序列可以分别为空,但不能同时为空。
  • MySQL支持科学表示法,科学表示法由整数或浮点数后跟“e”或“E”、一个符号(“+”或“-”,必须具有)和一个整数指数来表示。 数值前可放一个负号“-”以表示负值。

十六进制数

MySQL支持十六进制值。以十六进制形式表示的整数由“0x”后跟一个或多个十六进制数字(”0”到“9”及“a”到“f”)组成。十六进制数字不区分大小写,但其前缀“0x”不能为“0X”。

日期和时间值

日期和时间值是一些类似于“1999-06-17”或“12:30:43”这样的值。MySQL还支持日期/时间的组合,如“1999-06-17 12:30:43”。需要注意的是,MySQL是按年-月-日的顺序表示日期的,这可能与你学过的高 级语言不同。

字符串

字符串既可以是用双引号括起来,也可以是用单引号。例如:“I like MySQL”或'MySQL is powerful'。

表格 转意序列列表

符号含义符号含义
\0ASCII 0(NUL)字符\n换行
\r回车\t定位符
\b退格\反斜杠
'单引号"双引号
%百分号_下划线

NULL值

NULL值可适用于各种列类型,它通常用来表示“没有值”、 “无数据”等意义,并且不同于例如数字类型的0为或字符串类型的空字符串。

注意 NUL字节与NULL值不同:NUL为一个零值字节,而 NULL 代表没有值。

MySQL的列类型

数据库中的每个表都是由一个或多个列构成的。可以用 CREATE TABLE 语句创建一个表,创建表时要为每列指定一个类型。列的类型与数据类型相对应,但是比数据类型更为具体,用列类型描述表列可能包含的值的种类以及范围,列的值必须符合规定,不能包含对应的数据类型所允许的所有值。例如,CHAR(16)就规定了存储的字符串值必须是16位。当然不是你必须存储16个字符,而是指列在表中要占16个字符的宽度的。

MySQL 的列类型是一种手段,通过这种手段可以描述一个表列包含什么类型的值,这又决定了 MySQL 怎样处理这些值。例如,数据值既可用数值也可用串的列类型来存放,但是根据存放这些值的类型,MySQL 对它们的处理将会有些不同。每种列类型都有几个特性如下:

  • 其中可以存放什么类型的值
  • 值要占据多少空间,以及该值是否是定长的或可变长的
  • 该类型的值怎样比较和存储
  • 该类型是否允许 NULL 值
  • 该类型是否可以索引

下面是创建一个表的例子:

CREATE TABLE Teacher
(
    ID TINYINT UNSIGNED NOT NULL,  
    Name CHAR(16) NOT NULL,
    Tel NUMERIC(8),
    Sex ENUM("F","M") DEFAULT "M"
)

由上面这个例子可以知道,创建列类型的语法是:
<pre><code>
col_name col_type [col_attributes][general_attributes]
</code></pre>

其中:

  • col_name 列的名字
  • col_type 列类型,控制存储在列中的数据类型
  • col_attributes 专用属性,只能应用于制定列
  • general_attributes 通用属性,例如上面提到了NULL、NOT NULL和DEFAULT

为方便使用,下面以文字说明和表格的形式展示MySQL的常见列类型。

数字列类型

MySQL支持所有的ANSI/ISO SQL92的数字类型。这些类型包括准确数字的数据类型 (NUMERIC, DECIMAL, INTEGER和 SMALLINT),也包括近似数字的数据类型(FLOAT, REAL,和 DOUBLE PRECISION)。关键词 INT 是 INTEGER 的一个同义词,而关键词 DEC 是 DECIMAL 一个同义词。

MySQL 的数字列类型有两种:

  • 整型 MySQL 提供了五种整型 TINYINT、SAMLLINT、INT、 MEDIUMINT 和 BIGINT。整数列可以用 UNSIGNED 禁用负数值。
  • 浮点型 MySQL提供了三种浮点型,FLOAT、DOUBLE和DECIMAL。

表格 MySQL的数字列类型——整数类型

类型名取值范围(有符号或无符号)占用存储(字节)
TINYINT-128~127或0~2^8-1)1
SMALLINT-32768~32767或0~2^16-12
MEDIUMINT-223~223-1或0~2^24-13
INT-231~231-1或0~2^32-14
BIGINT-263~263-1或0~2^64-18

例如,建立一个数字列表格,输入以下代码:

CREATE TABLE number
(
    tiny TINYINT,u_tiny TINYINT UNSIGNED,
    small SMALLINT,u_small SMALLINT UNSIGNED,
    medium MEDIUMINT,u_medium MEDIUMINT UNSIGNED,
    num INT,u_num INT UNSIGNED,
    big BIGINT,u_big BIGINT UNSIGNED
)

然后显示这个表的结构

<pre><code>
DESCRIBE number
</pre></code>

得到表格输出结果如下:

+----------+-----------------------+
|  Field   |        Type           |
+----------+-----------------------+
| tiny     | tinyint(4)            |
| u_tiny   | tinyint(3) unsigned   |
| small    | smallint(6)           |
| u_small  | smallint(5) unsigned  |
| medium   | mediumint(9)          |
| u_medium | mediumint(8) unsigned |
| num      | int(11)               |
| u_num    | int(11) unsigned      |
| big      | bigint(20)            |
| u_big    | bigint(20) unsigned   |
+----------+-----------------------+

表格 MySQL的数字列类型——浮点类型

类型名占用存储(字节)
FLOAT4
DOUBLE8
DECIMAL(M)M+2 (ver >3.23)

在为列选择了使用某种数值类型时,除了要考虑数据的类型外,还应该注意所要表示的值的范围和存储需求,只需选择能覆盖要取值的范围的最小类型即可。

日期和时间列类型

表格 MySQL的日期和时间列类型

类型名含义类型名含义
DATE日期, 'YYYY-MM-DD'TIME时间, 'HH:MM:SS'
DATETIME时间和时间组合, 'YYYY-MM-DD HH:MM:SS'TIMESTAMP时间戳,以 YYYMMDDHHMMSS 格式来显示

举例,生成一个日期和时间表,并插入2个元素:

CREATE TABLE my_test
(
    id INT,
    ts TIMESTAMP
)
INSERT my_test VALUES(1,20010101000000)
INSERT my_test(id) VALUES(2)

SELECT * from my_test

显示得到结果输出如下:

+------+----------------+
|  id  |     ts         |
+------+----------------+
|  1   | 20010101000000 |
|  2   | 20010113165713 |
+------+----------------+

字符串列类型

MySQL 提供的字符串类型包括 CHAR、VARCHAR、BLOB、TEXT、ENUM 和 SET。 对这些类型作一个简要的叙述如下:

表格 MySQL的字符串列类型

类型名含义类型名含义
CHAR定长字符串VARCHAR变长字符串
TINYBLOBBLOB(2^8-1)TINYTEXTTEXT(2^8-1)
BLOBBLOB(2^16-1)TEXTTEXT(2^16-1)
MEDIUMBLOBBLOB(2^24-1)MEDIUMTEXTTEXT(2^24-1)
LONGBLOBBLOB(2^32-1)LONGTEXTTEXT(2^32-1)
ENUM('value1','value2',...)枚举:列只能赋值为某个枚举成员或NULLSET('value1','value2',...)集合:列可以赋值为多个集合成员或NULL

表格中,BLOB是一个能保存可变数量的数据的二进制的大对象。在某种意义上,串实际是一种非常“通用”类型,因为可用它们来表示任意值,不仅仅是字符串。例如,可用串类型来存储二进制数据,如图像、视频或音频。


小结

本节对 MySQL 的数据类型和列类型进行了简单的描述,是我们继续学习 SQL 语言的基础。文中出现大量的 SQL 语句,尤其是建表的语句,你可能现在还不知道如何完成这些查询,你只需要理解其中的含义就可以了,因为阅读了后面的章节你就会理解这 一切。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值