mysql数据库基础

数据库基础

数据库( Data Base,DB)是一个长期存储在计算机内有组织、可共享、统一管理的数据集合。

数据库的特点:实现数据共享,减少数据冗余;采用特定的数据类型:其有较高的数据独立性:;具有统一的数据控制功能

1 表

在关系数据库中,数据库表是一系列二维数组的集合,用来存储数据和操作数据的逻辑结构。

2 数据类型

数据类型决定了数据在计算机中的存储格式,代表不同的信息类型。

SQL是结构化查询语言( Structured Query Language)。包含以下4个部分:

(1)数据定义语言(DDL):DROP、 CREATE, ALTER等语句
(2)数据操作语言(DML): INSERT(插入)、 UPDATE(修改)、 DELETE(删除)语句
(3)数据查询语言(DQL): SELECT语句
(4)数据控制语言(DCL): GRANT、 REVOKE、 COMMIT、 ROLLBACK等语句

3 数据库基本操作
SHOW DATABASES;  # 查看当前所有数据库

# 创建数据库是在系统磁盘上划分一块区域用于数据的存储和管理
CREATE DATABASE db_name;

# 删除数据库是将数据库表和数据从磁盘空间上清除(不能恢复)。
DROP DATABASE database name
4 存储引擎

数据库存储引擎是数据库底层组件,数据库管理系统(DBMS)使用数据引擎进行创建、査询、更新和删除数据操作。(针对具体的要求,可以对每一个表使用不同的存储引擎)。

SHOW ENGINES 	# 查看系统支持存储引擎

这里写图片描述
Support列的值表示某种引擎是否能使用:YES表示可以使用,NO表示不能使用,
DEFAULT表示该引擎为当前默认存储引擎。

1. InnoDB存储引擎

InnoDB是事务型数据库的引擎,支持事务安全表(ACID),支持行锁定和外键 InnoDB主要特性有:

(1) InnoDB提供具有提交、回滚和崩溃恢复能力的事务安全(ACD兼容)存储引擎。 InnoDB锁定在行级并且在 SELECT语句中提供非锁定读。
(2) InnoDB是为处理巨大数据量的最大性能设计。

使用 InnoDB时, MySQL将在 数据目录下创建初始大小为10MB的自动扩展数据的ibdata1文件,以及两个5MB大小的ib_logfile0和 ib_logfile的的日志文件

2. MyISAM存储引擎

MyISAM拥有较高的插入、查询速度,但不支持事务。

(1)每个 MyISAM表最大索引数是64,这可以通过重新编译来改变。每个索引最大的列数是16个
(2)BLOB和TEXT列可以被索引(支持全文索引)。
(3)NULL值被允许在索引的列中。这个值占每个键的0-1个字节
(4)每个字符列可以有不同的字符集。

使用 MyISAM引擎创建数据库,将生产3个文件。文件的名字以表的名字开始,扩展名指出文件类型;fm文件存储表定义,数据文件的扩展名为MYD( MYData),索引文件的扩展名是MYI( MYIndex)

5 数据类型

MySQL支持多种数据类型,主要有数值类型、日期/时间类型和字符串类型。

(1)数值数据类型:包括整数类型 TINYINT、 SMALLINT、 MEDIUMINT、INT、 BIGINT、
浮点小数数据类型 FLOAT和 DOUBLE,定点小数类型 DECIMAL。
(2)日期时间类型:包括YEAR、TIME、DATE、 DATETIME和 TIMESTAMP。
(3)字符串类型:包括CHAR、 VARCHAR、 BINARY、 VARBINARY、BLOB、TEXT、ENUM和SET等。字符串类型又分为文本字符串和二进制字符串。

1. 整数类型

数值型数据类型主要用来存储数字,不同的数据类型提供不同的取值范围,可以存储的值范围越大,其所需要的存储空间也会越大。 MySQL主要提供的整数类型有: TINYINT、 SMALLINT、 MEDIUMINT、INT( INTEGER)、 BIGINT。整数类型的属性字段可以添加 AUTO_INCREMENT自增约束条件。

数据类型存储大小取值范围(java只存在有符号数据类型)
TINYINT1字节-27~27-1
SMALLINT2字节-215~215-1
MEDIUMINT3字节-223~223-1
INT(NTEGER)4字节-231~231-1
BIGINT8字节-263~264-1

例如,假设声明一个INT类型的字段:

id  INT (2) 
age INT (8)

解释:数字表示的是该数据类型指定的显示宽度,显示宽度与数据类型的取值范围和占用空间是无关的。字段中的数据一般只显示指定位数字的宽度,数值的位数小于指定的宽度时会由空格填充;如果使用了zerofill属性,默认补充的空格用零代替。如果插入了大于显示宽度的值,只要该值不超过该类型整数的取值范围,数值依然可以插入并且能够显示出来。
这里写图片描述

如果不指定数据类型的显示宽度,则系统为每一种类型指定默认的宽度值。可以用 DESC table_name 查看表结构: 默认显示宽度与其有符号数的最小值的宽度相同。如果指定了数据的显示宽度,不设置zerofill属性,设置的指定值没有意义,设置了zerofill扩展属性试,默认就有了无符号属性(UNSIGNED)

2. 浮点数类型和定点数类型

MySQL中使用浮点数和定点数来表示小数。浮点类型有两种:单精度浮点类型( FLOAT)和双精度浮点类型( DOUBLE),定点类型只有一种: DECIMAL。浮点类型和定点类型都可以用(M,N)来表示,其中M称为精度,表示总共的位数:N称为标度,是表示小数的位数

数据类型存储大小
FLOAT4字节
DOUBLE8字节
DECIMAL (M D). DECM+2 字节

浮点数在内存中的存储形式:
这里写图片描述
浮点数由三部分构成,符号位,指数以及底数。(十进制转二进制:整数除2取余,倒序排列;小数乘2取整,正序排列)

符号位、指数和尾数均从浮点数的二进制科学计数形式中获取 :$ (-1)m*1.xxx…*2n $ 其中m表示符号位,n表示指数部分,xxxxx表示尾数部分,符号位决定浮点数的正负,0正1负。

float类型指数的起始数为127(二进制 0111 1111),double类型指数的起始数为1023(二进制011 1111 1111),在此基础上加指数,得到的就是内存中指数的表示形式。尾数则直接填入,如果空间多余则以0补齐,如果空间不够则0舍1入

例如:计算12.0f-11.9f

12.0f 的内存存储格式为: 0 1 0000010 10000000000000000000000

11.9f 的内存存储格式为: 0 1 0000010 011 11100110011001100110

可见两数的指数位完全相同,只要对有效数位进行减法即可。

12.0f-11.9f 结果: 0 1 0000010 00000011001100110011010

将结果还原为十进制为: 0.000 11001100110011010= 0.10000038
注意:两浮点数阶码的差(指数位差值),即⊿E=Ex-Ey,将小阶码加上⊿E,使之与大阶码相等,同时将小阶码对应的浮点数的尾数右移相应位数,以保证该浮点数的值不变。(尾数右移时是将最低位移出,会损失一定的精度)

DECIMAL如不指定精度,默认为(10,0)。
浮点数和定点数在长度一定的情况下,浮点数能够表示更大的数据范围:它的缺点是会引起精度问题。
定点数以字符串形式存储,在对精度要求比较高的时候(如货币,科学数据等)使用 DECIMAL的类型比较好

3. 日期与时间类型

MySQL中有多种表示日期的数据类型,主要有: DATETIME、DATE、 TIMESTAMP、TIME和YEAR。
日期与时间数据类型:

类型名称日期格式日期范围存储需求
YEARYYYY1901~21551字节
TIMEHH:MM:SS-838:59:59~838:59:593字节
DATEYYYY-MM-DD1001-01-01~9999-12-33字节
DATETIMEYYYY-MM-DD HH:MM:SS1001-01-01 00:00:00~9999-12-31 23:59:598字节
TIMESTAMPYYYY-MM-DD HH: MM:SS1970-01-01 00:00:01 UTC~2038-01-19 03:14:07 UTC4字节

1 YEAR

(1)以4位字符串或者4位数字格式表示的YEAR,范围为“1901~“2155”。输入
格式为‘YYYY’或者YYYY。
(2)以2位字符串格式表示的YEAR,范围为“00到“99。“00‘69和“7099”范围的值分别被转换为2000-2069和1970~1999范围的YEAR值。“0’与00的作用相同。插入超过取值范围的值将被转换为2000
(3)以2位数字表示的YEAR,范围为199。169和70~99范围的值分别被转换为
2001-2069和1970-1999范围的YEAR值。注意:在这里0值将被转换为0000.

2 TIME
TME类型的取值范围为-838:59:59~838:59:59,不仅可以用于表示一天的时间,还可能是某个事件过去的时间或两个事件之间的时间间隔。
可以使用各种格式指定TME值:

(1).“D HH: MM: SS’格式的字符串。还可以使用下面任何一种“非严格”的语法
HH: MM: SS’、“HHMM’、‘ D HH: MM’、“DHH’或‘SS’,这里的D表示日,可以取0-34之间的值。在插入数据库时,D被转换为小时保存,格式为“D*24+HH”。
(2) ‘HHMMSS’格式的的字符串或者 HIHMMSS格式的数值,可以转换为相应的时间。如果是不合法的数据,存储时将变为00:00:00
(3).为TIME列分配简写值时应注意:如果没有冒号, MySQL解释值时,假定最右边的两位表示秒。TME值中如果使用冒号则肯定被看作当天的时间。也就是说,“11:12表示11:12:00。
(4).在使用"D HH"格式时,小时一定要使用双位数值,如果小于10的小时,在前面补0.

3.DATE
在给DATE类型的字段赋值时,可以使用字符串类型或者数字类型的数据插入,只要符合DATE的日期格式即可。
4. DATETIME
在给 DATETIME类型的字段赋值时,可以使用字符串类型或者数字类型的数据插入,只要符合 DATETIME的日期格式即可。
5.TIMESTAMP
TIMESTAMP存储的是UTC( Coordinated Universal time),为世界标准时间,因此在插入数据时,要保证在合法的取值范围内

  1. TIMESTAMP与 DATETIME除了存储字节和支持的范围不同外,还有一个最大的区别就是: DATETIME在存储日期数据时,按实际输入的格式存储;而 TIMESTAMP值的存储是以UTC(世界标准时间)格式保存的,存储时对当前时区进行转换,检索时再转换回当前时区。即查询时,根据当前时区的不同,显示的时间值是不同的。
  2. TIMESTAMP在默认的情况下,当插入一条记录但并没有指定 TIMESTAMP这个列值时, MySQL会把 TIMESTAMP列设为当前的时间。
4.文本字符串类型

MySQL中文本字符串类型指CHAR、 VARCHAR、TEXT、ENUM 和 SET。

类型名称说明存储需求
CHAR(M)固定长度字符串M字节,1 ≤ \leq M$\leq$255
VARCHAR(M)变长字符串L+1字节,L ≤ \leq M和1 ≤ \leq M$\leq$255
TEXT文本字符串L+2字节,L< 2 8 2^8 28
ENUM枚举类型(单选字符串)1或2个字节,取决于枚举值的数目(最大值65535)
SET集合类型(多选字符串)1,2,3,4或8个字节,取决于集合成员的数量(最多64个成员)

1.CHAR和 VARCHAR类型
CHAR(M)为固定长度字符串,在定义时指定字符串列长。当保存时在右侧填充空格以达到指定的长度。M表示列长度,M的范围是0-255个字符。
VARCHAR的最大实际长度由最长的行的大小和使用的字符集确定,而其实际占用的空间为字符串的实际长度加1(字符串结束字符 )。在VARCHAR类型值保存和检索时尾部的空格仍保留。
2.TEXT类型
TEXT列保存非二进制字符串,如文章内容、评论等。当保存或查询TEXT列的值时,不删除尾部空格。
3.ENUM类型
单选字符串数据类型,适合存储表单界面中的“单选值”。设定enum的时候,需要给定“固定的几个选项”;存储的时候就只存储其中的一个值。
设定ENUM类型:

字段名 ENUM("选项1","选项2","选项3",...);

ENUM值在内部用整数表示,每个枚举值均有一个索引值:列表值依次是1,2,3,4,5…,最多有65535个选项。使用的时候,可以使用选项的字符串格式,也可以使用对应的数字。
4. SET类型
多选字符串数据类型,适合存储表单界面的“多选值”。设定set的时候,同样需要给定“固定的几个选项”;存储的时候,可以存储其中的若干个值。
设定SET类型:

   字段名 SET("选项1","选项2","选项3",...)

SET值在内部用整数表示,列表中每一个值都有一个索引编号。列表值依次是1,2,4,8,16…,最多有64个选项。当创建表时,SET成员值的尾部空格将自动被删除。如果插入SET字段中列值有重复,则 MySQL自动删除重复的值。
使用的时候,可以使用SET选项的字符串本身(多个选项用逗号分隔),也可以使用多个选项的数字之和(比如:1+2+4=7)

6 运算符

MySQL的内部运算符主要有四大类,分别是:算术运算符、比较运算符、逻辑运算符、位操作运算符。

1.算术运算符
算术运算符用于各类数值运算,包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)。
2.比较运算符
比较运算符用于比较运算。包括大于(>)、小于(<)、等于(=)、大于等于(>=)、小于等于(<=)、不等于(!=),以及IN、 BETWEEN AND、 IS NULL、 GREATEST、 LEAST、LIKE、 REGEXP等
3.逻辑运算符
逻辑运算符的结果为1(TRUE)、0( FALSE),运算符有:逻辑非(NOT或者!)、逻辑与(AND或者&&)、逻辑或(OR或者‖)、逻辑异或(ⅩOR)。
4.位操作运算符
位操作运算符参与运算的操作数按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)6种。

比较运算符:
这里写图片描述
逻辑运算符:
这里写图片描述
位运算符:是对二进制字节中的位进行测试、移位处理。
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值