修改数据
sql
1. update 的作用就是修改表中已有的数据
2. update users set username = 'user-2' where id = 2;
3. update 表名称 set 字段名称 = 新值 where 条件 (基础语法)
修改后进行确认
bash
1. select * from users where id = 2;
修改多个字段
bash
1. update users set username = 'user-3', password = '234567' where id = 2;
SQL语法
ini
1. 不必完全写成一行,字段比较多的时候,那么可以进行换行,换行的好处是更加的清晰,也不容易遗漏逗号。
```SQL
update users
set
username = 'user-4',
password = '2345678'
where id = 2;
```
updated_at 时间字段
sql
1. updated_at 表示数据最后一次修改的时间
2. 在users表中,设计时间 updated_at datetime default current_timestamp
3. default current_timestamp 在新增数据时,会默认生成当前时间
4. 所以说当我们修改用户资料的时候,也需要同步更新 updated_at
updated_at 如何更新呢?
scss
1. now() 获取当前的时间
2. select now();
where 在 update 中的重要性
ini
1. 如果没有写条件查询,就是写where,那么你怎么知道你修改的是那一条数据呢?
2. 错误示范如下:
```SQL
update users
set
username = 'user-4',
password = '2345678'
```
删除数据
sql
1. delete 的作用就是删除
2. delete from users where id = 2;
3. delete from 表名称 where 条件
4. 删除前先查询
5. 折行写
```SQL
delete from users
where id = 2;
```
6. 完整的流程为 1.先查询 2.确认数据 3.删除 4.确认删除结果
where 在 delete 中的重要性
markdown
1. delete from users;
2. 删除表中所有的数据;
3. 删除表中所有数据会有什么影响呢?
3.1 users 表还在
3.2 字段也还在
3.3 但表中的数据就已经全部删除了
drop table 删除表
markdown
1. drop table users; 删除整张表
2. drop table 表名称;
1. 删除整张表
2. 表结构没有了
3. 表数据没有了
delete 和 drop 的区别
markdown
1. delete 删除表中的数据,但是表还在。
2. drop 删除整张表,数据和结构都没有了
进阶的增删改查-1
查询
sql
1. select * from user_info order by age desc;
2. select * from user_info order by 字段名 排序规则
3. order by 表示进行排序
4. desc 表示从大到小进行排序
5. asc 表示从小到大进行排序
6. select * from user_info where age > 18;
修改
ini
1. update user_info set age = 21 where name = '张三';
删除
ini
1. delete from user_info where name = '张三';
2. 删除分软删除和物理删除(硬删除)
- 总结
-
写删除和修改时,一定要写 where 1.1 如果不写 where 的话就会有危险的操作,比如把表的数据删除掉。
-
先查再改,先查再删。 2.1 select * from user_info where name = '张三';
-
先不要求快,先追求稳。 3.1 看懂SQL 3.2 你自己能写 3.3 你应该知道你写的这个语句,执行后有什么结果
-
进阶的增删改查-2
插入
scss
1. decimal(5, 2) 数据类型表示可以有小数且可以有两位。应用场景比如说学生分数。
查询
sql
1. 常见的比较运算符号
1.1 = 等于
1.2 > 大于
1.3 < 小于
1.4 >= 大于等于
1.5 <= 小于等于
1.6 != 不等于
1.7 <> 不等于
2. AND 和 OR
2.1 AND 表示并且的意思
2.2 OR 表示或者的意思
2.3 select * from student where age > 18 and gender = '女';
2.4 select * from student where 条件1 and 条件2;
2.5 select * from student where age < 18 or score > 90;
2.6 select * from student where 条件1 or 条件2;
3. between and
3.1 between and 表示查询一个范围,区间。
3.2 select * from student where age between 18 and 20;
3.3 意思是大于等于18岁,并且小于等于20岁。
3.4 select * from student where age between 条件1 and 条件2;
4. in
4.1 查询多个值
4.2 select * from student where age in(18, 19, 20);
修改
删除
- 总结
进阶的增删改查-3
插入
查询
sql
1. 空值判断
1.1 is null 表示就是没有值, 就是表示这个字段没有值。
1.2 注意不是 0, fasle, ''
1.3 有些值是可以非必填写的。
1.4 select * from student where address is null; 表示查询地址为空
1.5 select * from student where 字段名称 is null;
1.6 select * from student where address is not null; 表示查询地址不为空
1.6 select * from student where 字段名称 is not null;
2. LIKE 模糊查询
2.1 模糊查询,比如说 全国姓氏分布,`小`字开头的
2.2 经常和%一起使用。
2.3 % 表示任意多个字符
2.4 小% 表示以`小`字开头
2.5 %小% 表示中间包含`小`字
2.6 %小 表示以`小`字结尾
2.7 select * from student where name like '小%'; 模糊查询,查询名字中是小字开头的
2.8 select * from student where name like '条件%';
2.9 select * from student where address like '%州'; # 模糊查询,查询名字中是州字结尾的
2.10 select * from student where address like '%条件';
3. LIMIT 分页
1. MySQL中常用的分页就是 LIMIT
2. select * from student limit 5; 代表着只查询5条数据
3. select * from student limit 条数
4. select * from student limit 起始位置, 条数;
5. select * from student limit 0, 5;
4. 综合
```sql
/*
查询 性别为女 并且 分数大于等于 80分
并进行从大到校的分数排序
请对查询的结果进行分页,每页5条。
*/
select * from student
where gender = '女' and score >= 80
order by score desc
limit 0, 5;
```
修改
删除
-
总结
分页公式
-
pageNumber, pageSize
-
pageNumber 代表着页面数 1
-
pageSize 页面的条数 10
-
起始位置:起始位置 = (pageNumber - 1) * 页面的条数
-
(1 - 1) * 10 = 0; 第一页的起始数据
-
(2 - 1) * 10 = 10; 第二页的起始数据
-
(3 - 1) * 10 = 20; 第三页的起始数据
-
基础的
sql
# 完整内容
# 使用数据库
use news_admin_api1;
# 修改某一个字段名的数值
update users set username = 'user-2' where id = 2;
# 修改后进行确认
select * from users where id = 2;
select * from users where username = 'user-2';
# 修改多个字段的值,可以折行写。
update users
set
username = 'user-4',
password = '2345678'
where id = 2;
# 获取当前的时间
select now();
# 修改多个字段的值,并同步更新时间。
update users
set
username = 'user-5',
password = '23456789',
update_at = now()
where id = 2;
# 删除一条数据
delete from users where id = 2;
# 删除表中所有的数据
delete from users;
进阶-1
sql
# 新建数据库
create database mysql_study;
# 使用数据库
use mysql_study;
# 建表
create table user_info (
id int primary key auto_increment,
name varchar(50) not null,
age int,
created_at datetime default current_timestamp
);
# 插入值
insert into user_info (name, age) values ('张三', 18);
insert into user_info (name, age) values ('李四', 19);
insert into user_info (name, age) values ('王五', 20);
# 查询插入值
select * from user_info;
# 只查询某个字段
select age from user_info;
# 按照年龄进行排序,从大到小。
select * from user_info order by age desc;
# 按照年龄进行排序,从小到大。
select * from user_info order by age asc;
# 查询年龄大于18岁的用户
select * from user_info where age > 18;
# 查询年龄小于19岁的用户
select * from user_info where age < 19;
进阶-2
sql
# 创建数据库
create database if not exists mysql_study1;
# 使用
use mysql_study1;
# 删除表
drop table if exists student;
# 创建表
create table student(
id int primary key auto_increment,
name varchar(50) not null,
age int,
gender varchar(10),
score decimal(5, 2),
address varchar(100),
created_at datetime default current_timestamp
);
# 插入数据
INSERT INTO student (name, age, gender, score, address) VALUES ('小明', 18, '男', 88.50, '北京');
INSERT INTO student (name, age, gender, score, address) VALUES ('小红', 19, '女', 92.00, '上海');
INSERT INTO student (name, age, gender, score, address) VALUES ('小刚', 20, '男', 76.50, '广州');
INSERT INTO student (name, age, gender, score, address) VALUES ('小丽', 17, '女', 95.00, '深圳');
INSERT INTO student (name, age, gender, score, address) VALUES ('小军', 21, '男', 67.00, '杭州');
INSERT INTO student (name, age, gender, score, address) VALUES ('小美', 18, '女', 81.00, '成都');
INSERT INTO student (name, age, gender, score, address) VALUES ('大壮', 22, '男', 59.00, '武汉');
INSERT INTO student (name, age, gender, score, address) VALUES ('阿强', 20, '男', 73.50, '西安');
INSERT INTO student (name, age, gender, score, address) VALUES ('阿花', 19, '女', 86.00, '南京');
INSERT INTO student (name, age, gender, score, address) VALUES ('小天', 18, '男', 90.00, '苏州');
# 查询表所有数据
SELECT * FROM student;
# 查询年龄大于18岁的,并且性别是女生的学生
select * from student where age > 18 and gender = '女';
# 查询年龄小于18岁的,或者分数大于90分的学生
select * from student where age < 18 or score > 90;
# 查询年龄18岁到20岁之间的学生
select * from student where age between 18 and 20;
# 查询年龄在18、19、20 岁的学生
select * from student where age in(18, 19,20);
进阶-3
sql
# 创建数据库
create database if not exists mysql_study1;
# 使用
use mysql_study1;
# 删除表
drop table if exists student;
# 创建表
create table student(
id int primary key auto_increment,
name varchar(50) not null,
age int,
gender varchar(10),
score decimal(5, 2),
address varchar(100),
created_at datetime default current_timestamp
);
# 插入数据
INSERT INTO student (name, age, gender, score, address) VALUES ('小明', 18, '男', 88.50, '北京');
INSERT INTO student (name, age, gender, score, address) VALUES ('小红', 19, '女', 92.00, '上海');
INSERT INTO student (name, age, gender, score, address) VALUES ('小刚', 20, '男', 76.50, '广州');
INSERT INTO student (name, age, gender, score, address) VALUES ('小丽', 17, '女', 95.00, '深圳');
INSERT INTO student (name, age, gender, score, address) VALUES ('小军', 21, '男', 67.00, '杭州');
INSERT INTO student (name, age, gender, score, address) VALUES ('小美', 18, '女', 81.00, '成都');
INSERT INTO student (name, age, gender, score, address) VALUES ('大壮', 22, '男', 59.00, '武汉');
INSERT INTO student (name, age, gender, score, address) VALUES ('阿强', 20, '男', 73.50, '西安');
INSERT INTO student (name, age, gender, score, address) VALUES ('阿花', 19, '女', 86.00, '南京');
INSERT INTO student (name, age, gender, score, address) VALUES ('小天', 18, '男', 90.00, '苏州');
# 查询表所有数据
SELECT * FROM student;
# 查询年龄大于18岁的,并且性别是女生的学生
select * from student where age > 18 and gender = '女';
# 查询年龄小于18岁的,或者分数大于90分的学生
select * from student where age < 18 or score > 90;
# 查询年龄18岁到20岁之间的学生
select * from student where age between 18 and 20;
# 查询年龄在18、19、20 岁的学生
select * from student where age in(18, 19,20);
# 空值判断,首先插入数据时,先模拟一个有空值的数据
insert into student (name, age, gender, score) values ('测试同学', 23, '男', 70);
# 查询地址为空的同学
select * from student where address is null;
# 查询地址不为空的同学
select * from student where address is not null;
# 模糊查询,查询名字中是小字开头的
select * from student where name like '小%';
# 模糊查询,查询名字中是州字结尾的
select * from student where address like '%州';
# 分页查询,查询前5条学生信息
select * from student limit 5;
# 分页查询,查询第一页,每页5条数据
select * from student limit 0, 5;
# 分页查询,查询第一页,每页10条数据
select * from student limit 0, 10;
# 分页查询,查询第二页,每页10条数据
select * from student limit 10, 10;
# 分页查询,查询第三页,每页10条数据
select * from student limit 20, 10;
# 综合
select * from student
where gender = '女' and score >= 80
order by score desc
limit 0, 5;