mysql数据记录

mysql数据记录

准备工作

创建库、表

#创建数据库
create database mysql02;

#使用数据库
use mysql02;

#创建表
create table student(id int ,name varchar(10),age int);

查看student表结构

image-20230506193257861

数据增删改操作

知识点

插入数据:insert into 表名(字段名1,字段名2,...) values(值1,值2,...),(...),...;
	注意:可以不指定字段,那么默认指定所有字段,插入values时,要和字段一一对应。
	注意:如果插入多条数据,中间用','分隔
删除数据:delete from 表名 where 条件;
修改数据:update 表名 set 字段名 = 值 where 条件;
注意:条件中,判断为空是is null,非空是is not null

示例

# 1.演示数据记录的插入操作
# 指定字段中插入数据
insert into student(name) values ('熊大');
insert into student(name,age) values('熊大',8);
insert into student(id,name,age) values(1,'熊大',2);
#指定字段插入多条数据
INSERT INTO student(id, name, age) VALUES (2,'熊二',2),(3,'熊三',2);

# 不指定字段(默认所有字段)插入数据
INSERT INTO student VALUES (4,'李四',23),(5,'王五',32);

查看此表:

image-20230506200138442

# 2.演示数据记录的删除操作
# 空判断 : is null 为空 is not null:不为空
# 根据条件删除部分数据
delete from student where name = '王五';
delete from student where id is null;

删除之后的表:

image-20230506200337727

注意!如果不加where后面的条件,即delete from 表名;就默认是删除整个表,一般会出现警告!不建议这样删除表,可以使用truncate 表名;来清空整个表。

truncate student;

使用truncate命令后的表:

image-20230506200719892

# 3.演示数据记录的更新操作
# 根据条件修改部分数据
# 需求: 把'熊三'改成'张三'
update student set name = '张三' where name = '熊三';

改名后的表:

image-20230506201413708

注意,update没有加where条件就是改所有数据,慎用!

数据约束

主键约束

主键约束关键字: primary key
特点: 修饰的字段,值不能为空且不能重复,一般主键名为xxid
注意: 主键约束建议建表的时候添加
个数: 主键约束一个表有且只有一个
# 主键约束: primary key 特点: 修饰的字段xid,不能为空,不能重复
# 创建表
create table stu1(id int primary key,name varchar(10),age int);

查看表结构:

image-20230506202113517

# 添加主键方式除了创建表的时候能添加,建表后依然可以添加,但是必须保证需要添加主键约束的每个字段都满足非空不重复,否则添加失败。
# 需求: 给上述student表添加
alter table student add primary key (id);

主键自增

主键自增: primary key auto_increment 特点: 主键需要是int类型,不指定具体值,从1开始每次自动加1
注意1: 主键自增建议建表的时候添加
注意2: 给主键添加了自增后,在插入数据的时候,不指定id默认自增,也可以使用null和0占位默认代表使用自增
# 创建表
create table stu2(id int primary key auto_increment,name varchar(10),age int);

查看表结构:

image-20230506203025717

# 添加自增方式除了创建表的时候能添加,建表后依然可以添加,如果要添加主键自增,那么表必须没有主键,如果仅添加自增,则需要此表有主键,在这个主键上进而添加自增
#首先删除student表的主键
alter table student drop PRIMARY KEY ;
#之后在student表中添加主键自增
alter table student change id id int PRIMARY KEY AUTO_INCREMENT;

#在stu1表中添加自增
alter table stu1 CHANGE id id int AUTO_INCREMENT;

非空约束

非空约束关键字: not null
特点: 修饰的字段,值不能为空
注意: 建议建表的时候添加
个数: 非空约束一个表有且可以只有多个
# 特点: 修饰的字段,值不能为空
# 个数: 非空约束一个表有且可以只有多个
# 创建表
create table stu3(
id int PRIMARY KEY AUTO_INCREMENT,
name varchar(100) not null,
age int
);
# 查看表结构
desc stu3;
# 演示非空约束特点: 不能为空
insert into stu3 (name,age) values (null,18); # 插入失败,因为name值不能为空
insert into stu3 (name,age) values ('张三',18);# 插入成功
# 当然建表后也可以添加非空约束的
alter table stu3 CHANGE age age int not null;
# 也可以手动删除非空约束
alter table stu3 CHANGE age age int;

唯一约束

唯一约束关键字: unique
特点: 修饰的字段,值不能重复
注意: 建议建表的时候添加
个数: 唯一约束一个表有且可以只有多个
# 创建表
create table stu4(
id int PRIMARY KEY AUTO_INCREMENT,
name varchar(100) UNIQUE ,
age int
);
# 查看表结构
desc stu4;
insert into stu4 (name,age) values (null,18); # 可以插入空值
insert into stu4 (name,age) values (null,28); # 可以插入空值(注意:空值没有重复之说)
# 演示唯一约束特点: 不能重复
insert into stu4 (name,age) values ('张三',18);# 插入成功
insert into stu4 (name,age) values ('张三',28);# 插入失败,唯一约束特点: 不能重复
# 当然建表后也可以添加唯一约束的
alter table stu4 CHANGE age age int UNIQUE ;
# 也可以手动删除唯一约束
alter table stu4 drop INDEX age;

默认约束

默认约束关键字: default
特点: 修饰的字段,值可以设置默认值
注意: 建议建表的时候添加 字段名 字段类型 default 默认值
个数: 默认约束一个表有且可以只有多个
# 创建表
create table stu5(
id int PRIMARY KEY AUTO_INCREMENT,
name varchar(100) DEFAULT 'admin',
age int
);
# 查看表结构
desc stu5;
# 注意: 如果你指定姓名,以你指定的为主
insert into stu5 (name,age) values ('张三',18);# 插入成功,但是没有使用默认值
# 演示默认约束特点: 不指定对应字段插数据,自动使用默认值
insert into stu5 (age) values (28);# 使用默认值,默认约束特点:你不指定就使用默认
# 当然建表后也可以添加唯一约束的
alter table stu5 CHANGE age age int DEFAULT 18 ;
# 也可以手动删除唯一约束
alter table stu5 CHANGE age age int;

数据查询操作

1.准备数据

# 创建商品表:
CREATE TABLE product
(
pid INT PRIMARY KEY,
pname VARCHAR(20),
price DOUBLE,
category_id VARCHAR(32)
);
# 插入数据
INSERT INTO product(pid,pname,price,category_id) VALUES(1,'联想',5000,'c001');
INSERT INTO product(pid,pname,price,category_id) VALUES(2,'海尔',3000,'c001');
INSERT INTO product(pid,pname,price,category_id) VALUES(3,'雷神',5000,'c001');
INSERT INTO product(pid,pname,price,category_id) VALUES(4,'杰克琼斯',800,'c002');
INSERT INTO product(pid,pname,price,category_id) VALUES(5,'真维斯',200,'c002');
INSERT INTO product(pid,pname,price,category_id) VALUES(6,'花花公子',440,'c002');
INSERT INTO product(pid,pname,price,category_id) VALUES(7,'劲霸',2000,'c002');
INSERT INTO product(pid,pname,price,category_id) VALUES(8,'香奈儿',800,'c003');
INSERT INTO product(pid,pname,price,category_id) VALUES(9,'相宜本草',200,'c003');
INSERT INTO product(pid,pname,price,category_id) VALUES(10,'面霸',5,'c003');
INSERT INTO product(pid,pname,price,category_id) VALUES(11,'好想你枣',56,'c004');
INSERT INTO product(pid,pname,price,category_id) VALUES(12,'香飘飘奶茶',1,'c005');
INSERT INTO product(pid,pname,price,category_id) VALUES(13,'海澜之家',1,'c002');

2.简单查询

知识点

基础查询关键字: select from
基础格式: select [distinct] 列名,列名 | * from 表名;
distinct关键字: 根据指定字段去除重复值
as关键字: 可以给表或者字段起别名
[]: 代表可以省略
| : 代表或者的意思
* : 代表所有字段

示例

# 1.简单查询
# 需求: 查询所有商品信息
select * from product;

# 需求: 查询商品名称和商品价格
select pname,price from product;

# 需求: 查询分类编号要求去重
select DISTINCT category_id from product;

# 需求: 给商品名称,商品价格字段起别名
select pname as '商品名称' ,price as '商品价格' from product; # 实际不建议用中文别名

# 给表起别名: 双击左上角库名查看数据底层执行的代码就使用了别名
SELECT t.* FROM mysql02.product t; # 默认省略了as

3.条件查询

知识点

条件查询关键字: where
基础格式: select 列名 from 表名 where 条件;
比较查询: > < >= <= != 和 <>
逻辑查询: and(并且) or(或者) not(取反)
范围查询: between x and y: 连续范围x到y in(x,y): 非连续范围x或者y
模糊查询: 关键字like % : 0个或者多个字符 _ : 1个字符
空判断 : is null:判断为空 is not null: 判断不为空

示例

# 基础格式: select 列名 from 表名 where 条件;
# 需求: 查询价格大于2000的商品信息
SELECT *
FROM
    product
WHERE
    price > 2000;

# 需求: 查询价格大于等于3000的商品信息
SELECT *
FROM
    product
WHERE
    price >= 3000;

# 需求: 查询价格在200(含)到3000(含)区间范围内的商品信息
SELECT *
FROM
    product
WHERE
    price BETWEEN 200 AND 3000;

# 需求: 查询价格不是200的商品信息
SELECT *
FROM
    product
WHERE
    price != 200;

# 需求: 查询价格是3000或者5000的商品信息
SELECT *
FROM
    product
WHERE
    price IN (3000, 5000);

# 需求: 查询价格 不在 200(含)到3000(含)区间范围内的商品信息
SELECT *
FROM
    product
WHERE
    price NOT BETWEEN 200 AND 3000;

# 需求: 查询商品名称以'香'开头的商品信息
SELECT *
FROM
    product
WHERE
    pname LIKE '香%';

# 需求: 查询商品名称以'斯'结尾的商品信息
SELECT *
FROM
    product
WHERE
    pname LIKE '%斯';

# 需求: 查询商品名称是3个字,并且以'斯'结尾的商品信息
SELECT *
FROM
    product
WHERE
    pname LIKE '__斯';

# 需求: 查询第二个字是'想'的商品信息
SELECT *
FROM
    product
WHERE
    pname LIKE '_想%';

# 注意: mysql中的null不等于空字符串,或者字符串'null'
# 需求: 查询商品分类不为空的商品信息
SELECT *
FROM
    product
WHERE
    category_id IS NOT NULL;
# 需求: 查询商品分类为空的商品信息
SELECT *
FROM
    product
WHERE
    category_id IS NULL;

4.排序查询

知识点

排序查询关键字: order by
基础格式: select 列名 from 表名 order by 排序列名 asc|desc;
| : 代表或者的意思
asc : 升序(默认)
desc: 降序
特殊格式: select 列名 from 表名 order by 排序列名1 asc|desc , 排序列名2 asc|desc;
特殊格式注意: 先按照第一个字段排序,如果第一个字段值相同,再按照第二个字段排序

示例

# 基础格式: select 列名 from 表名 order by 排序列名 asc|desc;
# 需求: 查询商品所有信息,要求价格升序排序
select * from product ORDER BY price asc; # 报黄,提示多余写asc,因为默认就是升序
select * from product ORDER BY price; # 以后如果是升序,就不用写asc了
# 需求: 查询商品所有信息,要求价格降序排序
select * from product ORDER BY price desc;
# 特殊格式: select 列名 from 表名 order by 排序列名1 asc|desc , 排序列名2 asc|desc;
# 需求: 查询商品所有信息,要求先按照价格降序排序,如果价格相同再按照分类id降序排序
select * from product ORDER BY price desc,category_id desc;

5.聚合查询

知识点

聚合函数:sum() avg() count() max() min()
基础格式:select 聚合函数(列名) from 表名;
注意1: 聚合函数又叫分组函数或者统计函数
注意2: 聚合函数(列名)这种方式会自动忽略null值

示例

# 需求: 查询所有商品价格总和
SELECT sum(price) from product;

# 需求: 查询所有商品总个数
SELECT count(*) FROM product;

# 需求: 查询所有商品平均价格
SELECT avg(price) FROM product;

# 需求: 查询所有商品最大价格是多少
SELECT max(price) FROM product;

# 需求: 查询所有商品最小价格是多少
SELECT min(price) FROM product;

# 需求: 查询分类id为c001的所有商品价格的总和
SELECT sum(price) FROM product WHERE category_id = 'c001';

6.分组查询

知识点

分组关键字: group by
基础格式: select 列名 from 表名 group by 分组列名;
特殊格式: select 列名 from 表名 where 非聚合条件 group by 分组列名 having 聚合条件;
having与where的区别:
1).where是在分组前对数据进行过滤, having是在分组后对数据进行过滤
2).where后面不可以使用分组函数(聚合函数),having后面可以使用分组函数(聚合函数),

示例

# 需求: 查询各个分类的单独的商品价格总和
SELECT sum(price) FROM product GROUP BY category_id;

# 特殊需求: 查询各个分类的单独的商品价格总和,并且筛选总和小于5000的分类
SELECT category_id FROM product GROUP BY category_id HAVING sum(price) < 5000;

# 特殊需求: 查询所有商品价格小于3000的,并且分组统计每个分类的总和,最后只显示总和小于5000
SELECT category_id FROM product WHERE price < 3000 GROUP BY category_id HAVING sum(price) < 5000;

7.分页查询

知识点

分页查询关键字: limit
基础格式: select 列名 from 表名 limit x,y;
x: 整数 起始索引(从0开始数) 如果从0开始那么0可以省略
y: 整数 本次查询多少条数据

示例

# 经常用于数据库优化 查数据建议加limit关键字
# 需求: 查询前3条数据
# 需求: 查询前3条数据
SELECT * FROM product limit 0,3;  #0可以省略

# 需求: 查询最高商品价格的前5个商品信息
SELECT * FROM product ORDER BY price desc limit 5;

# 分页需求:一共16条数据,每页4条
# 需求: 查询每页数据
SELECT * FROM product limit 0,4;
SELECT * FROM product limit 4,4;
SELECT * FROM product limit 8,4;
SELECT * FROM product limit 12,4;
# 推出计算起始索引结论: x=(页数-1)*y

热门相关:无量真仙   夫人,你马甲又掉了!   名门天后:重生国民千金   名门天后:重生国民千金   重生当学神,又又又考第一了!