一、数值类型

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. JAVA基础知识之JVM-——自定义类加载器

    JVM中除了根加载器之外其他加载器都是ClassLoader的子类实例, 可以通过扩展ClassLoader的子类,通过重写方法来实现自定义的类加载器. ClassLoader中有两个关键的方法如下, ...

  2. 用C#钩子写一个改键外挂

    我的微信群——软件开发测试工程师交流群,欢迎扫码: 改键是一种习惯,比如在玩儿lol或者dota的时候.理论上玩儿什么游戏都可以改键. 做一个窗体(点击Install——应用改键,点击Uninstal ...

  3. Android mvp模式、mvvm模式

    MVC和MVP的区别2007年08月08日 星期三 上午 09:23 MVC和MVP到底有什么区别呢? 从这幅图可以看到,我们可以看到在MVC里,View是可以直接访问Model的!从而,View里会 ...

  4. linq的简单查询 和 组合查询

    以Car表和Brand表为例,其中Car表的Brand是Brand表的Brandcode. (1)建立两表的linq(一定要做好主外键关系,),创建之后不用修改,如要添加,另建文件. (2)Car表的 ...

  5. WinFormd多窗体 菜单和工具栏:

    一.多窗体 1.哪个是主窗体 主窗体就是如果关掉这个窗体,程序就会退出的那个窗体1问题:主窗体隐藏了,关闭其它窗体后,没有将主窗体显示/关闭,那么程序就关不上了 办法:构造函数传值,将窗体传到另一个窗 ...

  6. 转 Android学习笔记: 学习过程中碰到的一些问题及解决方法

    在学习Android开发的过程中遇到了不少的问题,所幸的是最终经过上网查询都得到了解决.现在将我在学习Android开发过程中遇到的一些问题及解决的方法整理如下. 1.R.java不能实时更新 问题描 ...

  7. C#中调用存储过程:带输入输出参数

    using (SqlConnection conn = new SqlConnection(this.GetConnectionString(this.WMPDBName))) { SqlComman ...

  8. 批量清除.svn 或 _svn

    Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN]@=&q ...

  9. 【Thread】多线程的异常处理?

    线程中处理异常是个头疼的问题,在异步的代码中,如何将异常捕获. 捕获异常后,将异常反馈给开发者,或用户.一般来说,反馈给开发者,多数方式在是日志中打印异常日志:而反馈给用户,多数是在界面上友好提示(比 ...

  10. C++ UTF8 UrlEncode(宽字符)(转载)

    转载:http://www.cnblogs.com/newcj/p/3645749.html #include "UrlEncode.h" #include <string& ...