数据库的五个基本单位
数据库服务器
数据库
数据表
数据字段
数据行
分类
关系型数据库
oracle
mysql
postgresql
SQL server
…..
非关系数据库
Redis
MongoDB
CouchDB
… …
选择MySql的原因
良好的生态
开源、免费
性能强劲
什么是sql
SQL(Structured Query Language)结构化查询语言的缩写,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存储数据以及查询、更新和管理关系型数据库系统;同时也是数据库脚本文件的扩展名。
1974年,在IBM的圣约瑟研究实验室研制的大型关系数据库管理系统SYSTEM R中,使用了SEQUEL语言,后来发展称为SQL语言。
1986年10月,美国国家标准协会对SQL进行规范后,以此作为关系式数据库管理系统的标准语言,1987年得到国际标准组织的支持称为国际标准。不过各种流行的数据库系统在其实践过程中都对SQL规范作了某些编改和扩充,所以,实际上不同数据库系统之间的SQL不能完全相互通用。
sql分类
数据定义语言(DDL),例如:CREATE、DROP、ALTER等语句。
数据操作语言(DML),例如:INSERT、UPDATE、DELETE。
数据查询语言(DQL),例如:SELECT语句。
数据控制语言(DCL),例如:GRANT、REVOKE。
数据事务语言(DTL),例如:BEGIN、COMMIT、ROLLBACK等语句
数据类型
整型
浮点类型
浮点是非精确值,会存在不太准确的情况;而decimal叫做定点数,在MySQL内部本质上是用字符串存储的。
实际使用过程中如果存在金额、钱精度要求比较高的浮点数存储,建议使用decimal(定点数)这个类型。
字符类型
字符类型的区别
1. char类型用于定长字符串,并且必须在圆括号内用一个大小修饰符来定义。这个大小修饰符的范围从 0-255。比指定长度大的值将被截短,而比指定长度小的值将会用空格作填补。
*2. varchar把这个大小视为值的大小,长度不足的情况下不用空格补足,只使用存储字符串实际需要的长度,但长于指定的值仍然会被截短。
*3. text类型与blob类型对于字段长度要求超过 255 个的情况下,MySQL提供了text和blob两种类型。根据存储数据的大小,它们都有不同的子类型。这些大型的数据用于存储文本块或图像。
*4. binary声音文件等二进制数据类型。
*5. text和blob类型在分类和比较上存在区别。blob类型区分大小写,而 text不区分大小写。大小修饰符不用于各种 blob和text子类型。
时间类型
复合类型
Enum类型
ENUM 类型因为只允许在集合中取得一个值,有点类似于单选项。在处理相互排拆的数据时容易让人理解,比如人类的性别。ENUM 类型字段可以从集合中取得一个值或使用null值,除此之外的输入将会使 MySQL 在这个字段中插入一个空字符串。另外如果插入值的大小写与集合中值的大小写不匹配,MySQL会自动使用插入值的大小写转换成与集合中大小写一致的值。
ENUM 类型在系统内部可以存储为数字,并且从1开始用数字做索引。一个 ENUM 类型最多可以包含 65536 个元素,其中一个元素被 MySQL 保留,用来存储错误信息,这个错误值用索引 0 或者一个空字符串表示。
MySQL 认为 ENUM 类型集合中出现的值是合法输入,除此之外其它任何输入都将失败。这说明通过搜索包含空字符串或对应数字索引为 0 的行就可以很容易地找到错误记录的位置。
set类型
SET 类型与 ENUM 类型相似但不相同。SET类型可以从预定义的集合中取得任意数量的值。并且与 ENUM 类型相同的是任何试图在 SET 类型字段中插入非预定义的值都会使MySQL插入一个空字符串。如果插入一个即有合法的元素又有非法的元素的记录,MySQL 将会保留合法的元素,除去非法的元素。
一个 SET 类型最多可以包含 64 项元素。在 SET 元素中值被存储为一个分离的“位”序列,这些“位”表示与它相对应的元素。“位”是创建有序元素集合的一种简单而有效的方式。
并且它还去除了重复的元素,所以SET类型中不可能包含两个相同的元素。
希望从 SET 类型字段中找出非法的记录只需查找包含空字符串或二进制值为 0 的行。
UNSIGNED
UNSIGNED(无符号) 主要用于整型和浮点类型,使用无符号。即没有前面面的负号,所有的数都为正数。
存储位数更长。tinyint整型的取值区间为,-128~127。而使用无符号后可存储0-255个长度。
创建时在整型字段语句后接上unsigned
zerofull
0(不是空格)可以用来增补输出的值。使用这个修饰符可以阻止 MySQL 数据库存储负值。
创建时在整型字段语句后接上zerofill
auto_increment
自动增加,只用于整型,可以设置起始值,默认为1
常与后面primary key一起使用
创建表时在整型字段后加上:auto_increment=起始值 primary key
修改起始值:alter table user auto_increment=起始值
default
default属性确保在没有任何值可用的情况下,赋予某个常量值,这个值必须是常量,因为MySQL不允许插入函数或表达式值。
此外,此属性无法用于BLOB或TEXT列。如果已经为此列指定了NULL属性,没有指定默认值时默认值将为NULL,否则默认值将依赖于字段的数据类型。
创建表时在字段语句后接上:default '值'
not null
如果将一个列定义为not null,将不允许向该列插入null值。建议在重要情况下始终使用not null属性,因为它提供了一个基本验证,确保已经向查询传递了所有必要的值。
创建时在字段语句后接上:not null
null为列指定null属性时,该列可以保持为空,而不论行中其它列是否已经被填充。记住,null精确说法是“无”,而不是空字符串或0。