目录
SQL语句的分类
DDL
1.查询所有数据库
show databases;
2.查询当前正在使用的数据库
select database();
3.创建数据库
create database databaseName;
#4.创建数据库并指定字符集
create database databaseName default charset utf8mb4;
5.删除数据库
drop database databaseName;
6.切换数据库
use databaseName;
7.查询当前库所有表
show tables;
#8.查看指定表结构(describe:描述)
desc tableName;
#9.查询指定表的建表语句
show create table tableName;
10.创建表语句
create table tableName(
name1 int primary key comment '字段注释',
name2 char not null
)comment '表注释';
#11.修改表
添加字段
alter table tableName add 字段名 类型(长度) [约束]
修改数据类型
alter table tableName modify 字段名 新类型(长度) [约束]
修改字段名和字段类型
alter table tableName change 原字段名 新字段名 新字段名类型(长度) [约束]
删除字段
alter table tableName drop 字段名
修改表名
alter table tableName rename to 新表名
#12.删除表
drop table tableName;
表的数据类型
类型 | 占字节大小 | 有符号范围 | 无符号范围 | 描述 |
TINYINT | 1 byte | (-128,127) | (0,255) | 极小整数值 |
SMALLINT | 2 byte | (-32768,32767) | (0,65535) | 小整数值 |
MEDIUMINT | 3 byte | (-8388608,8388607) | (0,16777215) | 中整数值 |
INT/INTEGER | 4 byte | (-2147483648,2147483647) | (0,4294967295) | 大整数值 |
BIGINT | 8 byte | (-2^63,2^63-1) | (0,2^64-1) | 极大整数值 |
FLOAT | 4 byte | 单精度浮点数 | ||
DOUBLE | 8 byte | 双精度浮点数 | ||
DECIMAL | 小数值,金钱等 |
age tinyint unsigned
score double(4,1)
money decimal(12,6)
类型 | 占字节大小 | 描述 |
CHAR | 0-255 byte | 定长字符串(需指定长度) |
VARCHAR | 0-65535 byte | 变长字符串(需指定长度) |
TINYBLOB | 0-255 byte | 不超过255个字符的二进制数据 |
TINYTEXT | 0-255 byte | 短文本字符串 |
BLOB | 0-65535 byte | 二进制形式的长文本数据 |
TEXT | 0-65535 byte | 长文本数据 |
MEDIUMBLOB | 0-16777215 byte | 中等长度的二进制文本数据 |
MEDIUMTEXT | 0-16777215 byte | 中等长度长文本数据 |
LONGBLOB | 0-4294967295 byte | 极大长度二进制文本数据 |
LONGTEXT | 0-4294967295 byte | 极大长度长文本数据 |
类型 | 占字节大小 | 范围 | 格式 | 描述 |
DATE | 3 byte | 1000-01-01 ,9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 byte | HH:MM:SS | 时间值 | |
YEAR | 1 byte | 1901 - 2155 | YYYY | 年份值 |
DATETIME | 8 byte | 日期+时间值 | ||
TIMESTAMP | 日期+时间值(将时间转换成时间戳存储) |
DML
1.给指定字段添加数据
insert into tableName() values();
2.修改数据
update tableName set 字段名1=值1,字段名2=值2 [where 条件]
3.删除数据
delete from tableName [where 条件]
DQL
SELECT ----- FROM ---- WHERE ---- GROUP BY ---- HAVING ---- ORDER BY ---- LIMIT
1.查询
select [distinct] 字段 from tableName where 条件
group by 分组字段列表
having 分组后条件列表
order by 排序字段 ASC:升序(默认) DESC:降序
limit 分页参数
聚合函数
count(),max(),min(),avg(),sum()。
where和having的区别
执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
判断条件不同:where不能对聚合函数进行判断,而having可以
多表查询
内连接
内连接:查询A、B交集部分数据
隐式内连接
select * from table1,table2 where 条件;
显示外连接
select * from table1 join table2 on 条件;
外连接
左外连接:查询左表所有数据,以及两张表交集部分数据
select * from table1 left join table2 on 条件;
右外连接:查询右表所有数据,以及两张表交集部分数据
select * from table1 right join table2 on 条件;
自然连接
联合查询:union 关键字
对于union查询,就是把多次查询的结果合并起来,形成一个新的查询结果集。
对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致。
union all
会将全部的数据直接合并在一起,
union
会对合并之后的数据去重。
select name from table1
union [all]
select name from table2;
子查询
嵌套查询。
函数
函数 | 功能 |
concat(S1,S2,...Sn) | 字符串拼接,将S1,S2...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个长度的字符串 |
函数 | 功能 |
cell(x) | 向上取整 |
floor(x) | 向下取整 |
mod(x,y) | 返回 x ➗ y 的余数 |
rand() | 返回0 ~ 1内的随机数,[ 0 , 1 ) |
round(x,y) | 返回 x 四舍五入的值,并保留 y 位小数 |
函数 | 功能 |
curdate() | 返回当前日期 |
curtime() | 返回当前时间 |
now() | 返回当前日期和时间 |
year(date) | 获取指定date的年份 |
month(date) | 返回指定date的月份 |
day(date) | 返回指定date的日期 |
datediff(date1,date2) | 返回起始时间date1 和 结束时间date2之间的天数 |
date_add(date,interval
expr type)
|
返回一个日期
/
时间加上一个时间间隔
expr
后的
时间值
|
SELECT DATE_ADD('2023-10-26', INTERVAL 3 DAY); -- 结果为 '2023-10-29'
SELECT DATE_ADD('2023-10-26 12:00:00', INTERVAL 2 HOUR); -- 结果为 '2023-10-26 14:00:00'
函数 | 功能 |
if(value , t , f) | 如果value为true,返回 t ,否则返回 f |
ifnull(value1,value2) | 如果value1不为空,返回value1,否则返回value2 |
case when [ val1 ] then [res1] ... else [default] end | case表达式用于执行条件逻辑并返回不同的值,类似于编程中的条件语句。case 表达式可以有多个条件,每个条件对应一个可能的结果。 |
SELECT
name,
CASE
WHEN age < 18 THEN 'Minor'
WHEN age >= 18 AND age < 65 THEN 'Adult'
ELSE 'Senior'
END AS age_group
FROM
users;
事务
事务控制
开启事务:start transaction 或者 begin;
提交事务:commit;
回滚事务:rollback;
并发事务
脏读
概念:一个事务读到另一个事务还没有提交的数据
不可重复读
概念:一个事务先后读取到同一条记录,但两次读取的数据不同
幻读
概念:一个事务按照条件查询时,没有数据,但插入时,数据存在。l
事务隔离级别
为解决并发事务所引发的问题,在数据库中引入事务隔离级别
隔离级别 | 脏读 | 不可重复读 | 幻读 |
Read uncommitted | ✔ | ✔ | ✔ |
Read committed | × | ✔ | ✔ |
Repeatable Read(默认) | × | × | ✔ |
Serializable | × | × | × |
set session transaction isolation level <isolation_level>;
其中 <isolation_level> 是您想要设置的隔离级别,可以是
"READ-UNCOMMITTED"、"READ-COMMITTED"、"REPEATABLE-READ" 或 "SERIALIZABLE" 中的一个