数据库与sql语句
一:数据库
定义:
用于存储数据的软件
特点:
表是存储数据的核心表现
分类
按照类型去划分就会有关系型数据库的非关系型数据库
关系型数据库
以表的形式去存储数据
mysql(web项目中使用最广泛的数据库) , oracle(在大型项目中使用,银行等), Microsofit sql(微软公司旗下的关系型数据库,收费), SQLite(轻量级数据库,主要用于移动平台)
非关系型数据库
redis(一般作为缓存使用) 不以表的形式去存储数据
MySQL不同平台的安装
MySQL在linux中的安装
在线安装
离线安装
MySQL在windows的安装
exe文件安装
压缩包文件安装
MySQL中创建数据库
一:数据库连接工具
在日常工作中我们会使用两种方式连接数据库对数据库进行操作
1:使用数据库连接工具
常用的数据库连接工具:navicat,dbeaver,sqlyong……
在使用数据库连接工具对数据库进行操作时,首先得具备两点基本条件
1:获取数据库的IP地址,以及账户名以及登录密码(正常工作情况下一般,我们拿到的只有其他用户的账号,root用户一般情况我们拿不到)
2:操作数据库之前对数据库进行备份
注意:对数据库的操作是不可逆的,为防止操做数据库中将重要数据修改后无法复原,那么我们在操作数据库之前一定要随数据库提前进行备份
3:使用工具连接数据库的步骤(以Navicat和mysql为例)
打开navicat>点击连接>选择mysql
>输入连接名称(自己起的一般为项目名用于区分)
>输入主机号/IP地址(若数据库是在自己电脑搭建的,直接输入localhost/127.0.0.1)
>输入端口号(数据库端口号一般为3306)
>输入账户和密码
>点击测试链接(显示连接成功,即可,如报错,一般为数据库IP地址不对/账号密码有问题)
2:使用cmd控制台进行连接操作
使用cmd控制台连接数据库时,同使用工具操作一样,都需要获得IP地址和账户密码,唯一区别就是,工具是图形化操作页面,可视操作方便,而使用cmd操作时是没有图形化页面的,就是一个黑窗口,那么我们就需要使用sql语言+命令才能操作数据库
使用cmd连接数据库时:在cmd中输入MySQL -h+数据库地址 -u+用户名 -p+回车
输入密码
连接成功后输入show databases;(查看mysql中有那些数据库)
输入:exit;退出数据库
创建新的数据库
使用连接工具创建新的数据库
以navicat为例
连接成功数据库后右键数据库连接名称,选择新建数据库
在新建数据库页面:输入数据库名称,(以实际工作中为准,一般为某个模块的名称)
数据字符集:一般为utf8(若在数据库中有插入的数据有4个字节的数据那么就需要使用utf8mb4这个字符编码,因为utf8在MySQL中最大能储存3个字节的数据,而utf8mb4可以存储大于三个字节的数据/表情)
排序规则:选择默认即可/utf8_general_ci(常规排序)
在cmd中创建新的数据库
因为在cmd中是没有图形化界面,所以我们不能够像在navicat中那样直接右键选择新建
因此我们在cmd中创建新的数据库需要使用sql语言
$$$$
言才能进行创建数据库
创建新的数据库:create database +数据库名称
数据库中创建新的表
在工具中创建新表(以navicat为例)
点击表:右键新建表
输入字段名 字段类型(汉字,数字,英文,表情,浮点数……) 长度(输入字段最长是多少)小数点,是否为空,备注
在cmd中创建新表我们首先要确定需要创建的这个表是否存在,然后在使用sql语句中的创 表语句以及设置各种字段,主键外键之类的……
sql语句_查询此表是否存在 如果存在则删除原有表:$$
sql语句创表语句:create table 表名(字段1 字段类型 长度 备注,
字段2 字段类型 长度 备注
……);
注意:在cmd中创建新表要注意主键的设置,自动递增 无符号等一些列限制条件
在cmd中创建新表我们需要使用sql语言去进行创建表
所有sql语言将在第二章节sql语言中详细写出,此处以navicat为准
$$
navicat基本使用
一:连接数据库
打开navicat:点击连接,输入IP地址,账户-密码,,点击测试链接(显示连接成功即可)
二:创建表
打开数据库:点击表,右键新建表
三:设置字段
填写字段名,字段类型,限制条件,是否为空,备注
四:修改字段
右键表,点击设计表,然后进行修改里面的字段,修改完成后点击左下角的√号,在点击刷新
五:查询操作
打开navicat,点击左上角的查询表,输入sql语句
六:删除字段
右键表,点击删除文件,确定(注意此删除表的方法是不可逆的,如需删除请提前做好备份)
七:备份还原
右键,选择转储为sql文件,将备份的sql文件保存到指定位置
注意:选择备份文件时一定要选择结构和数据,否则保存的sql文件只有表结构,而没有数据
还原
点击数据库右键,运行sql文件,选择备份好的sql文件,点击运行即可
八:数据约束
主键:
primary key:物理上的存储顺序
主键设置方法:在新建表页面,点击右上角的黄色钥匙,注意:设置了主键需要勾选不为空,自动递增和无符号
然后点击保存即可
主键的特点:当存在主键时表中的物理顺序就被确定下来,当数据被清空时,新数据的顺序不会从1开始,而是顺延着上一份数据的顺序继续记录,优点:能够保证数据顺序是唯一的
外键
foreign key:维护两个表之间的关联关系
·外键的设置方法
唯一
unique:此字段不允许重复值
唯一的设置方法:
非空
not null:这个字段不允许为空
非空的设置方法:字段中的不是空勾选即可
索引
默认值
default:当这个字段没有填写值时,就会填入默认设定好的值
sql语言介绍
特点:所有主流的关系型数据库都支持使用sql语言进行数据查询
扩展:在MySQL中对sql语言的大小写不做区分
注意:sql语言重点是查询,因此对表的操作和修改仅作基本了解,主要是为了熟悉sql 语句的编写习惯
数据类型
为了更加准确存储数据,保证数据的有效性,需要结合数据类型和约束来限制数据的存储
整数:int 有符号范围(-2147483648 ~2147483647),无符号范围(0 ~ 4294967295)
小数:decimal 如decimal(5.2)/表示这个数据一共五位数,小数点后有两位
字符串:varchar 范围(0~65533)/varchar(3)表示最多三个字符,一个中文或者一个字母都占一个字符
扩展:char 也是字符串,但是他与varchar的区别就是,varchar表示的是最大能存储的范围,而char是只能存储的值,不能多也不能少
日期:datetime 范围(1000-01-01 00:00:00 ~ 9999-12-31 23:59:59)/‘2022-12-9 21:21’
一:在navicat中操作
点击新建查询-在查询窗口写入sql语句
运行:点击运行(直接点击运行,sql语句是从上到下按照顺序执行)
选中需要执行的sql语句点击执行(只执行选中的失去了语句)
sql语句的基本含义
select * from users;
//select 与 from 是sql的关键字(在navicat中具备特定的功能,有输入提示)
//from后面跟的黑色字体一般是表名或者字段名
//建议在所有sql语句结束后都加一个分号,主要用于sql语句结束时的区分
保存sql语句在下一次查询中使用
在navicat中是可以可以保存sql语句在下一次进行查询操作进行使用可以节省工作时间
操作步骤:在navicat-新建查询中-点击保存即可
sql语句创表语句
//需求:创建商品表,包含商品名称和价格
create table goods(
name varchar(20),
price int(10)
);
//sql语句分解
create:在英文中的意思就是创造,创建的意思
table:在英文中的意思为表,表格的意思
create table 在sql语句中就是创建表格,后面跟的就是表明,在表名后面括号里面就是字段字段名+字段类型+限制条件+备注等
创表语句进一步优化
//当我们在cmd中创建表时,因为没有图形化界面,所以并不知道创建的表是否存在,因此我们可以使用sql语言中的创表前的如果存在就删除语句
drop table if exists goods;
//解析:drop:删除,table:表格,if:如果, exists:存在
//因此就是在创表语句中这句的意思就是,删除表,如果它存在
//完整的创表语句
drop table if exists goods;
crete table goods(
name varchar(20),
price int(10)
);
eg:完成创表语句
//需求:创建商品表,
包含字段:id(设置主键),商品名称,价格,数量,公司,备注,并添加商品
drop table if exists goods;
create table goods(
id int primary key unsigned auto_increment,
goodsName varchar(20),
price int,
num int,
company varchar(20),
remark varchar(30)
);
sql语句新增数据(单条)
在sql中给数据库增加数据(不是增加字段,是数据)时我们需要用到的sql语句为
insert into 表名 values (字段1的值。字段2的值,字段3的值……)/注意在sql中增加数据时字符串与日期类型的数据是需要加单引号的
eg:给商品表增加一条数据
id=0 goodsName=“华为” price=4560,num=1,company=“华为”,remark="国产手机的天花板"
insert into goods values(0,'华为',4560,1,'华为','国产手机的天花板');
//关于id=0的解释,因为在创表语句中我们给id设为主键,并设置了unsigned(无符号)和auto_increment(自动递增),主键的作用就是保持表中数据的物理顺序不被打乱,所以我们在给数据库增加数据时将id直接填写为0则MySQL数据库会自动给数据排序
sql语句新增数据(多条)
在增加数据时我么可能会与当大量数据,如果一条条去新增这样会很影响我们的工作效率,
所以为了提升工作效率我们可以使用sql语句中的多条添加方式
insert into 表名 values(数据1……),(数据2……)
单条数据与多条数据的区别,多条数据用多个括号,使用逗号进行分割
sql语句修改数据
在日常工作中,我们会遇到,当数据库中的值发生错误/发生改变时就需要进行更正这组/这个字段的数据,(如果删除表重新建表那不纯纯二逼吗)
那么我们会使用到sql语句中的修改语句
update 表名 set 字段名=字段值 where=条件
注意:在使用update语句时必须要给出where限定条件,如果没有where限定条件,那么在进行修改数据时,会将这个表中当前字段所有数据都进行修改(这就属于白干)
eg:修改华为的价格 名称为小米,公司为小米
update goods set goodsName='小米',price=1980,company='小米有限公司' whereid=2;
sql语句删除数据
在数据库操作原则中删除数据操作流程,先查询后操作(防止误操作)
删除一条数据
删除数据使用到的sql语句为:delete from 表民 where +条件
eg:删除iphone的这条数据
delete from goods where id=1
注意:在删除数据时最重要的就是限定条件与数据备份,如果没有限定条件,那么整张表都会被删除,如果没有备份删除数据是不可逆的(别瞎想,没有回收站)
扩展1:逻辑删除
当我们遇到一些比较重要的数据,不能够直接进行删除操作的(如商城软件中,商品库存为0但是不可以删除整条数据)那么就可以使用逻辑删除
逻辑删除:增加一个字段,将字段的值改为1则是未删除,0则是已删除(是一还是0,自己定,你知道就行),这样我们在进行查询操作时看到这个字段就知道这个字段是什么情况了
eg:使用逻辑删除,删除华为手机这条数据
alter table goods add isdelete int;//首先给整个表增加一个字段isdelete
然后给需要删除的数据赋值为1,不需要删除的字段赋值为0
那么我们在进行查询操作时后面跟一个where条件时不删除的就可以了
select * from goods where isdelete=0;
扩展2:删除数据方法
这种删除数据方法是指删除表中所有数据的方法
1:delete table 表名:这种删除数据的方式是只删除数据,但保留表结构,且主键不会重置
2:truncate table 表名:这种删除数据的方式是删除数据并重置主键计数,也叫截断表
3:drop table 表名:这种删除方式是删除所有,包括表结构和和主键计数
//删除速度 drop最快,truncate中等,delete最慢
sql语言查询操作
$$在sql语言中最重要还是查询操作
$$
一:基础查询
查询表中所有数据
select * from 表名;
//select为查询关键字,*为通配符代表所有字段,、
eg:查询商品表中所有字段
select * from goods;
查询指定字段
select 字段名 from 表名;
eg:查询商品表只显示商品名称和价格
select goodsName,price from goods;
起别名
在sql语言中为了节省时间,提交工作效率,通常会用到起别名的方法,关键字as,使用方法在需要起别名的字段后买你加as和别名即可在后面的调用中直接使用别名
eg:查询商品名称和所属公司口号
select goodsName as 商品名称,remark as 公司口号 from goods;
去重
当一个表中某个字段在多条数据中有相同的值,若我们在工作需要统计该字段有几个分类时,那么我们需要使用到去重的关键字
distinct(不同的)
select distinct(字段名) from 表名;
eg:查询当前表中分别有几家公司
select distinct(company) from goods;
二:条件查询
在使用条件查询时,通常会搭配比较运算符和逻辑运算符进行查询
1:比较运算符
//>:大于,<:小于,=:等于,>=大于等于,<=小于等于
逻辑运算符
and:和(表示两个条件必须都满足),or:或(两个条件满足一个即可),not:不(不满足这个条件即可)
2:条件查询使用到的关键字:where
需求1:查询商品价格大于2000的商品
select goodsName from goods where price<2000
需求2:查询商品价格大于等于2000的商品
select goodsName from goods where price>=2000;
需求3:查询商品价格小于2000的商品
select goodsName from goods where price>2000;
需求4:查询商品价格小于等与2000的商品
select goodsName from goods where price <=2000;
需求5:查询商品价格等于4560和公司名称叫iphone的商品
select goodsName from goods where price=4630 and company='苹果公司';
需求6:查询商品价格等于1980或商品名称叫小米的商品
select goodsName from goods where price =1988 or company='小米有限公司';
三:模糊查询
模糊查询:使用某个字段的前几个字符或者后几个字符进行查询
where 字段名 like '%前几个字符'/'后几个字符%'(如需要匹配前面的字符,那么就将%放在前面,如需要匹配后面的字符就将%放在后面)
eg:查询公司名称中第一个字为小的商品
select goodsName from goods company like '小%'
%代表所有不限制数值
%在前面就匹配后面的字符,前面忽略不计
%在字符后面就匹配前面的字符后面忽略不计
_一个_代表一个字符:
_a代表a前面只有一个字符
a_代表后面只有一个字符
_a_代表这个值只有三个字符
四:范围查询
连续范围查询:between(之间的意思)起始值 and 结束值
在工作中我们可能会需要查询多条数据,如果这几条数据的某个字段的值正好在一个连续的范围里面,那么我们就可以使用between进行连续范围查询
eg:查询商品价格在4559-4562之间的商品
select goodsName from goods where price between 4559 and 4562;
不连续范围查询:in(条件1,条件2,……)
在工作中不一定都是连续范围,所以我们还会使用到不连续范围的查询方式
eg:查询商品价格是1980,1983,4560的商品名称,公司名称和价格
select goodsName,company,price from goods where price in("1980","1983","4560");
五:判断是否为空
在数据库中只要数据的值不是null那么这条数据里面是都有值的,可能是空格,可能是0,但都表示有值
那么在工作中我们会
使用is null来查询字段值为空的数据
eg:需求:查询isdelete字段中为空值的商品名称和价格
select goodsName,price from goods where isdelete is null;
使用is not null来查询数据值不是空的字段
eg:需求:查询isdelete字段中不为空值的商品名称和价格
select goodsName,price from goods where isdelete is not null;
六:排序
在工作中我们会遇到某个字段值杂乱无章的表,那么我们会使用排序的方式使数据正序或者倒叙排列方便我们进一步工作
sql语言中排序的关键字 order by
正序:order by 字段名 asc
eg:将商品价格以从低到高排列
select goodsName,price from goods order by price asc;
倒叙:order by 字段名 desc
eg:将商品价格以倒叙排列
select goodsName,price from goods order by price desc;
七:聚合函数
总数:count
最大:max
最小:min
求和:sum
平均:avg
需求:这个表中一共有多少家华为手机
select count(company) from goods where company='华为';
需求:这个表中最贵的iPhone是多少钱
select max(price) from goods where goodsName='iphone'
需求:这个表中最便宜的手机是多少钱
select min(price) from goods where goodsName='iphone'
需求:购买表中所有手机需要多少钱
select sum(price) from goods;
需求:从这个表中可以看出目前市场上手机的平均价格是多少
select avg(price) from goods;
八:分组查询
分组关键字:group by
分组操作顺序:先查询在分组,在统计
eg:查询每家公司的商品数量
select company,sum(num) from goods group by company;
扩展:分组后在进行筛选
eg:查询所有手机一共有几种品牌,且他们最贵的是多少钱,苹果排除在外
select company,max(price) from goods group by company having company!='苹果公司';
九:分页查询
分页查询所用到的关键字:limit 起始索引 数据行数
eg:查询第三条数据以后的三条数据
select * from goods limit 2,3;
//注意:1:在使用分页查询时不需要使用where关键字
2:在分页查询时其实索引值要比实际值小1,这是因为在计算机中索引值的计数是从0开始,0也算一条数据
3:在起始索引后面跟的是数据条数并不是结束索引
sql语言表操作
新增字段:alter table 表名 add 字段名 字段类型(在sql语言中这个是表操作中的增加字段,是给整张表增加字段)标签:语句,goods,数据库,查询,sql,操作,select From: https://www.cnblogs.com/wh0915/p/16970645.html
修改字段:
删除字段: