上一章我们了解了对表及库的基本增删查改操作,本章我们针对增删查改内容进行与一些拓展,
9.1字段修饰及数据类型
我们之前在创建表时用到的格式为:
create table 表名 ( 字段名1 字段数据类型(数据类型长度), 字段名2 字段数据类型(数据类型长度), 字段名3 字段数据类型(数据类型长度), 字段名4 字段数据类型(数据类型长度), )
其实这个格式较为简单,仅仅定义了数据类型,但是大部分情况下无法只能通过数据类型来定义字段。因此我们可以拓展一下,在数据类型之后加上字段修饰,字段修饰有以下几个主要内容:
- unsigned:表示的数字是无符号数字(只能是正数)
- null:这个字段可以为空
- not null:这个字段不可以为空
- primary key:主键,用来唯一标识表中的一条记录(主键的内容不能重复)
- auto_increment:设置主键自增
- default:设置字段的默认值
我们来一个个讲解上述的字段修饰:
unsigned:
表示该字段为无符号数字,顾名思义,也就是非负数。该字段只能紧跟在数据类型之后,否则会报错。
null:
该字段修饰可以让字段值为空,默认为null
not null:
该字段不能让字段值为空,如果非空字段无值的情况下,会显示下图结果
primary key:
主键,用来唯一标识表中的一条记录,该字段不能重复,通常用来作为序号,id等字段名称,
auto_increment:
该修饰主要是用来做主键自增时使用,相关主键的数据类型尽量为数值型。
(注意:在设置自增后主键轻易不要修改,因为主键自增后一般按照最大数值之后开始自增。贸然修改主键数值可能会导致之后的主键会从修改数值字段的最大值开始自增!!!)
default:
设置字段默认值,在未改动该字段的情况下会默认为该字段修饰之后的字符
格式
字段名 数据类型 default “字符”
拓展创建表
在了解字段修饰之后,我们就可以拓展一下之前我们所学习的创建表
拓展格式如下
create table 表名 ( 字段名1 字段数据类型(数据类型长度) 字段修饰, 字段名2 字段数据类型(数据类型长度)字段修饰, 字段名3 字段数据类型(数据类型长度)字段修饰, 字段名4 字段数据类型(数据类型长度)字段修饰, )
话不多说,我们直接来举例
例:
在数据库db1下创建表格tb001表,要求:
name 为可变长度字符,50长度,
age为整型,三字符长度,且不能为空,
id为int长度,不能为空,且拥有主键并自加主键,
genger为可变长的字符,30长度,默认值为hebei,
nmum为枚举类型,枚举值为m和n
use db1; create table tb001( name varchar(50), age int(3) not null, id int not null primary key auto_increment, genger varchar(30) default"hebei")
我们来查看一下上列命令的表结构
通过查看表结构我们可以发现我们上面所使用的字段名称,数据类型以及字段修饰,在上一篇文章我们已经讲解了各个字段的名称及含义,这里我们不再赘述。
补充:数据类型长度
不同数据类型长度所代表的含义不同,如果我们在char,或者varchar后加数据类型长度之后,该类型则可以最多输出数据类型长度的字符,如果是数值长度的话,输入少于字符长度的数据前面会自动用0去补全,如果超出长度则会原样显示出来,这里直接放截图
age int(3)时输入3显示的数据
age int(3)时输入333333显示的数据
而char或varchar输入超过该数据长度则会报错,char默认长度是1,这里请大家注意。
9.2对表中的数据进行操作
我们之前已经学习了对表的操作,接下来我们开始对表中的数据进行操作
在表中插入数据
在表中插入数据有两种方法
- 方法一
insert into 表名 values(值1,值2,值3)
注意:该方法是依次给字段赋值,因此需要将字段逐个赋值
- 方法二
insert into 表名(字段,字段,字段) values(值1,值2,值3)
该方法可以指定字段进行赋值,因此方法二较为常用
这里我们举个例子
案例:
在tb001中插入数据,name为ch225,age为66,genger为f
insert into tb001(name,age,genger)values("ch225",66,"f")
我们来看一下结果
注意:
- 在赋值时候去注意字符类型,字母及文字需要用英文双引号引用,否则报错
- 这里仅仅是向部分字段写入值
- 没有指定字段,会写如空
- 字段的顺序要和值的顺序保持一致
删除表中的数据及截断表
删除表中的数据有两个格式,如下:
- 格式一:
delete from 表名
该命令可以直接删除表中的全部数据
- 格式二:
delete from 表名 where 条件
该命令可以删除表中的指定数据
直接举例子
现在有以下表student(如下图)
例子1.
删除student表中的sage为18的数据
delete from student where sage=18
看结果
删除三行,我们现在进表里看
例子二:
删除表中所有数据
delete from student
老规矩,看结果
我们来看表
没数据了,说明命令执行成功下一个
但我们重新插入数据时会发现,主键不也是从0开始自增,而是在删除数据之前最高的主键开始增加
截断表
截断表,类似于我们超市开的小票,打出来一大堆东西,一撕,啪!全都没了,然后重新打印下一张小票继续从o开始。简单点来说,就是删除表中全部的数据,而且会截断表(id会重新开始自增)
格式
truncate 表名
老规矩,我们举例子来验证
上图为表sc的数据,主键为sid,我们来截断该表
TRuncate sc
ok,命令执行成功,接下来我们添加数据来看看
insert into sc (cid,score)values(1,20)
看结果
主键sid开始从零自增,完成!!
修改表中数据
也是有两种格式,
格式1:
update 表名 set 字段=值
该格式为批量修改,只要是该字段内的数据都会被修改
格式2:
update 表名 set 字段=值 where 记录=值
该字段用where进行条件筛选
话不多说直接举例:
现有表teacher,表内容如下图
例1:将阿斯顿修改为图灵
update teacher set tname="图灵" where tid=1
我们来查看表
阿斯顿已成功更改·下一个例子
例子二:
表中的tname修改为乔布斯
update teacher set tname="乔布斯"
查看表
、
修改表中数据就这些,完成!
9.3 对表中的字段进行操作
增加字段
在已经创建的字段之前或之后添加新的字段
格式一:在字段名之后添加新字段
alter table 表名 add column 新字段名 字段属性 after 字段名
格式二:在字段名之前添加新字段
alter table 表名 add column 新字段名 字段属性 first 字段名
直接举例:
teacher表如上图,在tname后添加新字段age,数据类型为int,默认为30
alter table teacher add column age int default"30" after tname
我们查看表结构
ok,完成,我们开始下一个环节
删除字段:
顾名思义,删除字段,不做解释
格式:
alter table 表名 drop column 字段名
我们还是以上述表举例
例子
删除tname字段
alter table teacher drop column tname
我们看下表
ok,删除表成功
注意:贸然删除字段可能会导致一些未知错误,因此:
建议不要删除!
建议不要删除!!
建议不要删除!!!
建议不要删除!!!!
建议不要删除!!!!!
建议不要删除!!!!!!
修改字段名
修改字段名,见名知义,
格式:
alter table 表名 change column 字段名 新字段子 属性约束
还是举例来看一下吧
还是那个teacher
例:
将字段名age修改为gae
alter table teacher change column age gae int(30)
我们来看结果
ok了,
该命令不仅可以修改字段名,也可以去修改数据类型和字段修饰。这里就不一一演示了。还请各位读者见谅。
修改字段顺序
这玩意跟之前添加字段还有些类似,还别不信,直接看格式
格式一:alter table 表名 modify column 字段名 属性 after 位置
格式二:
alter table 表名 modify column 字段名 属性 first 位置
这里我们还是举例表示:
还是teacher表,将表中的age字段移动至tid之前
alter table teacher modify column tid int(30) after gae
我们来看一下表
改过去了,说明ok,没问题对表中的字段进行操作就了解这么多,接下来进入下一个板块
9.4查询表中的内容
9.4.1 简单查询
就是可以查看表中的内容,这里我们先看格式,再去了解
格式
select 查询的内容 from 表名 where 条件
表示查询内容的方法有很多我们来看几个较为常用的
表示查询内容的方法:
- *:表示所有的内容
- 一个或者多个字段的名字:表示仅仅查询一个或者多个字段(查询多个字段的时候,多个字段之间,用逗号分割)
注意:查询内容只能通过字段查询相关记录,不能通过记录去查询,如果想要控制显示记录,则需要通过where之后加条件去执行。
where后条件写法
- > 大于
- >= 大于等于
- < 小于
- <= 小于等
- <> 不等于
- != 不等于
- between ... and ... 判断范围
- is null 是空
- is not null 不是空
- like 模糊查询
(like后可能要跟通配符“%”,% 表示任意个任意字符,具体使用方法如下面例子)
- in 判断某个字段是否在给定的集合中
好了,一条简单些的select语句大概就由这么些内容组成,之后的内容我们通过例题进行补充。
例:
假设有一表name,如下
查询name中age大于20的字段
select *from name where age > 20
查询name中age大于等于20的字段
select *from name where age >= 20
查询name中age小于20的字段
select *from name where age < 20
查询name中age为空的字段
select *from name where age is null
查询name中age不为空的字段
select *from name where age is not null
查询name中age为3,5,7的字段
select *from name where age in(3,5,7)
查询name中 age大于等于8 且小于等于50select *from name where age>3 and age < 50
注意:接下来就要用到简单查询了!!!!
简单查询如下
查询name中name包含a的记录
select name from name where name like "%a%"
查询name中namey以a为结尾的记录
select name from name where name like "%a"
(因为框中只有一个a,所以a即使开头也是结尾)
我们就先简单举上述这些例子,接下来我们对简单进行略微的扩展
9.4.2查询排序
就是对上述的结果进行了简单的排序,话不多说,我们先来看格式
格式:
select 查询内容 from 表名 where 条件 order by 字段名
排序分为两种字段名,
- 升序(默认为升序)
asc
- 降序
desc
看上去好像怪简单的,我们直接进行实操
还是以上面name为例
查询name中age不为空的字段并且对age由高到低进行排序
select *from name where age is not null order by age desc
查询name中age不为空的字段并且对name由低到高进行排序
select *from name where age is not null order by name asc
这里我们可以看到,当排序对象为数字时,是从0开始进行排序;当排序对象是字母时,则是依照字母顺序表从a到z进行排序。因此在排序时请注意这几点。
9.4.3 指定输出行
指定输出行,顾名思义就是指定输出前几行,其余记录不进行显示,老规矩,还是先看格式
格式:
select 查询内容 from 表名 where 条件 order by 字段名 limit 数字
当不使用limit字段时,默认输出所有符合条件的记录,而当使用该字段时,输入数字是几则显示几条记录。我们还是举例说明
例:
查询name中age不为空的字段并且对name由低到高进行排序显示前三条记录
select *from name where age is not null order by name asc limit 3
看结果
ok,下一个
9.4.4 聚合函数:
可以简单理解为四则运算,但一般常用的聚合函数很少用到乘除法则,因此这里只讲常用的聚合函数,讲解不到位还请读者谅解0..0
常用的聚合函数:
- sum() 求和
- avg() 求平均值
- max() 求最大值
- min() 求最小值
- count() 统计记录条数
格式:
select 聚合函数(字段名) from 表名
还是以上述name表为例,
简单举个例子:
计算所有学生年龄的和
select sum(agde) from name
计算所有学生年龄的平均值
select avg(age) from name
统计一共有多少条记录
select count(age) from name
统计最小的年龄
select min(age) from name
ok了,下一个
9.4.5 查询记录去重
顾名思义,就是去除重复字段,我们直接看格式
格式
select distinct 字段名 from 表名
例:
查询name中age不为空的字段并且对name由低到高进行排序并去除重复字段
select distinct age from name where age is not null
下一个
9.4.6 分组及分组后加条件
分组
对记录进行区分,通常用于统计过个字段人数使用
group by
格式:
select 字段 from 格式 group by 分组字段
直接举例,还是上个name表
对age进行分组,并显示名称
select name from name GROUP BY age
分组后加条件
having,使用格式如下select 字段 from 表名 group by 字段 having 条件
因为该命令不常用,因此这里只做了解,还请各位读者谅解,还是通过例题来简单了解一下分组后加条件,例题如下
有一表students,内容如下
例题:通过gender进行分组分别查询查询students表中stuid大于二十的男生人数
select count(stuid),gender from students where stuid>20 group by gender having gender="m"
我们来看结果
注:(分组后加条件是在分组后显示的结果进行进一步的条件筛选,若分组时结果没有条件,则会显示查询不到对应的字段或其他报错,因此在分组后查询过程中,建议先运行不分组后不加条件的代码,针对分组后不加条件的代码进行进一步的条件筛选!!!)
以上就是本期内容了,很多东西笔者因为篇幅原因还没讲到,还请各位见谅。如有错误,还请谅解.感谢各位观看!