背景:MySQL数据作为一款开源免费,小巧,功能齐全的数据库,可在Windows和Linux系统上运行,操作方便,其中有许多优势,方便我们存储,管理数据。属于关系型数据库,那我们一起学习了解他的使用吧!
目录
1.什么是数据库
2.为什么学习数据库
3.数据库的结构
4.SQL语句分类
5.DDL语句操作数据库(创建,删除,修改,数据库,表)
6.数据库表的字段类型
7.数据库表的约束
8.数据库DML(增删改)和DQL(查询):
1.什么是数据库:长期存放在计算机内,有组织,可共享的大量数据的集合数据"仓库"。英文名称DataBase,简称DB。
2.为什么学习数据库:
1.保存数据:保证数据的读取,及其完整性,安全性
2.数据库结构化,其共享性,独立性,安全性是我们更加方便管理使用数据。
3.数据库的结构:
数据库(Database):以文件形式将数据存放在磁盘。
数据表(Table):一组数据记录组成
字段(Filed):也称域,表中的每一列称为一个字段
记录:表中的每一行称为一个记录,它由若干个字段组成,实体
索引:索引实际上是一种特殊类型的表,其中含有关键字段的值和指向实际记录位置的指针,可提高访问数据库的效率。
SQL语句:结构化查询语句命令。
4.SQL语句分类:
|-------------|------------------------|-----------------------|
| 名词 | 解释 | 命令 |
| DDL(数据定义语言) | 定义和管理数据库对象,如数据库,数据表等 | create,drop,alter |
| DML(数据操作语言) | 用于操作数据库对象中包含的数据 | insert,update,delete |
| DQL(数据查询语言) | 用于查询数据库数据 | select |
| DCL(数据控制语言) | 用来管理数据库的语言,包括管理权限及数据更改 | grant,commit,rollback |
5.常用的数据库表的字段类型:
在创建表时,我们需要给每个字段确定类型,下面是常用的数据库类型
字符串类型:
|------------|----------------------------|------|
| 类型 | 说明 | 取值范围 |
| char(M) | 固定长字符串,检索快但费空间 0<=M<=255 | M字符 |
| varchar(M) | 可变字符串 0<=M<=65535 | 可变长度 |
| tinytext | 微型文本串 | |
| text | 文本串(4个G左右大小) | |
数值类型:
|------------|-----------|--------------------------------|---------------|
| 类型 | 说明 | 取值范围 | 存储需求 |
| tinyint | 非常小的数据 | 0-127 | 1字节 |
| int | 标准整数 | 0-2^31-1 | 4字节 |
| bigint | 较大的整数 | 0-2^64-1 | 8字节 |
| Decimal(钱) | 字符串形式的浮点数 | decimal(m,d) m:小数点前位数 d:小数点后位数 | m个字节,适用于钱这种需求 |
日期和时间类型:
|----------|-------------------|----------------|
| 类型 | 说明 | 存储需求 |
| dateTime | YY-MM-DD hh:mm:ss | 年月日,时分秒的类型都可以用 |
6.DDL语句操作数据库(库的相关命令):
注意:数据库中大小写不敏感,但每句命令以分号(英文)结尾标识结束,每个关键词中间通过空格分割。
查看,创建,删除数据库,表。
1.查看所有的数据库:
show databse; --查看所有数据库
2.创建数据库:
create databse 数据库名; --- 创建数据库
3.删除数据库:
drop database 数据库名; -- 删除数据库
4.使用库(切换数据库):
use 数据库名; -- 使用数据库
5.查看数据库中所有的表:
show tables; -- 查看某个数据库中所有的表
6.创建表:
-- 创建表
-- create TABLE 表名(
-- 字段名 类型 属性,
-- 字段名 类型 属性,
-- ...
-- 字段名 类型 属性
-- );
7.查看表中的字段:
方式一:desc 表名;
方式二:show create table 表名;
修改和删除 数据库表结构:
语法:alter table 表名 关键词 数据 ;
关键词:rename, as, add ,drop ,modify , change
1.修改表名:
alter table 旧表名 rename as 新表名;
2.添加字段:
alter table 表名 add 新字段名 类型 属性;
-- 语句后可添加comment关键字,表示备注或说明;
alter table 表名 add 新字段名 类型 属性 comment "备注";
3.删除字段(慎用,删除后,表中该列的数据会丢失)
alter table 表名 drop 要删除的字段名;
4.修改字段 :modify,change
方式一:modify (只能修改数据类型 和 属性)
alter table 表名 modify 字段名 要修改的类型 要修改的属性;
方式二;change 可以修改数据类型 属性 字段名
alter table 表名 change 旧字段名 新字段名 要修改的类型 要修改的属性;
5.删除表
drop table 表名;
7.数据库表的约束:
1.非空约束(not null):表示该字段在添加数据时,不能为空
create table tb2(
username VARCHAR(10) not NULL ,-- 非空约束,添加数据时,username不能为空
userage int
);
2.唯一约束(unique):表示该字段的值不能重复,必须唯一
-- 行级约束:表示只给某个字段添加约束,每列的值不能重复,必须唯一
create table tb4(
username VARCHAR(10) UNIQUE, -- 唯一约束,行级唯一约束
userage int UNIQUE -- 每个字段都是各自的唯一约束
);
-- 表级约束,,表示给多个字段同时添加,但只会约束 添加约束 的所有字段值不能同时重复,
create table tb5(
username VARCHAR(10),
userage int,
UNIQUE(username,userage) -- 表级约束,联合唯一约束,可约束多个
);
-- 字段是有关联的,只有当约束的条件完全一样,才会起约束作用
3.主键约束(primary key):
-- 每张表必须有且只有一个表
-- 主键的值是唯一的
-- 主键是不能为null的,
-- 一般主键的建立方式
-- 自增:auto_increment,从主键最大的值开始自增
create table tb9(
tid int PRIMARY key auto_increment,
username VARCHAR(10),
userage int
);
6.外键约束(foreign key ):
-- 外键约束
-- 外键的值是可以重复的
-- 外键的值可以为null
-- 外键必须要写 父表中有的数据
-- 父表中的关联字段必须是一个具有唯一性的数据
-- 父表的字段名和从表的字段名不一定要相同,但是数据量类型必须一致
-- 一个表中可以有多个外键,也可以有多个外键约束,但只能有一个主键
create table b(
bid int PRIMARY key auto_increment,
bname VARCHAR(10),
aid int,
FOREIGN key(aid) REFERENCES a(aid)
);
8.数据库DML(增删改)和DQL(查询):
数据的添加:将数据添加至表。
-- 一次添加一条数据 语法:
insert into 表名(字段名,字段名,...) values(值,值,...);
-- 一次添加多条数据 语法:
insert into 表名(字段名,字段名,...) values(值,值,...),(值,值....),(值,值....)...;
数据的修改:修改表中的字段值
-- 修改 语法:
-- update 表名 set 字段名=值,字段名=值,....,字段名=值 where 子句条件
-- 例如:修改student表中sname为齐同学的生日
update stu1 set birthday='1678-1-1 12:31:15' WHERE sname='齐同学';
数据的删除:将表中符合条件的数据从表中删除
-- 方式一:
-- 删除 :仅仅删除数据
-- delete from 表名 [where 子句]
DELETe from newstu; -- 会删除表中所有数据
-- 例子:删除birthday 是null的数据
delete from stu1 where birthday is null;
--方式二:
-- 清空表,截断:会将自增主键变为 1,从1开始再次自增;
-- truncate 表名
TRUNCATE stu1;
数据的查询(单表查询):
-- 从表中获取部分数据
-- select 字段名,字段名 from student
-- 全字段查询
-- 方式一:
SELECT 字段名..(所有字段名) from student;
-- 方式二:
select * from student; -- 先查字段名,再查,不利于SQL优化,效率低
-- 可通过as 关键字给查询到每个字段的别名
select sname as '学生姓名',ssex '学生性别',birthday 生日 from student;
-- 带条件查询 where 子句
-- 查询sid为5的学生信息
SELECT * from student where sid=5;
distinct :去重(可对重复的数据去重)
-- 所有字段的数据要一致才会去重
SELECT distinct sname,ssex FROM student;
in关键字:表示在一些特定范围内就符合条件
select * from student where sid in(3,5,7,9);
like关键字:模糊查询
-- 模糊符号 %任意多的任意字符
-- _ :一个任意字符
-- 查询sname值中有张的学生信息
select * from student where Sname like '%张%';
null值得查询: 注意:null是一种类型
-- 查询生日是null的
select * from student where birthday is null;
-- 查询生日不是null的
select * from student where birthday is not null;
聚合函数:
-- count():统计个数
-- max():统计最大数
-- min():统计最小值
-- sum():总和
-- avg():平均值
-- 查询学生表数据总数
SELECT count(*) from student; -- 推荐
-- sum,avg,min,max 数值类型
select sum(score) from sc; -- 成绩总和
SELECT avg(score) from sc; -- 成绩平均值
select max(score) from sc; -- 成绩最大值
select min(score) from sc; -- 成绩最小值
group by :分组,将表中某个字段按照唯一值分组,
having:类似where条件,但判断的是聚合之后的数据
-- 统计成绩表 统计每个同学的总分和平均分
select sid 学号,sum(score) 总分,avg(score) 平均分 from sc group by sid;
-- 查询出平均分不及格的sid 平均分
select sid 学号,sum(score) 总分,avg(score) 平均分 from sc
group by sid HAVING avg(score)<60;
order by :排序
-- DESC:降序 必须写
-- asc :升序 或者不写(默认的)
select * from student ORDER BY classid desc;
limit 分页:语法:-- limit 分页 0 开始 (页码-1)*步长,步长
-- limit 分页 0 开始 (页码-1)*步长,步长
-- SELECT * from student LIMIT 位置,步长;
select * from student limit 3,3;