MySQL数据库学习笔记分享,持续更新~敬请关注~
希望对正在学习MySQL数据库的小伙伴有帮助,如有不当之处,请予指正~
目录
分类(包括非空、唯一、主键、默认、检查约束演示)
函数
定义:
函数是指一般可以直接被另一段程序调用的程序或代码。
字符串函数
常用字符串函数:
函数 | 作用 |
CONCAT(S1,S2,...Sn) | 字符串拼接,将S1~Sn拼接成一个字符串 |
LOWER(str) | 将字符串str全部转换为小写 |
UPPER(str) | 将字符串str全部转换为大写 |
LPAD(str,n,pad) | 左填充,用字符串pad对str的左边进行填充,达到n个字符串长度 |
RPAD(str,n,pad) | 右填充,用字符串pad对str的右边进行填充,达到n个字符串长度 |
TRIM(str) | 去掉字符串头部和尾部的空格 |
SUBSTRING(str,start,len) | 返回字符串str从start位置起len个长度的字符串 |
--CONCAT(S1,S2...Sn);
SELECT CONCAT('D','e','mo');
--LOWER(str)
SELECT LOWER('Demo');
--LPAD(str,n,pad)
SELECT LPAD('000',6,'*');
--TRIM(str)
SELECT TRIM(' Hello KuGou ');
--SUBSTRING(str,start,len);
SELECT SUBSTRING('Hello',1,2);--注意:索引值从1开始
数值函数
常用数值函数:
函数 | 作用 |
CEIL(x) | 向上取整 |
FLOOR(x) | 向下取整 |
MOD(x,y) | 返回x%y |
RAND() | 返回0~1内的随机数 |
ROUND(x,y) | 求参数x的四舍五入的值,保留y位小数 |
--CEIL(x);
SELECT CEIL(0.8);
--FLOOR(x);
SELECT FLOOR(1.2);
--MOD(x);
SELECT MOD(5,2);
--RAND();
SELECT RAND();--0~1之间的随机数
--ROUND(x,y);
SELECT ROUND(1.23,1);
日期函数
常用日期函数:
函数 | 作用 |
CURDATE() | 返回当前时间 |
CURTIME() | 返回当前时间 |
NOW() | 返回当前日期和时间 |
YEAR(date) | 获取指定date的年份 |
MONTH(date) | 获取指定date的月份 |
DAY(date) | 获取指定date的日期 |
DATE_ADD(date,INTERVAL expr type) | 返回一个日期/时间值加上一个时间间隔expr后的时间值 |
DATEDIFF(date1,date2) | 返回起始时间date1和结束时间date2之间的天数 |
注意:DATEDIFF(date1,date2);计算方式为date1-date2,计算时间间隔时,应该更早的时间在后,否则返回值为负数;
--CURDATE();
SELECT CURDATE();
--CURTIME();
SELECT CURTIME();
--NOW();
SELECT NOW();
--YEAR(date);
SELECT YEAR(NOW());--查看当前时间对应的年份
--DATE_ADD(date,INTERVAL expr type);
--expr是一个变量;type是时间单位,如DAY,MONTH,YEAR
SELECT DATE_ADD(N0W(),INTERVAL 30 DAY);
--DATEDIFF(date1,date2);
SELECT DATEDIFF('2022-12-07','2022-12-01');
流程函数
常用流程函数
函数 | 作用 |
IF(value,t,f) | 如果value为true,返回t,否则返回f |
IFNULL(value1,value2) | 如果value不为空,返回value1,否则返回value2 |
CASE WHEN [val1] THEN [res1] ...ELSE [default] END | 如果val1为true,返回res1,...否则返回default默认值 |
CASE [expr] WHEN [val1] THEN [res1] ...ELSE [default] END | 如果expr的值等于val1,返回res1,...否则返回default默认值 |
--IF(value,t,f);
SELECT IF(true,'yes','no');
--IFNULL(value1,value2);
SELECT IFNULL('yes','default');
SELECT IFNULL(null,'default');
--CASE WHEN [val1] THEN [res1]...ELSE [default] END;
SELECT name,(CASE WHEN age < 18 THEN '未成年' ELSE '已成年' END) AS '是否成年' FROM test;
--CASE [expr] WHEN [val1] THEN [res1]...ELSE [default] END
SELECT name,(CASE age WHEN 13 THEN '小' WHEN 14 THEN '小' ELSE '大' END) AS '体格' FROM test;
约束
概述
概念:约束是作用于表字段上的规则,用于限制存储在表中的数据。
目的:保证数据库中数据的正确性,有效性和完整性。
分类
约束 | 描述 | 关键字 |
非空约束 | 限制该字段的数据不能为null | NOT NULL |
唯一约束 | 保证该字段的所有数据都是唯一、不重复的 | UNIQUE |
主键约束 | 主键是一行数据的唯一标识、要求非空且唯一 | PRIMARY KEY |
默认约束 | 保存数据时,如果未指定该字段的值,则采用默认值 | DEFAULT |
检查约束(8.0.16版本之后) | 保证字段满足某一个条件 | CHECK |
外键约束 | 用来让两张表的数据之间建立联系,保证数据的一致性和完整性 | FOREIGN KEY |
CREATE TABLE student(
--主键约束自动增长(插入数据时不填写此项,表中id自动增长)
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
--非空约束、唯一约束
name VARVHAR(12) NOT NULL UNIQUE COMMENT '姓名',
--检查约束
age INT CHECK (age > 0 && age <= 130) COMMENT '年龄',
--默认约束
gender CHAR(1) DEFAULT '1' COMMENT '性别'
);
注意:当插入数据时如果主键id的数值不是连续增长,则有可能是插入数据时数据不符合约束,但主键已经被申请。
外键约束
概念:外键用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性。
子表:拥有外键的表。
父表:外键所关联的表。
语法:
添加外键
--方式一:创建表时
--CREATE TABLE 表名(
-- 字段名 数据类型,
-- ...
-- [CONSTRAINT] [外键名称] FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名)
--);
--方式二:表创建完成之后
--ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名);
ALTER TABLE stu ADD CONSTRAINT fk_stu_group_id FOREIGN KEY(group_id) REFERENCES group(id);
删除外键
--ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
ALTER TABLE stu DROP FOREIGN KEY fk_stu_group_id;
删除/更新行为
行为 | 说明 |
NO ACTION | 当在父表中删除/更新对应记录时,首先检查记录是否有对应外键,如果有则不允许删除/更新。 |
RESTRICT | 当在父表中删除/更新对应记录时,首先检查记录是否有对应外键,如果有则不允许删除/更新。 |
CASCADE | 当在父表中删除/更新对应记录时,首先检查记录是否有对应外键,如果有,则也删除/更新外键在子表中的记录。 |
SET NULL | 当在父表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(这样要求外键允许取null) |
SET DEFAULT | 父表有变化时,子表将外键列设置成一个默认的值(lnnodb不支持) |
--ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表(主表字段名) ON UPDATE CASCADE ON DELETE CASCADE;
ALTER TABLE stu ADD CONSTRAINT fk_stu_group_id FOREIGN KEY(group_id) REFERENCES group(id) ON UPDATE CASCADE ON DELETE CASCADE;
MySQL数据库基础篇(中)到这里就结束了,制作不易,全文手敲,希望看到的小伙伴,你们能够喜欢~
下期预告:MySQL数据库基础知识(下)