函数
字符串函数
- CONCAT(S1,S2,S3,…,Sn); 字符串拼接,将S1,S2,S3,…,Sn字符串拼接起来
select concat('Hello', 'Mysql');
- LOWER(str); 将字符串str全部转换成小写
select lower('Hello');
- UPPER(str); 将字符串str全部转换成大写
select lower('Hello');
- LPAD(str); 左填充,用字符串pad对str的左边进行填充,达到n个字符串长度
select lpad('01', 5 ,'-');
- RPAD(str); 右填充,用字符串pad对str的右边进行填充,达到n个字符串长度
select rpad('01', 5, '-');
- TRIM(str); 去掉字符串头部和尾部的空格
select trim(' Hel lo ');
- SUBSTRING(str,start,len); 返回从字符串str从start位置起的len个长度的字符串
select substring('Hello', 1, 3);
数值函数
- CEIL(x); 向上取整
select ceil(1.5);
select ceil(1.1);
- FLOOR(x); 向下取整
select floor(1.9);
select floor(1.1);
- MOD(x,y); 返回x/y的模,取余
select mod(1,3);
select mod(0,3);
select mod(1,0);
- RAND(); 返回0~1内的随机数
select rand();
- ROUND(x,y); 求参数x的四舍五入的值,保留y位小数
select round(2.365, 2);
select round(2.364, 2);
- 实例
select rpad(round(rand()*1000000,0), 6, '0');
日期函数
- CURDATE(); 返回当前日期
select curdate();
- CURTIME(); 返回当前时间
select curtime();
- NOW(); 返回当前日期和时间
select now();
- YEAR(date); 获取指定date的年份
select year(now());
- MONTH(date); 获取指定date的月份
select month(now());
- DAY(date); 获取指定date的日期
select day(now());
- DATE_ADD(date,INTERVAL expr type); 返回一个日期/时间值加上一个时间间隔expr后的时间值
select date_add(now(), INTERVAL 70 DAY);
- DATEDIFF(date1, date2); 返回起始时间date1和结束时间date2之间的天数, date1-date2
select datediff('2023-07-01', '2023-08-01');
select datediff('2023-08-01', '2023-07-01');
流程函数
- IF(value, t, f) 如果value为true,则返回t, 否则返回f
select if(1=1, 'ok', 'error');
- IFNULL(value1, value2) 如果value1不为空,返回value1,否则返回value2
select ifnull(null, 2);
select ifnull('', 2);
- CASE WHEN [val1] THEN [res1] …ELSE [default] END 如果val1为true,返回res1,…否则返回default默认值
select name,
(case
when math>=85 then '优秀'
when math >= 60 then '及格'
else '不及格' end) as '数学';
from score;
- CASE [expr] WHEN [val1] THEN [res1] …ELSE [default] END 如果expr的值等于val1,返回res1, …否则返回default默认值
select name,
(case workaddress
when '北京' then '一线城市'
when '上海' then '一线城市'
else '二线城市' end) as '工作地址';
from temp;
约束
非空约束
create table 表名{
字段名 数据类型 NOT NULL COMMENT '',
......
};
ALTER TABLE 表名 ADD COLUMN 字段名 数据类型 NOT NULL COMMENT '';
唯一约束
create table 表名{
字段名 数据类型 UNIQUE COMMENT '',
......
};
ALTER TABLE 表名 ADD COLUMN 字段名 数据类型 UNIQUE COMMENT '';
主键约束
create table 表名{
字段名 数据类型 NOT NULL AUTO_INCREMENT COMMENT '',
......,
PRIMARY KEY(字段名)
};
ALTER TABLE 表名 ADD PRIMARY KEY(字段名);
默认约束
create table 表名{
字段名 数据类型 DEFAULT NULL COMMENT '',
......
};
ALTER TABLE 表名 ADD COLUMN 字段名 数据类型 DEFAULT NULL COMMENT '';
检查约束
create table 表名{
字段名 数据类型 CHECK(字段名满足条件) COMMENT '',
......
};
外键约束
- 概念:让两张表的数据之间建立连接,从而保证数据的一致性和完整性
- 添加外键
create table 表名{
字段名 数据类型,
......
[CONSTRAINT] [外键名称] FOREIGN KEY(外键字段名) REFERENCES 主表(主表字段名)
};
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表(主表字段名);
- 删除外键
ALTER TABLE 表名 DROP FOREIGN KEY(外键名称);
- 删除/更新行为
行为 | 说明 |
---|
NO ACTION | 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新,(与RESTRICT一致) |
RESTRICT | 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新,(与NO ACTION一致) |
CASCADE | 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则也删除/更新外键在子表中的记录 |
SET NULL | 当在父表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(这就要求该外键允许取null) |
NO ACTION | 父表有变更时,子表将外键列设置成一个默认的值(innodb不支持) |
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表名(主表字段名) ON UPDATE CASCADE ON DELETE CASCADE;