此篇文章是记录DML和DQL的使用,有问题的话欢迎提出
DML&DQL
数据操作语言
1、插入数据
insert
insert into 表名 (列名,...) values (...,...,....);
批处理--批量插入数据
insert into 表名 (列名,...) values (...,...,....),(...,...,....),(...,...,....)...;
注意: 没有赋值的那个列要么有默认值,要么允许为空,否则就必须在insert的时候为其赋值
-- 方法1
insert into college values (1,'计算机学院','1990-1-1','https://www.scu.edu.cn/cs');
insert into college values (2,'文学院','1990-1-1','');
-- 方法2 批处理
insert into college(college_id,college_name,group_date)
values
(4,'数学学院','1984-10-1'),
(5,'教育学院','1986-1-1'),
(6,'物理学院','1999-10-10');
-
推荐大家使用
指定为字段赋值
的做法,这样做可以不按照建表时设定的字段顺序赋值,可以按照 values 前⾯的元组中给定的字段顺序为字段赋值,但是需要注意,除了允许为 null 和有默认值的字段外,其他的字段都必须要⼀⼀列出并在 values 后⾯的元组中为其赋值。 -
在插⼊数据时,要注意主键是不能重复的,如果插⼊的数据与表中已有记录主键相同,那么
insert
操作将会产⽣Duplicated Entry 的报错信息
2、删除数据
delete
-- 在删除操作中,=表示相等性判断,不是复制操作 只有写在set后面的=才是赋值
-- 删除的时候通常会带上where子句,而其中条件通常都是主键
-- where ⼦句是⽤来指定条件的,只有满⾜条件的⾏会被删除
delete from 表名 where 判断条件
-- 删除college_id为5的数据
delete from college where college_id=5;
-- 删除college_id 为 3 和 4 的数据
delete from college where college_id in (3,4);
delete from college-- 删除全表的话会报错,如果必须要这种操作,必须要将安全模式关掉
-- 查看系统安全变量的值
show variables like 'sql_safe_updates';
-- 修改系统变量 on 是安全模式,不允许删除全表,off是关闭安全模式,可以进行删除全表操作
set sql_safe_updates=on;
on delete set null--设置为空值,在删除父表的时候子表将引用父表的列设置为空-前提是该项允许为空
on update cascade--级联,在更新父表的时候子表也会同时更新
on update restrict--默认restrict表示不允许父表删除和更新
注意: delete 和 update 操作一定要带上where子句 千万不要删除或者更新全表
3、更新数据
update
-- 更新一个数据
update college set college_name='物理与空间学院' where college_id=6;
-- 一次性更改多个字段
update college
set college_name='物理与空间学院',
group_date='1990-12-1',
website='https://www.wuli.com'
where college_id=6;
数据查询语言
1、查询数据
投影–select
注意
- SQL的连接方式,MySQL目前的版本没有全外连接,但是可以通过左外连接和右外连接的并集实现全外连接
-
MySQL 中⽀持多种类型的运算符,包括:算术运算符( + 、 - 、 * 、 / 、 % )、比较运算符( = 、 <> 、 <=> 、 < 、 <= 、 > 、 >= 、 BETWEEN…AND… .、 IN 、 IS NULL 、 IS NOT NULL 、 LIKE 、 RLIKE 、 REGEXP )、逻辑运算符( NOT 、 AND 、 OR 、 XOR )和位运算符( & 、 | 、 ^ 、 ~ 、 >> 、 << ),我们可以在 DML 中使⽤这些运算符处理数据。
-
在查询数据时,可以在 SELECT 语句及其⼦句(如 WHERE ⼦句、 ORDER BY ⼦句、 HAVING ⼦句等)中使⽤函数,这些函数包括字符串函数、数值函数、时间⽇期函数、流程函数等
常用字符串函数 功能 CONCAT
将多个字符串连接成⼀个字符串 FORMAT
将数值格式化成字符串并指定保留⼏位⼩数 FROM_BASE64 / TO_BASE64
BASE64解码/编码 BIN / OCT / HEX
将数值转换成⼆进制/⼋进制/⼗六进制字符串 LOCATE
在字符串中查找⼀个⼦串的位置 LEFT / RIGHT
返回⼀个字符串左边/右边指定⻓度的字符 LENGTH / CHAR_LENGTH
返回字符串的⻓度以字节/字符为单位 LOWER / UPPER
返回字符串的⼩写/⼤写形式 LPAD / RPAD
如果字符串的⻓度不⾜,在字符串左边/右边填充指定的字符 LTRIM / RTRIM
去掉字符串前⾯/后⾯的空格 ORD / CHAR
返回字符对应的编码/返回编码对应的字符 STRCMP
⽐较字符串,返回-1、0、1分别表示⼩于、等于、⼤于 SUBSTRING
返回字符串指定范围的⼦串 常用数值函数 功能 ABS 返回⼀个数的绝度值 CEILING / FLOOR 返回⼀个数上取整/下取整的结果 CONV 将⼀个数从⼀种进制转换成另⼀种进制 CRC32 计算循环冗余校验码 EXP / LOG / LOG2 / LOG10 计算指数/对数 POW 求幂 RAND 返回[0,1)范围的随机数 ROUND 返回⼀个数四舍五⼊后的结果 SQRT 返回⼀个数的平⽅根 TRUNCATE 截断⼀个数到指定的精度 SIN / COS / TAN / COT / ASIN / ACOS / ATAN 三⻆函数 常用时间日期函数 功能 CURDATE / CURTIME / NOW 获取当前⽇期/时间/⽇期和时间 ADDDATE / SUBDATE 将两个⽇期表达式相加/相减并返回结果 DATE / TIME 从字符串中获取⽇期/时间 YEAR / MONTH / DAY 从⽇期中获取年/⽉/⽇ HOUR / MINUTE / SECOND 从时间中获取时/分/秒 DATEDIFF / TIMEDIFF 返回两个时间⽇期表达式相差多少天/⼩时 MAKEDATE / MAKETIME 制造⼀个⽇期/时间 常用流程函数 功能 IF 根据条件是否成⽴返回不同的值 IFNULL 如果为NULL则返回指定的值否则就返回本身 NULLIF 两个表达式相等就返回NULL否则返回第⼀个表达式的值 常用其他函数 功能 MD5 / SHA1 / SHA2 返回字符串对应的哈希摘要 CHARSET / COLLATION 返回字符集/校对规则 USER / CURRENT_USER 返回当前⽤户 DATABASE 返回当前数据库名 VERSION 返回当前数据库版本 FOUND_ROWS / ROW_COUNT 返回查询到的⾏数/受影响的⾏数 LAST_INSERT_ID 返回最后⼀个⾃增主键的值 UUID / UUID_SHORT 返回全局唯⼀标识符