一,函数
1.1 用法
函数最常用的地方就是查询语句
select 函数(字段) from 表名;
select 字段列表 from 表名 group by 分组字段 having 函数(字段);
1.2 字符串函数
1.2.1 Concat
Concat(s1,s2,....,sn);
用途:将多个字符串拼接成一个
1.2.2 Lower和Upper
Lower(x)
Upper(x)
用途:Lower 将 x 字符串全部转化为小写,Upper 将字符串全部转化为大写
1.2.3 Lpad和Rpad
Lpad(str,n,pad)
Rpad(str,n,pad)
用途:Lpad 是左填充,Rpad 是右填充,将 str 字符串左 / 右边填充 pad 字符串知道他们之和为 n,原本字符串+填充字符串=n时停止
1.2.4 Trim
trim(x)
用途:将字符串 x 的首尾处空格去掉
1.2.5 Substring
substring(str,star_index,len)
用途:从 star_index 处截取字符串 str,截取 len 个字符 (下标从 1 开始)
1.3 日期函数
1.3.1 获取当前时间
Curdate() ->返回日期,年-月-日
Curtime() ->返回日期,时-分-秒
Now() ->返回日期,年-月-日-时-分-秒
1.3.2 截取当前时间其中一部分
Year(date) ->返回date日期中的年
Month(date) ->返回date日期中的月
day(date) ->返回date日期中的日
1.3.3修改时间的
Date_add(date,interval 数值 值类型)
用法:
select date_add(now(),interval 70 hour);在当前日期之后增加70小数后是什么时候
数值类型有:year,month,day,hour,minute,second
Datediff(day1,day2) ->返回day2与day1之间相差多久
1.4 数值函数
1.4.1 对值取整
ceil(x) ->对x向上取整
floor(x) ->对x向下取整
1.4.2 其他
mod(x,y) ->返回x处于y的余数
rand() ->返回0到1之间的小数(精度很长!比如说0.5151915616)
round(x,y) ->求x四舍五入之后的值,保留y位小数
1.5 流程控制函数
1.5.1 if判断
if(value,t,f) -->如果value的逻辑值是true就返回t值,如果为false就返回f值
1.5.2 ifnull判断
ifnull(value_1,value_2) 如果value_1不为null就返回value_1要不然就返回value_2
value 可以为表达式 / 值,等形式
1.5.3 case 表达式 when 值 形式的判断
语法
case 表达式 when 值a then 返回值1 when 值b then 返回值2 .....else 抄底返回值 end;
解释:如果表达式 = 值 a,就返回值 1, 如果表达式 = 值 b,就返回值 2,如果都不等于就返回抄底返回值
这个就和编程语言中的 switch 大致一致!
1.5.4 case when 值形式的判断
语法
case when 条件表达式a then 返回值1 when 条件表达式b then 返回值2 else 抄底返回值 end;
解释:如果条件表达式 a 成立即为 true 就返回值 1,如果条件表达式 b 成立就返回值 2,都不成立就返回抄底返回值
这个就和编程语言中的 if 大致一致
二,约束条件
2.1 描述
约束就是限定表数据的规则
目的:保证数据库中的数据的正确性, 有效性, 完整性
用法:在建表 / 修表的时候添加约束条件,多个约束用空格分割。
作用:约束是作用于表中的字段上的。
2.2 分类
| 约束 | 描述 | 关键字 |
|---|---|---|
| 非空约束 | 限制字段数据不能为null | not null |
| 唯一约束 | 保证字段数据是唯一不重复的 | unique |
| 主键约束 | 主键是一行数据的唯一标识,要求非空且唯一 | primary key |
| 默认约束 | 保存数据的时候如果没给字段值就给出默认值 | default |
| 检查约束 | 保证数据满足条件 | check |
| 外键约束 | 用于俩张表之间建立连接 | foreign key |
| 主键约束一般搭配自动增长auto_imporment一起使用 |
2.3 用法
Create table 表名(
字段名1 类型 约束条件,
....
字段名n 类型 约束条件,
);
check 用法举例
age int check(age>5 && age<10)
default 用法举例
age int default 1
修改字段约束
Alter table 表名 add 字段 类型 约束;
Alter table 表名 change 旧字段 新字段 类型 约束
2.4 外键
具有外键的表叫子表,外键关联的表叫父表
语法
创建外键
alter table 子表 add foreign(子表关联字段) references 父表(父表的关联字段);
alter table 子表 add constraint 外键名 foreign key(子表字段) referencnes 父表(父表关联字段名);
在创建表的时候创建外键
foreign key(子表关联字段) references 父表(父表关联字段);
如果在创建外键的时候没有设置外键名字那么 mysql 会默认给一个外键名
查看外键名
show create table 表名;
删除外键
alter table 子表名 drop foreign key 自定义的外键名;
默认删除 / 更新外键数据行为
Alter table 子表名 add constraint 外键名 foreign key(外键名) references 父表(关联字段) on update 关键字 on delete 关键字;
行为关键字:
| 行为 | 描述 |
|---|---|
| No action | 当在父表中删除/更新记录的时候,首先检查该记录是否存在外键,如果存在就不允许删除/更新 |
| restrict | 与no action一致 |
| cascade | 当在父表中删除/更新记录的时候,首先检查该记录是否存在外键,如果存在,就也删除/更新子表中的记录 |
| set null | 当在父表中删除/更新记录的时候,首先检查该记录是否存在外键,如果存在,如果有就设置子表外键值为null(注意子表约束是否运行为null) |
| set default | 父表有变更的时候,子表将外键值设为一个默认值(innodb引擎中不支持) |
知道即可:现代 Web 开发已经扩展为分库分表,微服务架构,外键已经基本上用不着了。