MySQL
1. 数据类型
1.1. 日期和时间数据类型
MySQL数据类型 | 含义 |
---|---|
date | 3字节,日期,格式:2014-09-18 |
time | 3字节,时间,格式:08:42:30 |
datetime | 8字节,日期时间,格式:2014-09-18 08:42:30 |
timestamp | 4字节,自动存储记录修改的时间 |
year | 1字节,年份 |
1.2. 整型
MySQL数据类型 | 含义(有符号) |
---|---|
tinyint | 1字节,范围(-128~127) |
smallint | 2字节,范围(-32768~32767) |
mediumint | 3字节,范围(-8388608~8388607) |
int | 4字节,范围(-2147483648~2147483647) |
bigint | 8字节,范围(+-9.22*10的18次方) |
上面定义的都是有符号的,当然了,也可以加上unsigned关键字,定义成无符号的类型,那么对应的取值范围就要翻翻了,比如:tinyint unsigned的取值范围为0~255。
int(n)需配合fillzero使用,表示int的显示位数为n位,不足的左边补0,多的原样输出,不影响内存占用大小.
1.3. 浮点型
MySQL数据类型 | 含义 |
---|---|
float(m, d) | 4字节,单精度浮点型,m总个数,d小数位 |
double(m, d) | 8字节,双精度浮点型,m总个数,d小数位 |
decimal(m, d) | decimal是存储为字符串的浮点数 |
我在MySQL中建立了一个表,有一列为float(5, 3);做了以下试验:
插入123.45678,最后查询得到的结果为99.999;
插入123.456,最后查询结果为99.999;
插入12.34567,最后查询结果为12.346;
所以,在使用浮点型的时候,还是要注意陷阱的,要以插入数据库中的实际结果为准。
FLOAT和DOUBLE在不指 定精度时,默认会按照实际的精度来显示,而DECIMAL在不指定精度时,默认整数为10,小数为0。
1.4. 字符串数据类型
MySQL数据类型 | 含义 |
---|---|
char(n)效率高 | 固定长度,最多255个字符 |
varchar(n)节省内存 | 可变长度,最多65535个字符 |
tinytext | 可变长度,最多255个字符 |
text | 可变长度,最多65535个字符 |
mediumtext | 可变长度,最多2的24次方-1个字符 |
longtext | 可变长度,最多2的32次方-1个字符 |
char(n)和varchar(n)中括号中n代表字符的个数,并不代表字节个数,所以当使用了中文的时候(UTF8)意味着可以插入m个中文,但是实际会占用m*3个字节。
同时char和varchar最大的区别就在于char不管实际value都会占用n个字符的空间,而varchar只会占用实际字符应该占用的空间+1,并且实际空间+1<=n。
超过char和varchar的n设置后,字符串会被截断。
char的上限为255字节,varchar的上限65535字节,text的上限为65535。
char在存储的时候会截断尾部的空格,varchar和text不会。
varchar会使用1-3个字节来存储长度,text不会。
binary属性只用于char和varchar值。当为列指定了该属性时,将以区分大小写的方式排序。与之相反,忽略binary属性时,将使用不区分大小写的方式排序。
1.5. 其它类型
enum(“member1″, “member2″, … “member65535″)
enum数据类型就是定义了一种枚举,最多包含65535个不同的成员。当定义了一个enum的列时,该列的值限制为列定义中声明的值。如果列声明包含NULL属性,则NULL将被认为是一个有效值,并且是默认值。如果声明了NOT NULL,则列表的第一个成员是默认值。
set(“member”, “member2″, … “member64″)
set数据类型为指定一组预定义值中的零个或多个值提供了一种方法,这组值最多包括64个成员。值的选择限制为列定义中声明的值。
BLOB(Binary Large OBject)二进制大对象
专门存储图片,视频(提供视频的链接地址)
CLOB(Character Large OBject)字符大对象
存储比较大的文本,4G+的字符串可以储存
2. 常用命令
2.1. mySQL使用步骤
- 连接数据库:mysql -h 服务器主机地址 -u 用户名 -p 用户密码
- 打开/关闭服务:net start/stop mysql(mysql57)
- 打开数据库:use database_name
展示所有表/数据库/变量/存储引擎:show tables/databeses/variables/engines
2.2. 其他命令
- 查看版本:mysql --version/-V 或者进入后select version()
- 退出mysql:quit 或者 exit 或者 \q 或ctrl+c(mysql里可能失效)
- show create table table_name: \G 查看表的创建过程的语句,\G为格式化
- show tables from database_name查看其它数据库的表
- describe/desc table_name 查看表结构
结果含义:Field字段名,Type字段类型,NULL是否可以为空,Key是否是主键,Default默认值,Extra附加信息
- set character_set_result='GBK'设置显示编码
- source 路径 运行.sql文件
- mysqldump 库名 [表名]>路径 -uroot -p123 导出数据
- truncate table table_name 清空表,表结构不变,速度快
- use database_name 使用数据库
- set @变量名=值 //设置变量
- select @变量名 //查询变量值
3. SQL运算符
运算符是一个保留字或字符,主要用于连接WHERE后面的条件。
3.1. 算数运算符
运算符 | 描述 |
---|---|
+ | 加法 - 把运算符两边的值相加 |
- | 减法 - 左操作数减去右操作数 |
* | 乘法 - 把运算符两边的值相乘 |
/ | 除法 - 左操作数除以右操作数 |
% | 取模 - 左操作数除以右操作数后得到的余数 |
3.2. 比较运算符
运算符 | 描述 |
---|---|
= | 检查两个操作数的值是否相等,如果相等则条件为真 |
!= | 检查两个操作数的值是否相等,如果不相等则条件为真。 |
<> | 检查两个操作数的值是否相等,如果不相等则条件为真 |
> | 检查左操作数的值是否大于右操作数的值,如果是则条件为真 |
< | 检查左操作数的值是否小于右操作数的值,如果是则条件为真 |
>= | 检查左操作数的值是否大于等于右操作数的值,如果是则条件为真 |
<= | 检查左操作数的值是否小于等于右操作数的值,如果是则条件为真 |
!< | 检查左操作数的值是否不小于右操作数的值,如果是则条件为真 |
!> | 检查左操作数的值是否不大于右操作数的值,如果是则条件为真 |
3.3. 位运算符
运算符 | 描述 | ||
---|---|---|---|
& | 如果同时存在于两个操作数中,二进制 AND 运算符复制一位到结果中 | ||
\ | \ | 如果存在于任一操作数中,二进制 OR 运算符复制一位到结果中 | |
~ | 二进制补码运算符是一元运算符,具有"翻转"位效应 | ||
<< | 二进制左移运算符。左操作数的值向左移动右操作数指定的位数 | ||
>> | 二进制右移运算符。左操作数的值向右移动右操作数指定的位数 |
3.4. 逻辑运算符
运算符 | 描述 | ||
---|---|---|---|
AND | AND 运算符允许在一个 SQL 语句的 WHERE 子句中的多个条件的存在。 | ||
BETWEEN | BETWEEN 运算符用于在给定最小值和最大值范围内的一系列值中搜索值。用在数字闭区间,用在字符前闭后开 | ||
EXISTS | EXISTS 运算符用于在满足一定条件的指定表中搜索行的存在。 | ||
IN | IN 运算符用于把某个值与一系列指定列表的值进行比较。 | ||
NOT IN | IN 运算符的对立面,用于把某个值与不在一系列指定列表的值进行比较。 | ||
LIKE | LIKE 运算符用于把某个值与使用通配符运算符的相似值进行比较。 | ||
GLOB | GLOB 运算符用于把某个值与使用通配符运算符的相似值进行比较。GLOB 与 LIKE 不同之处在于,它是大小写敏感的。 | ||
NOT | NOT 运算符是所用的逻辑运算符的对立面。比如 NOT EXISTS、NOT BETWEEN、NOT IN,等等。它是否定运算符。 | ||
OR | OR 运算符用于结合一个 SQL 语句的 WHERE 子句中的多个条件。 | ||
IS NULL | NULL 运算符用于把某个值与 NULL 值进行比较。 | ||
IS | IS 运算符与 = 相似。 | ||
IS NOT | IS NOT 运算符与 != 相似。 | ||
\ | \ | 连接两个不同的字符串,得到一个新的字符串。 | |
UNIQUE | UNIQUE 运算符搜索指定表中的每一行,确保唯一性(无重复)。 |
AND 和OR 的顺序优先级对判断的影响
4. 存储引擎
4.1. MyISAM(常用)
- 格式文件-存储表结构的定义(mytable.frm)
- 数据文件-存储表行的内容(mytable.MYD)
- 索引文件-存储表上索引(mytable.MYI)
优点:可压缩,支持只读表(节省安全控制,检索效率高)
适用:大量数据读而少量数据更新的混合操作或者使用压缩的只读表.
4.2. InnoDB(默认)
优点:支持事务,级联更新和级联删除,服务器崩溃后提供自动回复
适用:查询中包含较多数据更新操作
4.3. MEMORY
表数据及索引被存储在内存中
优点:检索速度快. 缺点:不能持久化
适用:非永久需要的数据或能从基于磁盘的表中重新生成的数据.