mysql数据记录
准备工作
创建库、表
- #创建数据库
- create database mysql02;
- #使用数据库
- use mysql02;
- #创建表
- create table student(id int ,name varchar(10),age int);
复制代码 查看student表结构
<img alt="image-20230506193257861" loading="lazy">
数据增删改操作
知识点
- 插入数据: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);
复制代码 查看此表:<img alt="image-20230506200138442" loading="lazy">
- # 2.演示数据记录的删除操作
- # 空判断 : is null 为空 is not null:不为空
- # 根据条件删除部分数据
- delete from student where name = '王五';
- delete from student where id is null;
复制代码 删除之后的表:<img alt="image-20230506200337727" loading="lazy">
注意!如果不加where后面的条件,即delete from 表名;就默认是删除整个表,一般会出现警告!不建议这样删除表,可以使用truncate 表名;来清空整个表。
使用truncate命令后的表:<img alt="image-20230506200719892" loading="lazy">
- # 3.演示数据记录的更新操作
- # 根据条件修改部分数据
- # 需求: 把'熊三'改成'张三'
- update student set name = '张三' where name = '熊三';
复制代码 改名后的表:<img alt="image-20230506201413708" loading="lazy">
注意,update没有加where条件就是改所有数据,慎用!
数据约束
主键约束
- 主键约束关键字: primary key
- 特点: 修饰的字段,值不能为空且不能重复,一般主键名为xxid
- 注意: 主键约束建议建表的时候添加
- 个数: 主键约束一个表有且只有一个
复制代码- # 主键约束: primary key 特点: 修饰的字段xid,不能为空,不能重复
- # 创建表
- create table stu1(id int primary key,name varchar(10),age int);
复制代码 查看表结构:<img alt="image-20230506202113517" loading="lazy">
- # 添加主键方式除了创建表的时候能添加,建表后依然可以添加,但是必须保证需要添加主键约束的每个字段都满足非空不重复,否则添加失败。
- # 需求: 给上述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);
复制代码 查看表结构:<img alt="image-20230506203025717" loading="lazy">
- # 添加自增方式除了创建表的时候能添加,建表后依然可以添加,如果要添加主键自增,那么表必须没有主键,如果仅添加自增,则需要此表有主键,在这个主键上进而添加自增
- #首先删除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: 判断不为空
复制代码 4.排序查询
知识点
- # 基础格式: 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;
复制代码 示例
- 排序查询关键字: order by
- 基础格式: select 列名 from 表名 order by 排序列名 asc|desc;
- | : 代表或者的意思
- asc : 升序(默认)
- desc: 降序
- 特殊格式: select 列名 from 表名 order by 排序列名1 asc|desc , 排序列名2 asc|desc;
- 特殊格式注意: 先按照第一个字段排序,如果第一个字段值相同,再按照第二个字段排序
复制代码 5.聚合查询
知识点
- # 基础格式: 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;
复制代码 示例
- 聚合函数:sum() avg() count() max() min()
- 基础格式:select 聚合函数(列名) from 表名;
- 注意1: 聚合函数又叫分组函数或者统计函数
- 注意2: 聚合函数(列名)这种方式会自动忽略null值
复制代码 6.分组查询
知识点
- # 需求: 查询所有商品价格总和
- 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';
复制代码 示例
- 分组关键字: group by
- 基础格式: select 列名 from 表名 group by 分组列名;
- 特殊格式: select 列名 from 表名 where 非聚合条件 group by 分组列名 having 聚合条件;
- having与where的区别:
- 1).where是在分组前对数据进行过滤, having是在分组后对数据进行过滤
- 2).where后面不可以使用分组函数(聚合函数),having后面可以使用分组函数(聚合函数),
复制代码 7.分页查询
知识点
- # 需求: 查询各个分类的单独的商品价格总和
- 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;
复制代码 示例
- 分页查询关键字: limit
- 基础格式: select 列名 from 表名 limit x,y;
- x: 整数 起始索引(从0开始数) 如果从0开始那么0可以省略
- y: 整数 本次查询多少条数据
复制代码 来源:https://www.cnblogs.com/lionet-kk/p/mysql.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |