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;
相关推荐
计算机毕设指导65 分钟前
基于 SpringBoot 的作业管理系统【附源码】
java·vue.js·spring boot·后端·mysql·spring·intellij-idea
The_Ticker41 分钟前
CFD平台如何接入实时行情源
java·大数据·数据库·人工智能·算法·区块链·软件工程
Elastic 中国社区官方博客1 小时前
Elasticsearch 开放推理 API 增加了对 IBM watsonx.ai Slate 嵌入模型的支持
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
企鹅侠客1 小时前
ETCD调优
数据库·etcd
Json_181790144801 小时前
电商拍立淘按图搜索API接口系列,文档说明参考
前端·数据库
煎饼小狗1 小时前
Redis五大基本类型——Zset有序集合命令详解(命令用法详解+思维导图详解)
数据库·redis·缓存
永乐春秋1 小时前
WEB-通用漏洞&SQL注入&CTF&二次&堆叠&DNS带外
数据库·sql
打鱼又晒网2 小时前
【MySQL】数据库精细化讲解:内置函数知识穿透与深度学习解析
数据库·mysql
大白要努力!2 小时前
android 使用SQLiteOpenHelper 如何优化数据库的性能
android·数据库·oracle
tatasix3 小时前
MySQL UPDATE语句执行链路解析
数据库·mysql