一、数值类型

1. 数值类型 
    标准sql中包含数据类型 INTEGER, SMALLINT, DECIMAL, NUMERIC,以及FLOAT, REAL, DOUBLE。mysql在此基础上进行了拓展,增加了TINYINT, MEDIUMINT, BIGINT三种长度不同的整数,以及BIT类型,用来存放位数据。

整数类型 字节
TINYINT 1
SMALLINT 2
MEDIUMINT 3
INT/INTEGER 4
BIGINT 8
浮点数类型 字节
FLOAT 4
DOUBLE 8
定点整数类型 字节
DEC(M,D)/DECIMAL(M,D) M+2

(1.1) 整数类型 
    整数类型,mysql支持在类型名称后面的小括号内指定显示宽度,如int(5)表示当数值宽度小于5位的时候在数字前面填满宽度,如果不显式指定宽度则默认为int(11),这一般配合zero_fill一块使用,如 
create table t1(id int(5) zerofill);#表t1中的id列宽度为5位整数,如果数据位数小于5,则在前面添加0;如果数据位数大于5,仍然显示正确的数据,即不会受到数据位数的限制,只要保证该数据是个合法的4字节可以表示的整数。 
    整数类型有unsigned属性,如果一个列指定为zerofill,则mysql会自动给该列添加unsigned属性。 
    整数类型有uto_increment属性一般从1开始,每行增加1,在插入null到一个auto_increment列时,mysql插入一个比该列中当前最大值大1的值。一个表中最多只能有一个auto_increment列。对于任何想要使用auto_increment的列,应该定义为not null,并定义为primary key或定义为unique键。比如: 
create table ai (id int auto_increment not null primary key); 
create table ai(id int auto_increment not null, primary key(id)); 
create table ai(id int auto_increment not null, unique(id));

(1.2) 浮点数类型和定点数类型 
    定点数在mysql内部以字符串形式存放,比浮点数更精确,适合用来表示货币等精度高的数据。浮点数和定点数都可以用类型名称后加"(M,D)"的形式来表示,M为整数加小数部分的总位数,D为小数部分的位置。float, double在不指定精度时,默认会按照实际的精度(由实际的硬件和操作系统来决定)来显示,decimal在不指定精度时,默认的整数为为10,默认的小数为为0. 
比如用默认的decimal来存放数据1.23, 则实际只会保留整数位1,小数位的.23被丢弃。

(1.3) BIT类型 
    bit位类型用于存放位字段值,BIT(M)可以用来存放多位二进制数,M范围从1到64,如果不写则默认为1位。对于位字段,直接使用SELECT命令将不会看到结果,可以用bin()(显示为二进制格式)或者hex()(显示为十六进制格式)函数进行读取。

2. 日期和时间类型

日期和时间类型 字节 最小值 最大值
DATE 4 1000-01-01 9999-12-31
DATETIME 8 1000-01-01 00:00:00 9999-12-31 23:59:59
TIMESTAMP 4 19700101080001 2038年的某个时刻
TIME 3 -838:59:59 838:59:59
YEAR 1 1901 2155

TIMESTAMP值返回后显示为 YYYY-MM-DD HH:MM:SS格式的字符串,显示宽度固定为19个字符;如果想要获得数字值,在TIMESTAMP列添加"+0"即可。如果需要经常插入或者更新日期为当前系统时间,则通常使用TIMESTAMP来表示;TIMESTAMP还和时区相关,插入日期时,会先转化为本地时区后存放,而从数据库取出时,也同样需要经日期转换为本地时区后显示。

3. 字符串类型 
    mysql包含CHAR, VARCHAR, BINARY, VARBINARY, BLOB, TEXT, ENUM, SET等多种字符串类型。 
(3.1) CAHR和VARCHAR类型 
    CHAR 长度为创建表时声明的长度,0-255;VARCHAR为可变长字符串。在检索时,CHAR列删除了尾部的空格,而VARCHAR保留这些空格。比如: 
create table vc(v varchar(4), c char(4)); 
insert into vc values('ab', 'ab'); 
select length(v), length(c) from vc;#结果为4, 2 
select concat(v, '+'), concat(c, '+') from vc; #显示为 ab +和 ab+. 
即,char列最后的空格在做操作时都已经被删除,而varchar依然保留空格。

(3.2) BINARY和VARBINARY类型 
    BINARY和VARBINARY包含二进制字符串而不包含非二进制字符串。当保存BINARY值时,在值的最后通过填充"0x00"以达到指定的字段定义长度。对于一个BINARY(3)列,插入'a'时,变为'a\0\0'.

(3.3) ENUM类型 
    1~255个成员的枚举需要1个字节,255~65535个成员的枚举需要2个字节,最多允许65535个成员。枚举类型的成员为 字符串类型:1个或多个字符。比如: 
create table t(en enum('hello','world'));

(3.4) SET类型 
    SET类型也是一个字符串对象,里面可以包含0~64个成员,每个成员对应一个比特位,即最多有8个比特位。 
    SET类型一次可以选取多个成员,而ENUM只能选一个。比如,在表t中插入多组不同的成员: 
create table t(col set('a','b','c','d')); 
insert into t values('a,b'), ('c,d'), ('a, c, d'); #一次插入多个记录

二、算术运算符

mysql支持算术运算符、比较运算符、逻辑运算符、位运算符。 
算术运算符 
    包括 +,-,*,/,%(mod)。在mysql命令行下,通过select expression 来得到表达式的值。

比较运算符 
    包括=, <>或!=, <=>, <, <=, >, >=, between, in, is null, is not null, like, regexp或rlike. 
    其中<=>判断左右两边是否相等,其中一个操作数是null也可以正确执行。 
    is null判断操作数是否为空,如select a is null; 返回1表示true,0表示false。select 0 is null; #返回0,因为数字0不是null 
    like运算符使用格式为a like %123%,其中%为通配符。 
    regexp使用格式为str regexp str_pat,当str字符串中含有str_pat相匹配的字符串时,返回值为1,否则返回0.

逻辑表达式 
    包括not或者!, and或者&&, or或者||, xor(异或).

位运算符 
    包括 &, |, ~, ^, >>, << 等。

运算符优先级 
    和c/c++有差别,比如位运算符的优先级貌似比较高,需要在使用时注意。

三、 常用函数

1. 字符串函数

函数 功能
concat(s1,s2....sn) 连接s1,s2...sn为一个字符串
insert(str, x, y, instr) 将字符串str从第x个位置开始,y个字符长度的子串替换为字符串instr
lower(str) 将字符串str中所有字符变为小写
upper(str) 将字符串str中所有字母变为大写
left(str, x) 返回字符串str最左边的x个字符
right(str,x) 返回字符串str最右边的x个字符
lpad(str,n,pad) 用字符串pad对str最左边进行填充,直到长度为n个字符串长度
rpad(str,n,pad) 用字符串pad对str最右边进行填充,直到长度为n个字符串长度
ltrim(str) 去掉字符串str左侧的空格
rtrim(str) 去掉字符串str右侧的空格
repeat(str,x) 返回str重复x次的结果
replace(str,a,b) 用字符串b替换字符串str中所有出现的字符串a
strcmp(s1,s2) 比较字符串s1和s2
trim(str) 去掉字符串行尾和行头的空格
substring(str, x, y) 返回从字符串str x位置起y个字符长度的字串

2. 数值函数

函数 功能
abs(x) 返回x的绝对值
ceil(x) 返回大于x的最小整数值
floor(x) 返回大于等于x的最小整数值
mod(x,y) 返回x/y的模
rand() 返回参数x的四舍五入的有y位小数的值
round(x,y) 返回参数x的四舍五入的有y位小数的值
truncate(x,y) 返回数字x截断为y位小数的结果

3. 日期和时间函数

函数 功能
curdate() 返回当前日期
curtime() 返回当前时间
now() 返回当前日期和时间
unix_timestamp(date) 返回日期date的unix时间戳
from_unixtime 返回unix时间戳的日期值
week(date) 返回date为一年中的第几周
year(date) 返回date的年份
hour(time) 返回time的小时值
minute(time) 返回time的分钟值
monthname(date) 返回date的月份名
date_format(date, fmt) 返回按字符串fmt格式化日期date值
date_add(date interval expr type) 返回一个日期或者时间值加上一个时间间隔的时间值
datediff(expr, expr2) 返回起始时间expr和结束时间expr2之间的天数

4. 流程函数

函数 功能
if(value,t f) 如果value是真,返回t;否则返回f
ifnull(value1,value2) 如果value1不为空,返回value1,否则返回value2
case when [value1] then [result] .... else [default] end 如果value1为真,返回result1,否则返回default
case [expr] when [value1] then [result]...else [default]end 如果expr等于value1,返回result,否则返回default

比如,有一张表t,存放雇员的id和薪水salary。认为薪水在2000以上的为高收入,记为high,2000以下的为低,记为low。 
select user_id, if(salary > 2000, 'high', 'low') from t;#得到user_id和工资水平高低的对应 
或者可以这样 
select user_id, case when salary<=2000 then 'low' else 'high' end from t;

ifnull(value1, value2)一般用来替换null值,由于null值不能参与数值运算,该语句就是把null值用0来替换。 
select ifnull(salary, 0) from t;#列出所有的salary,如果salary那一列为空,则显示0.

5. 其他常用函数

函数 功能
database() 返回当前数据库名
version() 返回当前数据库版本
user() 返回当前登录用户名
inet_aton(ip) 返回ip地址的网络字节序数字表示
inet_ntoa(num) 返回数字代表的ip地址
password(str) 返回字符串str的加密版本
md5(str) 返回字符串str的md5值

其中,字符串的加密版本password(str)返回的是一个41字节长的字符串;md5(str)返回str的md5值,常用来对应用中的数据进行加密。

mysql使用笔记(三)的更多相关文章

  1. MYSQL学习笔记三:日期和时间函数

    MYSQL学习笔记三:日期和时间函数 1. 获取当前日期的函数和获取当前时间的函数 /*获取当前日期的函数和获取当前时间的函数.将日期以'YYYY-MM-DD'或者'YYYYMMDD'格式返回 */ ...

  2. MySql学习笔记三

    MySql学习笔记三 4.DML(数据操作语言) 插入:insert 修改:update 删除:delete 4.1.插入语句 语法: insert into 表名 (列名1,列名2,...) val ...

  3. MYSQL基础笔记(三)-表操作基础

    数据表的操作 表与字段是密不可分的. 新增数据表 Create table [if not exists] 表名( 字段名 数据类型, 字段名 数据类型, 字段n 数据类型 --最后一行不需要加逗号 ...

  4. mysql学习笔记三 —— 数据恢复与备份

    要点: 1.存储引擎2.导入导出3.备份与恢复 查看当前数据库中的所有表use db1:show tables: 1.存储引擎 不同的发动机(引擎)适用的汽车类型不一样. 存储和处理的不同方式.不同的 ...

  5. MySQL数据库笔记三:数据查询语言(DQL)与事务控制语言(TCL)

    五.数据查询语言(DQL) (重中之重) 完整语法格式: select 表达式1|字段,.... [from 表名 where 条件] [group by 列名] [having 条件] [order ...

  6. MySQL学习笔记三:库和表的管理

    1.MySQL数据库服务配置好后,系统会有4个默认的数据库. information_schema:虚拟对象,其对象都保存在内存中 performance_schema:服务器性能指标库 mysql: ...

  7. mysql基本数据类型(mysql学习笔记三)

    Mysql数据类型 小数: 浮点:小数位可以变化 Float单精度默认精度6位左右 Double 双精度默认精度16位左右 支持,控制数值范围 Type(M,D) M表示所有数值位数(不包括小数点和符 ...

  8. MySQL学习笔记(三)—索引

    一.概述 1.基本概念       在大型数据库中,一张表中要容纳几万.几十万,甚至几百万的的数据,而当这些表与其他表连接后,所得到的新的数据数目更是要大大超出原来的表.当用户检索这么大量的数据时,经 ...

  9. MySQL学习笔记(三):常用函数

    一:字符串函数 需要注意的几个细节: 1.cancat中有一个字符串为null,则结果为null. 2.left(str,x) 和 right(str,x)中x为null,则不返回任何字符串,不是nu ...

  10. mysql学习笔记(三)

    -- 主键冲突(duplicate key) ,'xujian','anhui'); ,'xiewei','anhui'); ,'luyang','anhui');-- 主键冲突了 -- 可以选择性的 ...

随机推荐

  1. 如何使用不同参数组合生成独立的TestCase函数(Python)

    在使用selenium2 Python做自动化测试的时候遇到个问题,写一个testcase 生成报告后,会有一个case的执行状态记录.这样我们写一个登录功能的自动化用例,只写一个case显然是不行的 ...

  2. Android:onNewIntent()触发机制及注意事项

    一.onNewIntent() 在IntentActivity中重写下列方法:onCreate onStart onRestart  onResume  onPause onStop onDestro ...

  3. windows Android 开发环境

    步骤: 1)下载jdk,注意这是安装路径,不是目标路径,忘记了怎么看勒,安装路径的lib文件夹下面有个tools.jar 文件,这个也是等下需要的. 2) 在path 中添加 ;%JAVA_HOME% ...

  4. 正则表达式的使用(C++)

    1.判断手机号是否合法 const regex phonepattern("^[1]+[3,5]+\\d{9}$"); const regex Mobilepatten(" ...

  5. Struts2的输入校验(2)——客户端校验

    Struts2的输入校验(2) --客户端校验 Struts2客户端校验的使用: (1)使用Struts2的标签生成输入页面的表单: (2)为该<s:form>元素添加validate=& ...

  6. SqlSever基础 isnull 将null替换成指定字符串

    镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...

  7. CF 504E Misha and LCP on Tree(树链剖分+后缀数组)

    题目链接:http://codeforces.com/problemset/problem/504/E 题意:给出一棵树,每个结点上有一个字母.每个询问给出两个路径,问这两个路径的串的最长公共前缀. ...

  8. HDU 4441 Queue Sequence(splay)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4441 题意:一个数列,三种操作:(1)插入:找到没在当前数列中的最小的正整数i,将其插在位置p之后,并 ...

  9. \n ^ \t的使用

    \n是换行符: 使用时需要放在字符串里面,成为字符串的一部分(不要嫌乱,这是我之前犯的错误). 示例: >>>print("I am Guido \n what's yon ...

  10. 把多个JavaScript函数绑定到onload事件处理函数上

    为了让函数只在页面加载完毕后才得到执行,我们会把函数绑定到onload事件上: window.onload = userFunction 但如果有两个函数:firstFunction() 和 seco ...