MySQL

基础常用命令

  • mysql -u root -p 连接数据库
  • /opt/lampp/bin/mysql -u root -p
  • show databases; 查看当前系统存在的数据库,我们可以看到有默认的4个数据库,分别为 information_schema 、 mysql 、performance_schema 以及 test
  • create database db_name; 创建数据库
  • show tables
  • select round(1.14);
  • select md5(“hello”);
  • describe tb_dept1;
  • show create database db_name \G 查看创建数据库属性
  • drop database db_name; 删除数据库
  • show engines \G 查看系统支持的引擎

实例 创建数据表

  • create database book;
  • show create database book \G 查看数据库定义
  • use book; 进入book数据库

创建数据表tb_emp1的SQL语句为:(直接复制进去执行)

create table tb_emp1( id int(11), name varchar(25), ddeptId int(11), salary float );
  • show tables; 查看数据表

定义数据表tb_emp2,其主键为id

create table tb_emp2( id int(11)primary key, name varchar(25), deptId int(11), salary float );

定义数据表tb_emp3,其主键为id

create table tb_emp3 ( id int(11), name varchar(25), deptId int(11), salary float, primary key(id) );

定义数据表 tb_emp4,假设表中间没有主键 id,为了唯一确定一个员工,可以把 name 和 deptId 联合起来作为主键

create table tb_emp4 ( name varchar(25), deptId int(11), salary float, primary key(name, deptId) );

定义表 tb_emp5,并在表上创建外键约束

  • 先创建一个部门表 tb_dept1
create table tb_dept1 ( id int(11) primary key, name varchar(22) not null, location varchar(50) );
  • 然后定义数据表 tb_emp5,让它的键 deptId 作为外键关联到 tb_dept1 的主键 id
create table tb_emp5 ( id int(11) primary key, name varchar(25), deptId int(11), salary float, constraint fk_emp_dept1 foreign key(deptId) references tb_dept1(id) );

定义数据表 tb_emp6,指定员工的名称不能为空,非空约束

create table tb_emp6 ( id int(11) primary key, name varchar(25) not null, deptId int(11), salary float );

定义数据表 tb_dept2,指定部门的名称唯一

create table tb_dept2 ( id int(11) primary key, name varchar(22) unique, location varchar(50) );

定义数据表 tb_dept3,指定部门的名称唯一

create table tb_dept3 ( id int(11) primary key, name varchar(22), location varchar(50), constraint sth unique(name) );

定义数据表 tb_emp7,指定员工的部门编号默认为 1111

create table tb_emp7 ( id int(11) primary key, name varchar(25) not null, deptId int(11) default 1111, salary float );

定义数据表 tb_emp8,指定员工的编号自动递增。

create table tb_emp8 ( id int(11) primary key auto_increment, name varchar(25) not null, deptId int(11), salary float );

分别使用 describe 和 desc 查看表 tb_dept1 和表 tb_emp1 的表结构

  • 查看 tb_dept1 表结构的 SQL 语句为:describe tb_dept1;
  • 查看 tb_emp1 表结构的 SQL 语句为:desc tb_emp1;

使用 show create table 查看表 tb_emp1 的详细信息

  • show create table tb_emp1

实例 修改数据表

将数据表 tb_dept3 改名为 tb_deptment3

  • alter table tb_dept3 rename tb_deptment3;

将数据表 tb_dept1 中 name 字段的数据类型由 varchar(22)修改成 varchar(30)

  • alter table tb_dept1 modify name varchar(30);

将数据表 tb_dept1 中的 location 字段名称改为 loc,数据类型保持不变

  • alter table tb_dept1 change location loc varchar(50);

将数据表 tb_dept1 中的 loc 字段名称改为 location,同时将数据类型变为 varchar(60)

  • alter table tb_dept1 change loc location varchar(60);

在数据表 tb_dept1 中添加一个没有完整性约束的 int 类型的字段 managerId(部门经理编号)

  • alter table tb_dept1 add managerId int(10);

在数据表 tb_dept1 中添加一个不能为空的 varchar(12)类型的字段 column1。

  • alter table tb_dept1 add column1 varchar(12) not null;

在数据表 tb_dept1 中添加一个 int 类型的字段 column2。

  • alter table tb_dept1 add column2 int(11) first;

在数据表 tb_dept1 中 name 列后添加一个 int 类型的字段 column3。

  • alter table tb_dept1 add column3 int(11) after name;

删除数据表 tb_dept1 表中的 column2 字段。

  • alter table tb_dept1 drop column2;

将数据表 tb_dept1 中的 column1 字段修改为表的第一个字段。

  • alter table tb_dept1 modify column1 varchar(12) first;

将数据表 tb_dept1 中的 column1 字段插入到 location 字段后面。

  • alter table tb_dept1 modify column1 varchar(12) after location;

将数据表 tb_deptment3 的存储引擎修改为 MyISAM。

  • alter table tb_deptment3 engine=MyISAM;

删除数据表 tb_emp9 中的外键约束

  • 首先创建表 tb_emp9,创建外键 deptId 关联 tb_dept1 表的主键 id
create table tb_emp9 ( id int(11) primary key, name varchar(25), deptId int(11), salary float, constraint fk_emp_dept foreign key(deptId) references tb_dept1(id) );
  • 而删除外键的 SQL 语句为:
  • alter table tb_emp9 drop foreign key fk_emp_dept;

删除数据表 tb_dept2

  • drop table if exists tb_dept2

删除被其他表关联的主表

  • 数据表之间存在外键关联的情况下,如果直接删除父表,结果会显示失败。原因是直接删除,将破坏表的参照完整性。如果必须要删除,可以先删除与它关联的子表,再删除父表,只是这样同时删除了两个表中的数据。但有的情况下可能需要保留子表,这时如要单独删除父表,只需将关联的表的外键约束条件取消,然后就可以删除父表
  • 在数据库中创建两个关联表,首先,创建表 tb_dept2
create table tb_dept2 ( id int(11) primary key, name varchar(22), location varchar(50) );
  • 接下来创建表 tb_emp
create table tb_emp ( id int(11) primary key, name varchar(25), deptId int(11), salary float, constraint fk_emp_dept foreign key(deptId) references tb_dept2(id) );
  • 删除被数据表 tb_emp 关联的数据表 tb_dept2
  • 首先直接删除父表 tb_dept2,若直接使用 SQL 语句:
  • drop table tb_dept2; 会返回错误的提示信息:
  • ERROR 1217 ( 23000): Cannot delete or update a parent row:a foreign key constraint fails。
  • 接下来,解除关联子表 tb_emp 的外键约束,SQL 语句为:
  • alter table tb_emp drop foreign key fk_emp_dept;
  • 最后再用 SQL 语句:
  • drop table tb_dept2; 此时就可以成功执行了。

数据类型和运算符

  • 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 等。

整数类型

类型名称    说明          存储需求
Tinyint   很小的整数     1 个字节
Smallint   小的整型      2 个字节
Mediumint 中等大小的整数  3 个字节
Int       普通大小的整数  4 个字节
Bigint     大整数        8 个字节
  • id 字段的数据类型为 int(11),注意到后面的数字 11,这表示的是该数据类型指定的显示宽度,指定能够显示的数值中数字的个数。
  • 注意:显示宽度和数据类型的取值范围是无关的。显示宽度只是指明 MySQL 最大可能显示的数字个数,数值的位数小于指定的宽度时会由空格填充;如果插入了大于显示宽度的值, 只要该值不超过该类型整数的取值范围,数值依然可以插入,而且能够显示出来。其他整型数据类型也可以在定义表结构时指定所需要的显示宽度,如果不指定,则系统为每一种类型指定默认的宽度值。

浮点数类型和定点数类型

数据类型    说明    存储需求
Float 单精度浮点数 4 个字节
Double 双精度浮点数 8 个字节
Decimal(M,D),dec 压缩的“严格”定点数 M+2 个字节
  • Decimal 类型不同于 float 和 double,decimal 实际是以串存放的,decimal 可能的最大取值范围与 double 一样,但是其有效的取值范围由 M 和 D 的值决定。如果改变 M 而固定 D,则其取值范围将随着 M 的变大而变大。Decimal 的存储空间并不是固定的,而由其精度值 M 决定,占用 M+2 个字节。
  • 注意:无论是定点还是浮点类型,如果用户指定的精度超出精度范围,则会四舍五入进行处理。

日期与时间类型

类型名称         日期格式      存储需求
Year             YYYY         1 字节
Time            HH:MM:SS      3 字节
Date           YYYY-MM-DD     3 字节
Datetime  YYYY-MM-DD HH:MM:SS 8 字节
Timestamp YYYY-MM-DD HH:MM:SS 4 字节
  • (1) year 类型是一个单字节类型用于表示年:以 4 位字符串或者 4 位数字格式表示的 year,范围为 1901~2155,输入格式为’YYYY’或者 YYYY;以 2 位字符串格式表示的 year,范围为’00’~’99’。’00’到’69’和’70’到’99’范围的值分别被转换为 2000~2069和 1970~1999 范围的 year 值;以 2 位数字表示的 year,范围为 1~99。1-69 和 70~99 范围的值分别被转换为 2001~2069 和 1970~1999 范围的 year 值。
  • (2) time 类型用在只需要时间信息的值,在存储时需要 3 个字节。格式为 HH:MM:SS。HH表示小时,MM 表示分钟,SS 表示秒。Time 类型的取值范围为-838:59:59~838:59:59,小时部分会如此大的原因是 time 类型不仅可以用于表示一天的时间,还可能是某个事件过去的时间或两个事件之间的时间间隔。可以使用各种格式指定 time 值:D HH:MM:SS 格式的字符串以及 HHMMSS 格式的、没有间隔符的字符串或者 HHMMSS 格式的数值,假定都是有意义的时间,否则的话存储的时候将变为 00:00:00。
  • (3) date 类型用在仅需要日期时,没有时间部分,在存储时需要 3 个字节。如期格式为YYYY-MM-DD,其中 YYYY 表示年,MM 表示月,DD 表示日。在给 date 类型的字段赋值时,可以使用字符串或者数字类型的数据插入,只要符合 date 的日期格式即可:以‘YYYY-MM-DD’或者‘YYYYMMDD’字符串格式表示的日期,取值范围为‘1000-01-01’~‘9999-12-31’;以‘YY-MM-DD’或者‘YYMMDD’字符串格式表示的日期,其中‘00~69’范围的年值转换为‘2000~2069’,‘70~99’范围的年值转换为‘1970~1999’;以 YY-MM-DD 或者 YYMMDD数字格式表示的日期,‘00~69’范围的年值转换为‘2000~2069’,‘70~99’范围的年值转换为‘1970~1999’;使用 current_date 或者 now()插入当前系统日期。
  • (4) datetime 类型用于在需要同时包含日期和时间信息的值,在存储时需要 8 个字节。日期格式为‘YYYY-MM-DD HH:MM:SS’,其中 YYYY 表示年,MM 表示月,DD 表示日,HH 表示小时,MM 表示分钟,SS 表示秒。在给 datetime 类型的字段赋值时,可以使用字符串类型或者数字类型的数据插入。只要符合 datetime 的日期格式即可:以‘YYYY-MM-DD HH:MM:SS’或者‘YYYYMMDDHHMMSS’字符串格式表示的值,取值范围为‘1000-01-01 00:00:00’~‘9999-12-31 23:59:59’;以‘YY-MM-DD HH:MM:SS’或者‘YYMMDDHHMMSS’字符串格式表示的日期,在这里 YY 表示两位的年值。与前面相同,‘00~69’范围的年值转换为‘2000~2069’,‘70~99’范围的年值转换为‘1970~1999’;以 YYYYMMDDHHMMSS 或者YYMMDDHHMMSS 数字格式表示的日期和时间。
  • (5) timestamp 的显示格式与 datetime 相同,显示宽度固定在 19 个字符,日期格式为YYYY-MM-DD HH:MM:SS,在存储时需要 4 个字节。但是 timestamp 列的取值范围小于 datetime的取值范围,为‘1970-01-01 00:00:01’UTC~‘2038-01-19 03:14:07’UTC,其中UTC(Corordinated Universal Time,世界标准时间),因此在出入数据时,要保证在合法的取值范围内。

字符串类型

  • 字符串类型用来存储字符串数据,除了可以存储字符串数据之外,还可以存储其他数据,比如图片和声音的二进制数据。字符串可以进行区分或者不区分大小写的串比较,另外,还可以进行模式匹配查找
典型类型                说明                              存储需求
Char(M)         固定长度非二进制字符串                     M 字节,1<=M<=255
Varchar(M)      变长非二进制字符串                       L+1 字节,L<=M,1<=M<=255
Tinytext        非常小的非二进制字符串                     L+1 字节,在此 L<2^8
Text            小的非二进制字符串                        L+2 字节,在此 L<2^16
Mediumtext      中等大小的非二进制字符串                    L+3 字节,在此 L<2^24
Longtext        大的非二进制字符串                        L+4 字节,在此 L<2^32
Enum            枚举类型,只能有一个枚举字符串值             12 个字节,取决于枚举值的数目(最大值 65535)
Set             一个设置,字符串对象可能有零个或多个set成员   1,2,3,48 个字节,取决与集合成员的数量(最多64 个成员)
  • (1)char 和 varchar 类型: Char(M)为固定长度字符串,在定义时指定字符串列长。当保存时在右侧填充空格以达到指定的长度。M 表示列长度,M 的范围是 0~255 个字符。当检索到 char 值时,尾部的空格将被删除掉。Varchar(M)是长度可变的字符串。M 表示最大列长度。M 的范围是 0~65535。Varchar的最大实际长度由最长的行的大小是使用的字符集确定,而其实际占用的空间为字符串的实际长度加 1。Varchar 在值保存和检索时尾部的空格仍保留。
  • (2)text 类型: Text 列保存非二进制字符串,如文章内容、评论等。当保存或查询 text 列的值时,不删除尾部空格。
  • (3)enum 类型: Enum 类型是一个字符串对象,其值为表创建时在列规定中枚举的一列值。语法格式如下:
  • 字段名 enum(‘值 1’,’值 2’,„’值 n’)
  • 字段名指将要定义的字段,值 n 指枚举列表中的第 n 个值。 Enum 类型的字段在取值时,只能在指定的枚举列表中取,而且一次只能取一个。如果创建的成员中有空格时,其尾部的空格将自动被删除。Enum 值在内部用整数表示,每个枚举值均有一个索引值;列表值所允许的成员值从 1 开始编号,MySQL 存储的就是这个索引编号。Enum 值按照列索引顺序排列,并且空字符串排在非空字符串前,NULL 值排在其他所有的枚举值前。
  • (4)set 类型: Set 是一个字符串对象,可以有零个或多个值,set 列最多可以有 64 个成员,其值为表创建时规定的一列值。指定包括多个 set 成员的 set 列值时,各成员之间用逗号间隔。语法格式如下:
  • Set(‘值 1’,’值 2’,„’值 n’)
  • 与 enum 类型相同,set 值在内部用整数表示,列表中每一个值都有一个索引编号。当创建表时,set 成员值的尾部空格将自动被删除。但与 enum 类型不同的是,enum 类型的字段只能从定义的列值中选择一个值插入,而 set 类型的列可以从定义的列值中选择多个字符的联合。
  • 如果插入 set 字段中的列值有重复,则 MySQL 会自动删除重复的值;插入 set 字段的值的顺序并不重要, MySQL 会在存入数据库时,按照定义的顺序显示;如果插入了不正确的值,默认情况下,MySQL 将忽视这些值,并给出警告。

二进制类型

类型名称 说明 存储需求 Bit(M) 位字段类型 大约(M+7)/8 个字节 Binary(M) 固定长度二进制字符串 M 个字节 Varbinary(M) 可变长度二进制字符串 M+1 个字节 Tinyblob(M) 非常小的 blob L+1 字节,在此 L<2^8 Blob 小 blob L+2 字节,在此 L<2^16 Mediumblob 中等大小的 blob L+3 字节,在此 L<2^24 Longblob 非常大的 blob L+4 字节,在此 L<2^32

比较运算符

运算符           作用
=               等于
<=>             安全的等于
<>(!=)          不等于
<=              小于等于
>=              大于等于
>               大于
Is null         判断一个值是否为 null
Is not null     判断一个值是否不为 null
Least           在有两个或多个参数时,返回最小值
Greatest        在有两个或多个参数时,返回最大值
Between and     判断一个值是否落在两个值之间
Isnullis null 作用相同
In              判断一个值是 in 列表的任意一个值
Not in          判断一个值不是 in 列表的任意一个值
Like            通配符匹配
Regexp          正则表达式匹配

位运算符

运算符             作用
| 位或
&               位与
^               位异或
<<              位左移
>>              位右移
~               位取反,反转所有比特

实例测试

  • mysql -u root -p
  • use test
  • select (9-7)*4,8+15/3,17/2,39%12;
  • select 36>27,15>=8,40<50,15<=15,null<=>null,null<=>1,5<=>5;
  • select 4&&8,!2,0 xor 1,null xor 0,-2 || null;
  • select 13&17,20|8,14^20,~16;
  • 会显示上边的式子和计算结果

MySQL 函数

数学函数

绝对值函数 abs()和返回圆周率的函数 pi()
平方根函数 sqrt(x)和求余函数 mod(x,y)
获取整数的函数 ceil(x)、ceiling(x)和 floor(x)
  • ceil(x)和 ceiling(x)意义相同, 返回不小于 x 的最小整数值, 返回值转化为一个 bigint。
  • floor(x)返回不大于 x 的最大整数值,返回值转化为一个 bigint。
获取随机数的函数 rand()和 rand(x)
  • rand()每次产生一个 0 到 1 之间的随机浮点数。
  • rand(x)返回一个随机浮点值 v,范围在 0 到 1 之间。若已经指定一个整数参数 x,则它被用作种子值,用来产生重复序列。
四舍五入函数 round(x)、round(x,y)和 truncate(x,y)
  • round(x)返回最接近于参数 x 的整数,对 x 值进行四舍五入。
  • round(x,y)返回最接近于参数 x 的数,其值保留到小数点后面 y 位,若 y 为负值,则将保留值到小数点左边 y 位。
  • truncate(x,y)返回被舍去至小数点后 y 位的数字。若 y 的值为 0,则结果不带有小数点或不带有小数部分。若 y 设为负数,则截去 x 小数点左起第 y 位后面所有低位的值。
符号函数 sign(x)
  • sign(x)返回参数的符号,x 的值为负、零或正时返回结果依次为-1、0、1
幂运算函数 pow(x,y)、power(x,y)和 exp(x)
  • pow(x,y)或者 power(x,y)函数返回 x 的 y 次乘方的结果值。
  • exp(x)返回 e 的 x 乘方后的值
对数运算函数 log(x)和 log10(x)
  • pow(x,y)或者 power(x,y)函数返回 x 的 y 次乘方的结果值。
  • exp(x)返回 e 的 x 乘方后的值
角度与弧度相互转换的函数 radians(x)和 degrees(x)
  • radians(x)将参数 x 由角度转化为弧度。
  • degrees(x)将参数 x 由弧度转化为角度。
正弦函数 sin(x)和反正弦函数 asin(x)
  • sin(x)返回 x 正弦,其中 x 为弧度值。
  • asin(x)返回 x 的反正弦,即正弦为 x 的值。若 x 不在-1 到 1 的范围内,则返回 null。
余弦函数 cos(x)和反余弦函数 acos(x)
  • cos(x)返回 x 余弦,其中 x 为弧度值。
  • acos(x)返回 x 的反余弦,即余弦为 x 的值。若 x 不在-1 到 1 的范围内,则返回 null。
正切函数、反正切函数和余切函数
  • tan(x)返回 x 的正切,其中 x 为给定的弧度值。
  • atan(x)返回 x 的反正切,即正切为 x 的值。
  • cot(x)返回 x 的余切,其中 x 为给定的弧度值。

字符串函数

计算字符串字符数的函数和字符串长度的函数
  • char_length(str)返回值为字符串 str 所包含的字符个数。一个多字节字符算作一个单字符。
  • length(str)返回值为字符串的字节长度,使用 utf8 编码字符集时,一个汉字是 3 个字节,一个数字或字母算一个字节。
合并字符串函数 concat(s1,s2,…)、concat_ws(x,s1,s2,…)
  • concat(s1,s2,…)返回结果为连接参数产生的字符串,或许有一个或多个参数。如有任何一个参数为 null,则返回值为 null。如果所有参数均为非二进制字符串,则结果为非二进制字符串。如果自变量中含有任已二进制字符串则结果为一个二进制字符串。
  • concat_ws(x,s1,s2,…)是 concat()的特殊形式,第一个参数 x 是其他参数的分隔符,分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其他参数,如果分割符为 null,则结果为 null。函数会忽略任何分隔符参数后的 null 值
替换字符串的函数 insert(s1,x,len,s2)
  • insert(s1,x,len,s2)返回字符串 s1,其字符串起始于 x 位置和被字符串 s2 取代的 len 字符。如果 x 超过字符串长度,则返回值为原始字符串。假如 len 的长度大于其他字符串的长度,则从位置 x 开始替换。若任何一个参数为 null,值返回值为 null
字母大小写转换函数
  • lower(str)或者 lcase(str)可以将字符串 str 中的字母字符全部转换成小写字母。
  • upper(str)或者 ucase(str)可以将字符串 str 中的字母字符全部转换成大写字母。
获取指定长度的字符串的函数 left(s,n)和 right(s,n)
  • left(s,n)返回字符串 s 开始的最左边 n 个字符。
  • right(s,n)返回字符串 s 开始的最左边 n 个字符。
填充字符串函数 lpad(s1,len,s2)和 rpad(s1,len,s2)
  • lpad(s1,len,s2)返回字符串 s1,其左边由字符串 s2 填补到 len 字符长度。假如 s1 的长度大于 len,则返回值被缩短至 len 字符。
  • rpad(s1,len,s2)返回字符串 s1,其右边由字符串 s2 填补到 len 字符长度。假如 s1 的长度大于 len,则返回值被缩短至 len 字符。
删除空格的函数 ltrim(s)、rtrim(s)和 trim(s)
  • ltrim(s)返回字符串 s,字符串左侧空格字符被删除。
  • rtrim(s)返回字符串 s,字符串右侧空格字符被删除。
  • trim(s)字符串 s 两侧空格字符被删除。substring(s,n,len)带有 len 参数的格式,从字符串 s 返回一个长度同 len 字符相同的子字符串,起始于位置 n。也可能对 n 使用一个负值。假若这样,则子字符串的位置起始于字符串结尾的 n 字符,即倒数第 n 个字符,而不是字符串的开始位置。
  • mid(s,n,len)与 substring(s,n,len)的作用相同。
匹配子串开始位置的函数
  • locate(str1,str)、position(str1 in str)和 instr(str,str1)3 个函数作用相同,返回子字符串 str1 在字符串 str 中的开始位置。
字符串逆序的函数 reverse(s)
  • reverse(s)将字符串 s 反转,返回的字符串的顺序和 s 字符串顺序相反。
返回指定位置的字符串的函数
  • elt(N,字符串 1,字符串 2,字符串 3,…)若 N=1,则返回字符串 1,若 N=2,则返回字符串 2,依次类推。若 N 小于 1 或者大于参数的数目,则返回值为 null。
返回指定字符串位置的函数 field(s,s1,s2,…)
  • field(s,s1,s2,…)返回字符串 s 在列表 s1,s2,…中第一次出现的位置,在找不到 s 的情况下,返回值为 0。如果 s 为 null,则返回值为 0,原因是 null 不能同任何值进行同等比较。
返回子串位置的函数 find_in_set(s1,s2)
  • find_in_set(s1,s2)返回字符串 s1 在字符串列表 s2 中出现的位置,字符串列表是一个由多个逗号‘,’分开的字符串组成的列表。如果 s1 不在 s2 或者 s2 为空字符串,则返回值为 0。如果任意一个参数为 null,则返回值为 null。这个函数在第一个 iecanshu 包含一个逗号‘,’时将无法正常运行。
选取字符串的函数 make_set(x,s1,s2,…)
  • make_set(x,s1,s2,…)返回由 x 的二进制数指定的相应位的字符串组成的字符串,s1对应比特 1,s2 对应比特 01,依次类推。s1,s2,…中的 null 值不会被添加到结果中。
删除指定字符串的函数 trim(s1 from s)
  • trim(s1 from s)删除字符串 s 中两端所有的子字符串 s1。s1 为可选项,在未指定情况下,删除空格。
重复生成字符串的函数 repeat(s,n)
  • repeat(s,n)返回一个由重复的字符串 s 组成的字符串,字符串 s 的数目等于 n。若 n<=0, 则返回一个空字符串。若 s 或 n 为 null,则返回 null。
空格函数 space(n)和替换函数 replace(s,s1,s2)
  • space(n)返回一个由 n 个空格组成的字符串。
  • replace(s,s1,s2)使用字符串 s2 替代字符串 s 中所有的字符串 s1。
比较字符大小的函数 strcmp(s1,s2)
  • strcmp(s1,s2)若所有的字符串均相同,则返回 0;若根据当前分类次序,第一个参数小于第二个,则返回-1,其他情况返回 1。
获取子串的函数
  • substring(s,n,len)带有 len 参数的格式,从字符串 s 返回一个长度同 len 字符相同的子字符串,起始于位置 n。也可能对 n 使用一个负值。假若这样,则子字符串的位置起始于字符串结尾的 n 字符,即倒数第 n 个字符,而不是字符串的开始位置。
  • mid(s,n,len)与 substring(s,n,len)的作用相同。
匹配子串开始位置的函数
  • locate(str1,str)、position(str1 in str)和 instr(str,str1)3 个函数作用相同,返回子字符串 str1 在字符串 str 中的开始位置。
字符串逆序的函数 reverse(s)
  • reverse(s)将字符串 s 反转,返回的字符串的顺序和 s 字符串顺序相反。
返回指定位置的字符串的函数
  • elt(N,字符串 1,字符串 2,字符串 3,…)若 N=1,则返回字符串 1,若 N=2,则返回字符串 2,依次类推。若 N 小于 1 或者大于参数的数目,则返回值为 null。
返回指定字符串位置的函数 field(s,s1,s2,…)
  • field(s,s1,s2,…)返回字符串 s 在列表 s1,s2,…中第一次出现的位置,在找不到 s 的情况下,返回值为 0。如果 s 为 null,则返回值为 0,原因是 null 不能同任何值进行同等比较。
返回子串位置的函数 find_in_set(s1,s2)
  • find_in_set(s1,s2)返回字符串 s1 在字符串列表 s2 中出现的位置,字符串列表是一个由多个逗号‘,’分开的字符串组成的列表。如果 s1 不在 s2 或者 s2 为空字符串,则返回值为 0。如果任意一个参数为 null,则返回值为 null。这个函数在第一个 iecanshu 包含一个逗号‘,’时将无法正常运行。
选取字符串的函数 make_set(x,s1,s2,…)
  • make_set(x,s1,s2,…)返回由 x 的二进制数指定的相应位的字符串组成的字符串,s1 对应比特 1,s2 对应比特 01,依次类推。s1,s2,…中的 null 值不会被添加到结果中。

日期和时间函数

  • 日期和时间函数主要用来处理日期和时间值,一般的日期函数除了使用 date 类型的参数外,也可以使用 datetime 或者 timestamp 类型的参数,但会忽略这些值的时间部分。相同的,以 time 类型值为参数的函数,可以接受 timestamp 类型的参数,但会忽略日期部分。
获取当前日期的函数和获取当前时间的函数
  • curdate()和 current_date()函数作用相同,将当前日期按照‘YYYY-MM-DD’或者
  • YYYYMMDD 格式的值返回,具体格式根据函数在字符串或是数字语境中而定。
获取当前日期和时间的函数
  • current_timestamp()、localtime()、now()和 sysdate()4 个函数的作用相同,均返回当前日期和时间值,格式为‘YYYY-MM-DD HH:MM:SS’或 YYYYMMDDHHMMSS,具体格式根据函数在字符串或是数字语境中而定。
UNIX 时间戳函数
  • UNIX_TIMESTAMP(date)若无参数调用,则返回一个 Unix 时间戳(‘1970-01-01 00: 00: 00’GMT 之后的秒数)作为无符号整数。其中,GMT(Green wich mean time,为格林威治标准时间)。
  • 若用 date 来调用 unix_timestamp(),它会将参数值以‘1970-01-01 00:00:00’GMT 后的秒数的形式返回。 Date 可以是一个 date 字符串、 datetime 字符串、 timestamp或一个当地时间的 YYMMDD 或 YYYYMMDD 格式的数字。
返回 UTC 日期的函数和返回 UTC 时间的函数
  • UTC_DATE()函数返回当前 UTC(世界标准时间)日期值,其格式为‘YYYY-MM-DD’或 YYYYMMDD,具体格式根据函数在字符串或是数字语境中而定。
获取月份的函数 month(date)和 monthname(date)
  • month(date)函数返回 date 对应的月份,范围从 1 到 12。
  • monthname(date)函数返回日期 date 对应月份的英文全名。
获取星期的函数
  • dayname(d)函数返回 d 对应的工作日的英文名称,例如 Sunday、Monday 等。
  • dayofweek(d)函数返回 d 对应的一周中的索引(位置)。1 表示周日, 2 表示周一,…, 7 表示周六。
  • weekday(d)返回 d 对应的工作日索引。0 表示周一,1 表示周二,…,6 表示周日。
获取星期数的函数
  • week(d)计算日期 d 是一年中的第几周。week()的双参数形式允许指定该星期是否起始于周日或周一,以及返回值的范围是否为从 0 到 53 或 1 到 53。
  • Weekofyear(d)计算某天位于一年中的第几周,范围是从 1 到 53。
获取天数的函数
  • dayofyear(d)函数返回 d 是一年中的第几天,范围是从 1 到 366。
  • dayofmonth(d)函数返回 d 是一个月中的第几天,范围是从 1 到 31。
获取年份、季度、小时、分钟和秒钟的函数
  • year(date)返回 date 对应的年份,范围是 1970 到 2069。
  • quarter(date)返回 date 对应的一年中的季度值,范围是从 1 到 4。
  • minute(time)返回 time 对应的分钟数。
  • second(time)返回 time 对应的秒数,范围是从 0 到 59。
获取日期的指定值的函数
  • extract(type from date)函数所使用的时间间隔类型说明符同 date_add()或
  • date_sub()的相同,但它从日期中提取一部分,而不是执行日期运算。
时间和秒钟转换的函数
  • time_to_sec(time)返回已转化为秒的 time 参数。转换公式为:小时*3600+分钟*60+秒。
  • sec_to_time(seconds)返回被转化为小时、分钟和秒数的 seconds 参数值,其格式为’HH:MM:SS’或者 HHMMSS,具体格式根据该函数是否用在字符串或数字语境中而定。
计算日期和时间的函数
  • 计算日期和时间的函数有: date_add()、 adddate()、
  • date_sub()、 subdate()、 addtime()、
  • subtime()和 date_diff()。
  • date_add(date,interval expr type)和 date_sub(date,interval expr type),其中, date 是一个 datetime 或 date 值,用来指定起始时间,expr 是一个表达式,用来指定从起始日期添加或减去的时间间隔。expr 是一个字符串:对于负值的时间间隔,它可以以一个 负号‘-’开头。type 为关键字,它指示了表达式被解释的方式。若 date 参数是一个 date 值,计算只会包括 year、month 和 day 部分(即没有时间部分),其结果是一个 date 值。否则,结果将是一个 datetime 值。
  • date_add(date,interval expr type)或者 adddate(date,interval expr type),两个函数作用相同,执行日期的加运算。
  • date_sub(date,interval expr type)或者 subdate(date,interval expr type)两个函数作用相同,执行日期的减运算。
  • addtime(date,expr)函数将 expr 值添加到 date,并返回修改后的值, date 是一个日期或者日期时间的表达式,而 expr 是一个时间表达式。
  • subtime(date,expr)函数中 date 减去 expr 值,并返回修改后的值,date 是一个日期或者日期时间表达式,而 expr 是一个时间表达式。
  • datediff(date1,date2)返回起始时间 date1 和结束时间 date2 之间的天数。date1 和
  • date2 为日期或 date-and-time 表达式。计算中只用到这些值的日期部分。
将日期和时间格式化的函数
  • date_format(date,format)根据 format 指定的格式显示 date 值。
  • time_format(time,format)根据 format 字符串安排 time 值的格式。Format 字符串可能仅会处理包含小时、分钟和秒的格式说明符,其他说明符产生一个 null 值或 0。
  • get_format(val_type,format_type)返回日期时间字符串的显示格式,val_type 表示日期数据类型,包括 date、 datetime 和 time;
  • format_type 表示格式化显示类型,包括 EUR、INTERCAL、ISO、JIS、USA。

条件判断函数

  • 条件判断函数也称为控制流程函数,根据满足的条件的不同,执行相应的流程。MySQL中进行条件判断的函数有 IF、IFNULL 和 CASE。
IF(expr,v1,v2)函数
  • IF(expr,v1,v2)如果表达式 expr 是 true(expr<>0 and expr<>null),则 IF()的返回值为 v1;否则返回值为 v2。IF()的返回值为数字值或字符串值,具体情况视其所在语境而定。
IFNULL(v1,v2)
  • IFNULL(v1,v2)假如 v1 不为 null,则 IFNULL()的返回值为 v1;否则其返回值为 v2。
  • IFNULL()的返回值是数字或是字符串,具体情况视其所在语境而定。
CASE 函数
  • CASE expr WHEN v1 THEN r1 [WHEN v2 THEN r2] [ELSE rn] END该函数表示,如果 expr 值等于某个 vn,则返回对应位置 THEN 后面的结果。如果与所有值都不想等,则返回 ELSE 后面的 rn。

系统信息函数

获取 MySQL 版本号、连接数和数据库名的函数
  • version()返回指示 MySQL 服务器版本的字符串。这个字符串使用 utf8 字符集。
  • connection_id()返回 MySQL 服务器当前连接的次数,每个连接都有各自唯一的 ID。
  • database()、schema()函数返回使用 utf8 字符集的默认数据库名。
获取用户名的函数
  • user()、current_user、current_user()、system_user()和 session_user()这几个函数返回当前被 MySQL 服务器验证的用户名和主机名组合。这个值符合确定当前登录用户存取权限的 MySQL 账户。一般情况下,这几个函数的返回值是相同的。
获取字符串的字符集和排序方式的函数
  • charset(str)返回字符串 str 自变量的字符集。
  • collation(str)返回字符串 str 的排列方式。
获取最后一个自动生成的 ID 值的函数
  • last_insert_id()自动返回一个 insert 或 update 为 auto_increment 列设置的第一个放生的值。

加密函数

  • 加密函数主要用来对数据进行加密和界面处理,以保证某些重要数据不被别人获取。这些函数在保证数据库安全时非常有用。
加密函数 password(str)
  • password(str)从原明文密码 str 计算并返回加密后的密码字符串,当参数为 null 时,返回 null。
加密函数 md5(str)
  • md5(str)为字符串算出一个 md5 128 比特校验和。该值以 32 位十六进制数字的二进制字符串形式返回,若参数为 null,则会返回 null。
加密函数 encode(str,pswd_str)
  • encode(str,pswd_str)使用 pwsd_str 作为密码,加密 str。使用 decode()解密结果,结果是一个和 str 长度相同的二进制字符串。
解密函数 decode(crypt_str,pswd_str)
  • decode(crypt_str,pswd_str)使用 pswd_str 作为密码,解密加密字符串 crypt_str,
  • crypt_str 是由 encode()返回的字符串。

其他函数

格式化函数 format(x,n)
  • format(x,n)将数字 x 格式化,并以四舍五入的方式保留小数点后 n 位,结果以字符串的形式返回。若 n 为 0,则返回结果函数不含小数部分。
不同进制的数字进行转换的函数
  • conv(N,from_base,to_base)函数进行不同进制间的转换。返回值为数值 N 的字符串表示,由 from_base 进制转化为 to_base 进制。如有任意一个参数为 null,则返回值为 null。自变量 N 被理解为一个整数,但是可以被指定为一个整数或字符串。最小基数为 2,而最大基数则为 36。
IP 地址与数字相互转换的函数
  • inet_aton(expr)函数将数字字符串网络地址转换为数值网络地址。
  • inet_ntoa(expr)给定一个数字网络地址(4 或 8 比特),返回作为字符串的该地址的点地址表示。
加锁函数和解锁函数
  • get_lock(str,timeout)设法使用字符串 str 给定的名字得到一个锁,超时为 timeout秒。若成功得到锁,则返回 1;若操作超时,则返回 0;若发生错误,则返回 null。
  • release_lock(str)解开被 get_lock()获取的, 用字符串 str 所命名的锁。若锁被解开, 则返回 1;若该线程尚未创建锁,则返回 0;若命名的锁不存在,则返回 null。若该锁从未被 get_lock()调用获取,或已经被提前解开,则该锁不存在。
  • is_free_lock(str)检查名为 str 的锁是否可以使用。若锁可以使用,则返回 1,若这个锁正在被使用,则返回 0;出现错误,则返回 null。
  • Iis_used_lock(str)检查名为 str 的锁是否正在被使用。若被封锁,则返回使用该锁的客户端的连接标识符;否则,返回 null。
重复执行指定操作的函数
  • benchmark(count,expr)函数重复 count 次执行表达式 expr。它可以用于计算 MySQL 处理表达式的速度。结果值通常为 0(0 只是表示处理过程很快,并不是没有花费时间)。另一个作用是它可以在 MySQL 客户端内部报告语句执行的时间。
改变字符集的函数
  • convert(… using …)带有 using 的 convert()函数被用来在不同的字符集之间转化数据。
改变数据类型的函数
  • cast(x,as type)和 convert(x,type)函数将一个类型的值转换为另一个类型的值,可转换的 type 有:binary、char、date、datetime、decimal、signed、unsigned。

你可能感兴趣的:(MySQL)