MySQL数据库(基础知识,约束,增删改查命令)

背景: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;
相关推荐
苹果醋330 分钟前
2020重新出发,MySql基础,MySql表数据操作
java·运维·spring boot·mysql·nginx
小蜗牛慢慢爬行32 分钟前
如何在 Spring Boot 微服务中设置和管理多个数据库
java·数据库·spring boot·后端·微服务·架构·hibernate
hanbarger35 分钟前
nosql,Redis,minio,elasticsearch
数据库·redis·nosql
微服务 spring cloud1 小时前
配置PostgreSQL用于集成测试的步骤
数据库·postgresql·集成测试
先睡1 小时前
MySQL的架构设计和设计模式
数据库·mysql·设计模式
弗罗里达老大爷1 小时前
Redis
数据库·redis·缓存
仰望大佬0072 小时前
Avalonia实例实战五:Carousel自动轮播图
数据库·microsoft·c#
学不透java不改名2 小时前
sqlalchemy连接dm8 get_columns BIGINT VARCHAR字段不显示
数据库
一只路过的猫咪2 小时前
thinkphp6使用MongoDB多个数据,聚合查询的坑
数据库·mongodb