关于MySql数据库的详细学习

MySql学习


Mysql登陆

  1. mysql –u账户 –p密码

  2. mysql –hip –u账户 –p密码

mysql退出

​ exit 或 quit

SQL

  1. 什么是sql:定义了操作所有的关系数据库规则。

  2. SQL通用语法

​ 语句分号结束

​ 语句不区分大小写

​ 注释: – 注释内容

SQL分类

DDL :操作表和库

操作数据库:

1.C(Create):创建

创建数据库

Create database 名称

*判断是否存在此数据库并创建

create database if not exists 数据库名称;

创建数据库并制定字符集名称

create database 数据库名称 character set 字符集名;

:create database stu character set gbk;

查询

*查询所有数据库

show databases;

*查询某个数据库的字符集:查看某个数据库的创建语句

Show create database 数据库名称;

*查看正在被使用的数据库

Select database();

修改

*修改数据库的字符集

Alter database 数据库名称 character set 字符集命称;

删除

drop database 数据库名;

可先判断删除的是否存在

drop database if exists 数据库名称;

使用数据库

Use 数据库名称;

查看正在被使用的数据库

Select database();

操作表:
创建

复制表并新建

create table 表名 like 被复制表名;

语法:

Create table 表名(

列名1 数据类型1,

列名2 数据类型2,

​ …………

列名n 数据类型n);

列:

create table student(

id int,

name varchar(32),

age int,

score double(4,1),

birthday date,

insert_time timestamp);

常见数据类型
  1. int :整数类型:age int

  2. double :小数类型:score double(5,2)

  3. date:日期,只包含年月日:yyyy-MM-dd

  4. datetime:日期,包含年月日时分秒:yyyy-M-dd HH:mm:ss

  5. timestamp: 时间错类型包含年月 日时分秒:yyyy-MM- dd HH: mm:ss : 如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值

  6. varchar :字符串:name varchar(20):姓名最大20个字符

查询

查询某个数据库所有的表:show tables;

查询表结构:desc 表名;

查询某个表的字符集:Show create table 表名;

修改

修改表名:alter table 表名 rename to 新的表名;

修改表字符集:alter table 表名 character set 字符集名称;

添加一行:alter table 表名 add 列名 数据类型;

修改列的名称和类型 :alter table 表名 change 列名 新列名 新的数据类型;

修改列的类型:alter table 表名 modify 列名 新数据类型;

删除

删除表:drop table 表名;

先判断 : drop table if exists 表名;

删除列:alter table 表名 drop 列名;

DML:增删改表中的数据

添加数据

1.添加数据:insert into 表名(列名1,列名2,…列名n) values(值1,值2,…值n);

注意:1.列名和值要一一对应。

2.如果表名后,不定义列名,则默认给所有列添加:insert into表 名values(值1,值2,…值n);

3.出来数字类型,其他类型需要用引号(单双都行)

删除数据

2.删除数据:delete from 表名 while 条件;

注意:不加条件则删除表中所有记录,下面的方法效率高

删除表 然后创建一个一模一样的空表:truncate table 表名;

修改数据

3. 修改数据:update 表名 set 列名1=值1,列名2=值2,… whiel 条件;

注意:如果不加条件 所有记录都会被修改

DQL:查询表中的数据

查询表中所有的字段数据:Select * from 表名;

1.语法

Select

​ 字段列表

from

​ 表名列表

Where

​ 条件列表

Group by

​ 分组字段

Having

​ 分组后的条件

order

​ 排序

Limit

​ 分页限定

2.基础查询
  1. 多个字段查询:select 字段1,字段2,…form 表名;

注意:如果查询所有字段可以用*代替字段

  1. 去除重复:distinct

    列:select distinct 字段 from 表名;

3. 计算列

一般可以使用四则运算计算一些列的值

Ifnull(表达式1,表达式2):null参与的运算,计算结果都为null。

表达式1:那个字段需要判断是否为null

表达式2:如果该字段为null后的替换值

起别名:as 别名

注意:as也可以省略

4. 条件查询
  1. where字句后跟条件

  2. .>,<,<=,>=, =(不是==和java不一样),!=,<>(等效!=)

  3. Between…and(下方示例)

    列:查询年龄大于等于20小于等于30:student表 age值

    select * from student where age Between 20 and 30;

  4. IN (集合)

  5. Like(模糊查询)

​ _:任意单个字符(占位)

​ %:任意多个字符

列:查询第二个字是化的人

Select * from student where name like ‘_化’;

:查询姓马的有哪些:student表 name值

Select * from student where name like ‘%马%’;

  1. Is null(null很特殊,这个判断value值为null的)

  2. And 或 && ,or 或 || ,not 或 !

列:查询年龄大于等于20小于等于30:student表 age值

-》select * from student where age>=20 && age<=30;

select * from student where age>=20 and age<=30;

select * from student where age Between 20 and 30;

5.排序查询

语法:Order by 子句

​ Order by 排序字段1 排序方式1,排序字段2 排序方式2.。。。

Asc:升序,默认

Desc:降序

:student表math值english值

select * from student order by math asc,english asc;

聚合函数

:聚合函数计算排除了null)

1.count:计算个数

列:student表math值

select count (math) from student;

2.max:计算最大值

列:student表math值

select max (math) from student;

3.Min:计算最小值

列:student表math值

select min (math) from student;

4.Sum:计算和:同上

5.Avg:计算平均值

6.分组查询
语法:group by

:按照性别分组,分别查询男,女同学;数学平均分:student表aex值 math值

Select aex , avg (math) from student group by aex;

列:按照性别分组,分别查询男,女同学;数学平均分,人数 要求:分数低于70分的不参与分组,分组之后人数大于2:student表aex值 math值

语法:having

Select aex , avg (math),count(id) from student where mact>70 group by aex having count(id)>2;

注意:where分组之前限定且不能跟聚合函数,having在分组之后进行限定可以跟聚合函数

7.分页查询

语法:limit 开始的索引,每页查询的条数;

公式:开始的索引 = (当前页码 - 1) * 每页显示的条数

:没页三列 第一页:student

Select * from limit 0,3;

注意:分页操作是一个“方言“

约束

概叙:对表中的数据经行限定 保证数据正确性,有效项,完整性。

分类

1.主键约束:primary key(一直表只能有一个字段为主键:唯一且非空)

2.非空约束:not null(设置字段不能为空)

3.唯一约束:unique(值不能重复)

4.外键约束:foreign key

非空约束:not null

列:创建表时:create table stu(id int,name varchar(20) not null);

删除非空约束:ALTER TABLE stu MODIFY NAME VARCHAR(20);

列:创建表后,添加非空约束:

Alter table stu modify name varchar(20)not null;

唯一约束:unique

列:创建表时:create table stu(id int,name varchar(20) unique);

删除唯一约束:ALTER TABLE stu DROP INDEX phone_ number ;

创建表后添加:ALTER TABLE stu MODIFY phone_ number VARCHAR(20) UNIQUE;

主键约束:primary key

列:创建表时:给id加主键约束:stu:表名,id:位字段

create table stu(id int primary key,name varchar(20));

删除主键约束: alter table stu drop primary key;

创建表后添加:ALTER TABLE stu ADD PRIMARY KEY(id);

自动增长:Auto_increment

列:创建表时:给id加主键约束且完成主键自增长:stub表名,id位字段

create table stu(id int primary key Auto_increment,name varchar(20));

删除:alter table stu modify id int;

创建表后添加:alter table stu modify id int auto_increment;

:自动增长一般和主键一起使用;

外键约束:foreign key

语法:创建时:create table 表名(

外键列类型 外键列名称

Constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)–外键名称随意

);

列:创建表时添加外键约束:

删除外键约束:alter table 表名 drop foreign key 外键名称;

创建表后添加:alter table 表名 add Constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)

级联更新和删除操作(上级表改动 下级也更新)

**级联更新:**on update cascade

**级联删除:**on delete cascade --(挺危险)

**列:**alter table 表名 add Constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)on update cascade on delete cascade;

数据库的设计

多表之间的关系

1.一对一:一般不实用

在这里插入图片描述

2.一对多(多对一)

clip_image004

3.多对多

clip_image006

案列

在这里插入图片描述

范式

概念

在这里插入图片描述

分类:

1.第一范式(1NF) :

每一列都是不可分割的原子数据项

问题

在这里插入图片描述

2.第二范域(2NF) :

在1NF的基础上,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分面数依赖)

几个概念:

1.函数依赖: A–>B ,如果通过A性(属性组)的值,可以确定唯-一B出性的值。 则称B依赖于A

例如:学号–>姓名。(学号, 课程名称) --> 分数

2.完全函数依赖: A–>B,如果A是一 个时性组,则B麟性值行确定要依赖于A:的性组中所有的属性值。

例如: (学号, 课程名称) --> 分数

3.部分函数依赖: A–>B,如果A是一 个属性组,则B属性值行确定只要依赖于A属性组中某一些值即可。

例如: (学号, 课程名称) --> 姓名

4.传递函数依赖:A–>B, B – >C .如果通过A属性(属性组)的值,可以确定B唯一属性的值, 在通过B的属性(属性组)值可以确定唯一C。则称C传递函数依赖于A

例如:学号–>系名,系名–>系主任

5.码:如果在一-张表中,一个属性或属性组,被其他所有属性所完全依赖,则称这个属性(属性组)为该表的码

例如:该表中码为: (学号, 课程名称)

主属性:码属性组中的所有属性
非主属性:除码属性组的居性

在这里插入图片描述

3.第三范式(3NF) :

在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)

解决了问题

在这里插入图片描述

数据库备份和还原

备份: mysqldump -u用户名 -p密码 数据库名称 > 保存的路径

还原:

1.登录mysql数据库

2.创建数据库

3.使用数据库

4.执行文件: source 文件路径

多表查询

笛卡儿积

有两个集合A,B . 取这两个集合的所有组成情况。
要完成多表查询,需要消除无用的数据.

1.内连接查询
隐式内连接

语法:select 字段列表 from 表名1,….表名n where 条件限定

:查询所有员工信息和对应的部门信息

SELECT * FROM emp,dept WHERE emp.‘dept_id’=dept.‘id’;

查询员工表的名称,性别。部门表的名称

SELECT emp.name,emp.gender,dept.name FROM emp,dept WHERE emp.‘dept_id’=dept.‘id’;

起别名

在这里插入图片描述

显式内连接

语法: select 字段列表from表名1 [inner] join 表名2 on 条件限定;

[ ]表示可写可不写

在这里插入图片描述

在这里插入图片描述

2.外连接查询
左外连接

语法: select 字段列表 from 表1 left [outer] join 表2 on 条件;

在这里插入图片描述

右外连接

语法: select 字段列表 from 表1 right [outer] join 表2 on 条件;

在这里插入图片描述

3.子查询
概念

​ 查询中嵌套查询,称嵌套查询为子查询

子查询的结果是单行单列的:

:查询工资数值最高的员工信息(表emp 列 salary)

Select * from empwhere emp.salary = (select max(salary) from emp);

在这里插入图片描述

子查询(引用的那段)的结果是多行单列的:

在这里插入图片描述

子查询的结果是多行多列的:

在这里插入图片描述

事物

1.事务的基本介绍

1.概念:

2.操作:

1.开启事务:start transaction

2.回滚:rollback

在这里插入图片描述

3.提交:commit

\4. MySQL数据库中事务默认自动提交

在这里插入图片描述

**2.**事务的四大特征

1.原子性:是不可分割的最小单位,要么同时成功,要么同时失败。

2.持久性:当事务提交或回滚后,数据库会持久化的保存数据。

3,多个事务之间,相互独立。

4.一致性:事务操作前后,数据总量不变。

3.事务的隔离级别(了解)

*概念:多个事务之间隔离的,相互独立的,如果多个事务操作同一批数据,则会引发一些问题。

1.脏读:一个事务,读取到另一个事务在没有提交的数据。

2.不可重复读:在同一事物中,两次读取的数据不一样。

3.幻读:一个事务操作(DML)数据表中所有的记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改。

隔离级别
在这里插入图片描述

数据库设置隔离级别

在这里插入图片描述

DCL:管理用户,授权(数据控制语言) —一般用不到,不是很重要就不整了

DBA*:数据库管理员**

DCL*:管理用户,授权**

**1.**管理用户

1.添加用户:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wHHVSzf9-1598167768482)(G:\图片素材\java\clip_image047.jpg)]

2.删除用户:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zFfmowl2-1598167768482)(G:\图片素材\java\clip_image049.jpg)]

3.修改用户密码:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-caPuUPfU-1598167768483)(G:\图片素材\java\clip_image051.jpg)]

简化版:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HvgeuSEF-1598167768483)(G:\图片素材\java\clip_image053.jpg)]

忘记了root用户密码怎么办

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lZnJVOkk-1598167768484)(G:\图片素材\java\clip_image055.jpg)]

4.查询用户:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o97kOFpv-1598167768485)(G:\图片素材\java\clip_image057.jpg)]

3. 授权

1. 查询权限:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dRZ4Ky9n-1598167768485)(G:\图片素材\java\clip_image059.jpg)]

2. 授予权限:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EI8kV8ZB-1598167768486)(G:\图片素材\java\clip_image061.jpg)]

3. 撤销权限:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7kmYPt9i-1598167768486)(G:\图片素材\java\clip_image063.jpg)]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值