JavaWeb笔记——mysql单表操作
黑马程序员2023javaweb开发网课笔记,自用
一、SQL 基本概念
1.1 通用语法
- SQL语句可以单行/多行书写,以分号;结尾。
- SQL语句中可以增加缩进/空格来增强可读性。
- SQL语句中的关键字不区分大小写。
- SQL语句注释:单行注释(-- 注释),多行注释(/* 注释 */)
1.2 语句分类
1.3 mysql安装
- 解压安装包后,在环境中配置MYSQL_HOME,在path中配置%MYSQL_HOME%\bin。
- cmd中运行指令,出现截图结果则以上安装成功。
mysql
- 初始化: cmd中运行指令,安装目录下出现data文件夹
mysqld --initialize-insecure
- mysql服务注册:管理员身份运行cmd,指令如下:
mysqld -install
- 启动/关闭指令:
net start mysql
net stop mysql
- 修改默认账户密码:一般用户名是root
mysqladmin -u 用户名 password 密码
- 登录mysql:
mysql -u用户名 -p密码
1.4 图形化工具——navicat
安装教程:MySQL+Navicat安装配置
- 申请链接mysql:
- 双击图标,由灰转绿,链接成功:
1.5 idea链接Mysql
-
右侧Database->加号->Data Source->MySQL
-
用户名和密码->第一次链接需要点击Download下载包->点击test connection测试链接->ok
-
链接成功的结果:
-
console:右侧选择对应的库,再运行代码
-
表格:加号增加新数据行,数据更新后,需要单击绿色箭头上传
二、DDL数据定义语句
2.1 针对数据库操作的语句
- 创建数据库,data下自动创建db01,名称不可重复
create database [if exists] db01;
- 查询数据库:
show databases;--查询所有数据库
select database();--查询当前正在操作的数据库
- 使用数据库:
use 数据库名称;
- 删除数据库:
drop database [if exists] 数据库名称;
2.2 针对表操作的语句——创建表&&基础约束&&数据类型
- 创建表:选择对应的数据库,字段之间用逗号隔开,comment写注释;字符类型使用varchar(大小)定义;
create table user(
id int comment 'id',
userName varchar(20) comment '姓名',
age int comment '年龄',
gender varchar(4) comment '性别'
) comment '用户表';
- 约束:
create table user(
id int primary key auto_increment comment 'id', # 主键自增
userName varchar(20) not null unique comment '姓名', # 唯一且非空
age int comment '年龄',
gender varchar(4) default '男' comment '性别' # 默认值为'男'
) comment '用户表';
- 数据类型
1)数值:float和double类型需要指定参数,第一个是长度,第二个是小数位个数
2)字符串:优先使用varchar(n);char(n)占用定长n个字符;varchar(n)最多存储n个字符,占用为实际需要存储的字符长度x<=n
3)日期:
- 其他针对表的语句:
三、DML数据操作语句——增、改、删
3.1添加数据Insert
- 语法:
1)插入数据时,指定的字段顺序需要与值的顺序是一一对应的。
2)字符串和日期型数据应该包含在单引号中。
3)插入的数据大小,应该在字段的规定范围内。
4)批量操作用逗号隔开。 - sql语句:全部字段添加语句,没有指定字段名的顺序,默认以建表顺序插入,不推荐这种写法!!!推荐显式声明“字段名-数值”形式的
insert into user (userName,age,gender) values ('liquor',100,'男');
3.2 更新数据update
-
语法:
1)如果没有条件,则会修改整张表的所有数据。
2)更新的字段使用逗号隔开;where之前不要逗号 -
sql语句:
update user set userName='Jin',age=40 where userName='liquor';
# 将userName为'liquor'的数据行,userName更新为'Jin',age更新为40
3.3 删除数据delete
-
语法:如果没有条件,则会删除整张表的所有数据。危险操作,慎重。
-
sql语句:
delete from user where userName='Jin';
# 将表中userName为'Jin'的数据行删掉
四、DQL数据查询语句
4.1 基础查询
- 语法:
1)* 号代表查询所有字段,少用,不直观。
2)别名设置:as ‘别名名称’
3)去重:distinct
- 去重查找实例:年龄去重
select distinct age from user;
- 别名实例:输出的列表重命名
select userName as'姓名',age as '性别' from user;
4.2 条件查询——where
-
条件查询语句:
-
条件语句中可用的运算符:
1)(not) between…and…:适用于数据值的范围查询
2)in(…):如where major in(‘CS’,‘M’,‘CH’)查找在固定已知字符范围
3)like ‘%k_’:模糊查询,%是k之前的字符串可以是任意长度,_是k之后可以有一个任意字符串(注意,中文占两个字符串长度)。
-
条件语句实例1:查找用户名称中包含r且年龄在10-30的用户姓名和年龄;
1)数据
2)sql语句和结果
4.3 聚合函数
-
聚合概念:将一列数据作为一个整体,进行纵向计算
-
语法:
1)null值不参与所有聚合函数运算。
2)统计数量可以使用:count(*) , count(字段) ,count(常量),尽量使用第一种。
-
常见聚合函数:
-
聚合函数实例1:统计用户年龄超过40的人数
1)数据
2)sql语句和结果:
4.4 分组查询——group by
- 分组语法:
1) 执行顺序:where > 聚合函数 > having ,where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤
2)where不能对聚合函数进行判断,而having可以。
3)分组之后,返回的查询字段一般为聚合函数结果和分组字段,查询其他字段无任何意义,会报错。如group by age时,可以返回select age from user或者select count(*) from user
2.分组实例:查找组内超过2个人年龄大于30的组号,以及该组内符合条件的人数
1)数据:
2)sql语句和结果
4.5 排序查询——order by
-
语法:
1)排序方式默认升序asc,可以省略,降序为desc。
2)如果第一个字段的数值一致,第二个字段的排序才会生效,见实例1.
-
排序实例1:按组别升序排列,如果组别相同,再按照年龄降序排列。
1)数据:
2)sql语句和结果
4.6 分页查询——limit
- 语法:
1)起始索引从0开始,起始索引 = (查询页码 - 1)* 每页显示记录数。
2)不同的数据库有不同的实现,MySQL中是LIMIT。
3)如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 10。
- 实例:查询第3页的数据,每页展示10条。起始索引=(3-1)*10=20
select * from user limit 20,10;