一、数值类型
标准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 |
create table ai(id int auto_increment not null, unique(id));
比如用默认的decimal来存放数据1.23, 则实际只会保留整数位1,小数位的.23被丢弃。
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 |
即,char列最后的空格在做操作时都已经被删除,而varchar依然保留空格。
create table t(en enum('hello','world'));
insert into t values('a,b'), ('c,d'), ('a, c, d'); #一次插入多个记录
二、算术运算符
在mysql命令行下,通过select expression 来得到表达式的值。
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 |
select user_id, case when salary<=2000 then 'low' else 'high' end from t;
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值,常用来对应用中的数据进行加密。