DML(数据操作语言) ★★★
作用: 操作表中的记录(增 删 改)
插入记录
添加全部字段
insert into 表名 (字段名1, 字段名2, 字段名3…) values (值1, 值2, 值3); // 插入所有字段
insert into 表名 values (值1, 值2, 值3); // 插入所有字段,顺序要和数据库表字段顺序保持一致
添加部分字段
insert into 表名 (字段名1, 字段名2, …) values(值1, 值2, …);
注意事项
值与字段必须对应,个数相同,类型相同
值的数据大小必须在字段的长度范围内
除了数值类型外,其它的字段类型的值必须使用引号引起。
如果要插入空值,可以不写字段,或者插入null
DOS命令窗口操作数据乱码问题的解决(了解)
-
错误说明: gbk (我们在dos中输入的) -----> 数据库(utf8)
当我们使用DOS命令行进行SQL语句操作如有有中文会出现乱码,导致SQL执行失败 -
错误原因:
因为MySQL的客户端设置编码是utf8,而系统的DOS命令行编码是gbk,编码不一致导致的乱码 -
解决方案:
设置mysql客户端 连接 返回值的编码方式
- 查看 MySQL 内部设置的编码
show variables like ‘character%’; - 单独设置(临时)
set character_set_client=gbk; set character_set_connection=gbk; set character_set_results=gbk; - 快捷设置(临时)
set names gbk; - 修改配置文件(永久)
修改MySQL安装目录下的my.ini文件,重启服务所有地方生效。
- 查看 MySQL 内部设置的编码
蠕虫复制
在已有的数据基础之上,将原来的数据进行复制,插入到对应的表中
语法格式: insert into 表名1 select * from 表名2;
修改记录
不带条件修改数据 :
update 表名 set 字段名 = 值,字段名 = 值… ; // 修改表中的所有数据
根据条件修改数据 : ★★
update 表名 set 字段名 = 值,字段名 = 值 where 字段名=值 and 字段名 = 值; // 修改满足条件的数据
删除记录
不带条件删除数据:
delete from 表名; // 逐行删除表中的所有数据
根据条件删除数据:
delete from 表名 where 字段名=值;
truncate删除表记录:
truncate table 表名; // 删除表,再创建一张结构一样的新表.
truncate和delete的区别:
delete是将表中的数据一条一条删除
truncate是将整个表摧毁,重新创建一个新的表,新的表结构和原来表结构一模一样
DQL(数据查询语言) ★★★★★
简单查询:
查询所有列: select * from 表名;
查询指定列: select 字段名1,字段名2… from 表名;
别名查询: select 字段名1 as 别名, 字段名2 as 别名… from 表名 as 表别名;
清除重复值: select distinct 字段名 from 表名;
查询结果参与运算: select 列名1 + 固定值 from 表名;
参数运算的字段必须为数值型
SQLyog: 连接工具
DQL ★
条件查询:
格式:select * from 表名 where 条件;
比较运算符
> 大于
< 小于
<= 小于等于
>= 大于等于
= 等于
<> != 不等于
逻辑运算符
and(&&) 多个条件同时满足
or(||) 多个条件其中一个满足
not(!) 不满足
范围查询
between 值1 and 值2
值1 < 值2
模糊查询
select * from 表名 where 字段 like 条件;
% : 模糊所有
_ : 模糊一位
like
“黑%” “%黑” “_黑” “__黑%” “%黑%”
排序
select * from 表名 where 条件 order by 字段名称 [desc | asc] , 字段名 [desc | asc]… ;
asc(默认) : 升序 desc : 降序
聚合函数
select 聚合函数 from 表名;
count() : 计数
IFNULL(english,0)
sum() : 求和
max() : 求最大值
min() : 求最小值
avg() : 求平均值
扩展-保留小数位
cast(avg(字段名称) as decimal(5,2))
分组
select * from 表名 where 条件 group by 分组字段 [having 分组条件 ] ;
group by 分组字段 [having 条件]
having与where的区别 ★
where是在分组前对数据进行过滤
having是在分组后对数据进行过滤.
where后面不可以使用聚合函数
having后面可以使用聚合函数
格式:
select * from 表名 limit
分页
关键字: limit
select * from 表名
limit 起始索引,每页显示条数;
格式:
select * from 表名 limit 起始索引,每页显示条数;
数据库中有1000条数据
每页显示5条
--第1页
select * from 表名 limit 0,5;
-- 第2页
select * from 表名 limit 5,5;
-- 第3页
select * from 表名 limit 10,5;
.....
-- 第15页
select * from 表名 limit 70,5;
......
-- 第n页
select * from 表名 limit (n-1)*5,5;
格式:起始索引: (当前页-1)*每页显示条数