Day3 MySQL学习笔记
主键自动增长
当数据表中没有合适的列作为主键时,定义与记录本身无关的列(ID),无具体含义,主要用于标识一条记录。MySQL中可以将此列定义为int,同时设置自动增长。当向数据表中新增一条记录时,无需提供ID的值,他会自动生成。
定义主键自动增长
-
定义int类型字段自动增长:auto_increment
creat table types( ID int primary key auto_increment, name varchar(20) not null );
自动增长从1开始,随者记录添加+1.当我们把某条记录删除后再添加数据,自动增长的数据不会重复生成(只保证唯一性,不保证联系性)
联合主键
将数据表中的多列组合在一起设置为表的主键
creat table books(
name varchar(20) not null,
author varchar(10),
ID int,
primary key(name,ID)
);
4.DML 数据操纵语言
用于完成对数据表中数据的插入,删除,修改操作
4.1插入数据
insert into <tableName> (columnName, column2Name,,,) values(value1,value2,,,,);
e.g.
insert into student (ID,name,age,gender,tel) values(2020305,Amy,16,female,07528833717);
#values的顺序不需要和数据表中一致,但是必须与这行命令中的columnname对应。
insert into student (age,ID,name,gender,tel) values(16,2020305,Amy,female,07528833717);
#向表中所有列添加数据时,columnname可以省略,单数values中顺序要和数据表定义字段保持一致
insert into student values(2020305,Amy,16,female,07528833717);
4.2删除数据
从表中删除满足特定条件的所有记录
delete from <tableName> [where conditions];
delete from student where ID='2020305';
delete from student where age>18;
#没有where,表示删除数据表中所有记录
delete from student;
4.3修改数据
对数据表中已经添加的记录修改
update <tableName> set columnName=value[where condition];
update student set name='Anna' where ID='2020305';
#同时修改多个
update student set name='Tom',gender='male' where ID='2020305';
#修改表中所有行
update student set name='Tom';
5.DQL数据查询语言
从数据表中提取满足添加的记录
- 单表查询
- 多表联合查询
5.1查询基础语法
#查询记录的某些列
select [columnName1,columnName2,,,]from <tableName>;
#查询记录的所有列
select * from <tableName>;
5.2where子句
筛选满足特定条件的数据进行操作
select * from <tableName> where [condition];
=
!=或<> 是 不等于
>
<
>=
<=
between x and y 区间查询
多条件查询
可以将多个添加通过逻辑运算(and,or,not)连接,通过多个条件筛选数据
5.3LIKE 子句
在where子句的条件中使用like关键字实现模糊查询
select * from <tableName> where columnName like 'reg';
reg:
- %是任意多个字符【%o%包含字母o】
- _是任意一个字符【 _o%第二个字母是o】
5.4对查询结果处理
设置查询的列
声明显示查询结果的指定列
select columnName1,columnName2,,, from <tableName> where [condition];
计算列
对从数据表中查询的记录的列,经过一定计算后显示出来
#出生年份=当前年份-年龄
select stu_name,2023-stu_age from student where[condition];
字段别名
给查询结果的列取一个语义性更强的别名
select columnName as NewDefinedName from <tableName> where[condition];
select stu_name,2023-stu_age as 出生年份 from student where[condition];
消除重复行
从查询表结果中将重复记录消除
#消除重复行
select distinct stu_age from student;
5.5order by 排序
将查询到的满足条件的记录按照指定的列的值升序/降序排列
select selectedColumnName from tableName where conditions order by columnName asc/desc;
- asc 按照指定列升序
- desc按照指定列降序
#单字段排序
select * from student where stu_age>15 order by stu_gender desc;
#多字段排序:先满足第一个,当第一个列的值相同时按照第二个列的规则排序
select * from student where stu_age>15 order by stu_gender asc,stu_age desc;
5.6聚合函数
对查询的记录的列进行计算的函数
- count 统计函数: 统计满足条件的指定字段值的个数(记录数)
select count(columnName) from <tableName> where[condition];
- max() 获取最大值: 获取满足条件记录中,指定字段中的最大值
select max(columnName) from <tableName> where[condition];
- min()获取最小值
- sum() 求和:查询满足条件的记录中,指定列中所有值的总和
select sum(columnName) from <tableName> where[condition];
- avg() 求平均:查询满足条件的记录中,计算指定列中所有值的平均值
5.7日期函数与字符串函数
日期函数
向日期类型的列添加数据时,可以通过字符串类型复制(yyyy-mm-dd hh:mm:ss)
如果想要获取当前系统时间添加到日期类型的列,可以使用now()或者sysdate()
字符串函数
通过SQL指令对字符串进行处理
- concat()合并,拼接多列
select concat(columnName1,"--",columnName2) from tableName;
- upper(column)将字段的值转换成大写
select upper(columnName) from tableName;
- lower(column)将指定字段的值变成小写
- substring(column,start,len) 从指定列中截取部分字符显示,从【start】开始显示len个字符。start从1开始,不像array那样从0开始排序。
5.8分组查询
将数据表中的记录按照指定的类进行分组
select 分组字段/聚合函数 from tableName where[condition] group by 分组列名;
示例
#先对查询的学生信息按照性别分组,在分别对每组学生进行聚合函数的计算
select stu_gender,count(stu_ID) from student group by stu_gender;
#按年龄分组,分别统计每组人数,再筛选出当前组人数>1的组显示出来
select stu_age,count(stu_ID)
from student
where
group by stu_age
having count(stu_num)>1
order by stu_age;
#查询性别是男的学生,按年龄分组,分别统计每组的人数,再筛选出当前组人数>1的组显示出来
select stu_age,count(stu_ID)
from student
where stu_gender="male"
group by stu_age
having count(stu_num)>1
order by stu_age;
5.9分页查询-limit
将数据分页显示,增加可读性和体验性
select...
from...
where...
limit param1,param2
- param1: int, 表示获取查询语句的结果中的第一条数据的索引(索引从0开始)
- param2: int, 表示获取查询记录的条数(如果剩余数据条数<param2, 则返回剩下所有记录。
6.数据表的关联关系
6.1介绍
MySQL是一个关系型数据库
- 一对一
- 一对多
- 多对一
- 多对多
6.2 一对一关联
主键关联——两张数据表中主键相同的数据为相互对应的数据
唯一外键——在任意一张表中添加一个字段添加外键约束与另一张表的主键关联,并将外键列添加唯一约束。
6.3一对多与多对一
在多的一段添加外键,与一的一端主键进行关联
6.4多对多
额外创建一张关系表——在关系表中定义两个外键,分别与两个数据表的主键进行关联。