Day3 12.14 MySQL学习笔记

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(162020305,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多对多

额外创建一张关系表——在关系表中定义两个外键,分别与两个数据表的主键进行关联。

  • 16
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值