数据库

数据库

1.MySQL安装,卸载

1.数据库的基本概念

  1. 英文:DataBase ,简称 DB
  2. 含义:用于存储和管理数据的仓库。
  3. 特点:持久化存储数据; 方便存储和管理数据;使用统一方式操作数据库(SQL);

2.安装MYSQL

1.点击https://dev.mysql.com/downloads/mysql/
在这里插入图片描述在这里插入图片描述在这里插入图片描述

出现以上界面后,选择一个下载,之后按照提示一步步安装。最后在高级设置里配置环境变量。

在这里插入图片描述

在这里插入图片描述在这里插入图片描述

把存储MYSQL的路径输入,点击确定即可。然后打开命令行,输入mysql -uroot -p,再输入你设置的密码,出现以下界面,说明安装成功。
在这里插入图片描述

3.MySQL的卸载

  1. 卸载MySQL
  2. 删除C:/ProgramData目录下的MySQL文件夹。(注:ProgramData是隐藏文件夹,需在搜索框中搜索)

4.MySQL服务的启动

1.使用管理员打开cmd

  • net start mysql 打开MySQL服务
  • net stop mysql 关闭MySQL服务

5.MySQL的登陆和退出

​ 登录: 打开命令行,输入mysql -uroot -p 密码
​ 退出:1.exit 2.quit

MySQL结构

在这里插入图片描述

2.SQL

1.SQL含义:定义了操作所有关系型数据库的规则。

2.SQL通用语法
①可以单行或多行书写,以分号结尾。
②可使用空格和缩进来增强语句可读性
③语句不区分大小写,关键字建议用大写。
④注释
1.单行注释 - - 注释内容 或 #注释内容
2.多行注释 /* 注释 */

SQL分类
1.DDl (操作数据库,表)
2.DML (增删改表中的数据)
3.DQL (查询表中的数据)
4.DCL (授权)
在这里插入图片描述
DDL :操作数据库,表

3.DDL (操作数据库,表)

1.操作数据库

①Create 创建

  • 创建数据库 create database 数据库名称;

  • 判断数据库是否存在,并创建 create database if not exists 名称;

  • 创建数据库,并指定字符集(jbk) create database 名称 character set 字符集

②Retrieve 查询

  • 查询所有数据库的名称 show databases;

  • 查询某个数据库的创建语句(如utf8,jbk) show create database;

③Update 修改

  • 修改数据库的字符集 alter database 数据库名称 character set 字符集名称;

④Delete 删除

  • 删除数据库 drop databases 数据库名称;

  • 判断数据库是否存在,存在再删除 drop database if exists 数据库名称;

⑤使用数据库

  • 查询正在使用的数据库名称 selete database();
  • 使用数据库 use 数据库名称;

2.操作表

①Create 创建

创建一个表

create  table 表名称 (
    列名1  数据类型1,
    列名2  数据类型2...
    列名n 数据类型n);
    
    **数据类型**
    1.int  整数类型
    *age  int
    2.double 小数类型
    *score  double525代表几位数,2代表几位小数
    3.data 日期  只包含年月日
    4.datatime 日期 ,包含年月日,时分秒
    5.timestamp 时间错类型 包含年月日,时分秒 (如果不给这个字段赋值,默认使用当前系统时间,来自动赋值。
    6.varchar  字符串
    *name  varchar(2020代表字符数

文章末尾附有数据类型表格
创建表实例:

  create table student( 
                      id int,
                      name varchar(32),
                      age int,
                      score double(4,1),
                      birthday date,
                      inserttime timestamp);

在这里插入图片描述

复制表:create table 表名 like 被复制的表名;


②Retrieve 查询

  • 查询某个数据库的所有表名称 show tables;
  • 查询表结构 desc 表名称

③Update 修改

  • 修改表名 alter table 表名 rename to 新表名;

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

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

  • 修改列名称 ,类型

  • alter table 表名 change 列名 新列名 新数据类型;

  • alter table 表名 modifi 列名 新数据类型;

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

④Delete 删除

  • drop table 表名;
  • drop table if exists 表名;

4.DMl 增删改表中数据

1.添加数据
  • insert into 表名 (列名1,列名2…,列名n) values(值1,值2,值3…,值n);
    注意:
    1.列名和值要一一对应
    2.如果不定义列名,则默认给所有列添加值
    insert into 表名 values (值1,值2,值3…,值n);
    3.除了数字类型,其它类型的值都需要用引号括起来
2.删除数据
  • delete from 表名 where 条件;
    注意:
    1.如果不加条件,则删除表中所有数据
    2.删除表中所有数据 truncate table 表名; – 删除表,再创建一个新表
3.修改数据
  • updata 表名 set 列名 1=值1,列名2=值2…,where 条件;
    注意: 如果不加条件,则会将表中数据全部修改。

数据类型
在这里插入图片描述

5.DQL(查询表中数据)

1.查询

1.通用查询

selete 字段列表 from 表名列表 where 条件 group by 分组字段 having 分组之后的条件 order by 排序 limit 分页限定;

2.基础查询

​ ①多个字段的查询
​ select 列名1,列名2… from 表名;
​ 注意:如果查询所有字段,可以用*来代替列表名。
​ ②去除重复
​ select distinct 列名1,列名2… from 表名;
​ ③计算列
​ select 列名1,列名2(数字类型),列名3(数字类型),列名2+列名3 from 表名;
​ 如果数字类型中出现null时,只需:
​ SELECT NAME,math,english,math+ IFNULL(english,0) FROM student3;
​ ④起别名
​ select 列名1 as 别名 ,列名2 as 别名 … from 表名;

3.条件查询

①where 字句后跟条件
②运算符

  • <,>,<=,>=,=,<>
    示例: SELECT * FROM student3 WHERE age >20;

  • between … and
    示例: SELECT * FROM student3 WHERE age BETWEEN 20 AND 30;

  • in(集合)
    示例:SELECT * FROM student3 WHERE age IN (18,22,25);

  • like :模糊查询
    占位符: ——:单个任意字符
    %:多个任意字符
    示例: – 查询姓名中包含马的人 SELECT * FROM student3 WHERE NAME LIKE ‘%马%’;

  • is null , is not null
    示例: SELECT * FROM student3 WHERE english IS NOT NULL;

  • and ,&&
    示例:SELECT * FROM student3 WHERE age >=20 && age <=30;
    SELECT * FROM student3 WHERE age >=20 AND age <=30;

  • or ,||
    示例: SELECT * FROM student3 WHERE age =18 OR age =22 OR age =25;

  • not , !

    示例:SELECT * FROM student3 WHERE age !=55;

    4.高级查询

①排序查询

  • order by 排序字段1 排序方式1, 排序字段2 排序方式2…;

  • 排序方式

    1. ASC:升序,默认的

    2. DESC:降序

②聚合函数:将一列数据作为一个整体,进行纵向计算。

  1. count 计算个数

  2. max 计算最大值

  3. min 计算最小值

  4. sum 计算和

  5. avg 计算平均值

注意:聚合函数的计算,会排除null值。

③分组查询

  • order by 分组字段
    注意 :

  • 分组之后查询的字段:分组字段,聚合函数
    SELECT sex,AVG(math) FROM student3 GROUP BY sex;

  • where 和 having 的区别?

    1. where在分组之前进行限定,如果不满足条件,则不参与分组。having 在分组之后进行限定,如果不满足条件,则不会被查询出来。
    2. where 后不可以跟聚合函数,而having可以。
④分页查询
   1. limit  开始的索引,每页查询的条数;
          2. 公式: 开始的索引=(当前页码-1)*每页显示的条数

约束

  • 含义:对表中数据进行限定,保证数据的正确性,有效性和完整性。

  • 分类:

    1. 主键约束:primary key

    2. 非空约束:not null

    3. 唯一约束:unique

    4. 外键约束:foreign key

非空约束
  • 含义:某一列的值不能为null

  • 创建表时添加约束

      CREATE TABLE stu (
                           id INT, 
                           NAME VARCHAR(20)  NOT NULL  -- name为非空
                           );
    
  • 创建表后添加非空约束

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

     ALTER TABLE stu MODIFY NAME VARCHAR(20);
    
唯一约束
  • 含义:某一列的值不能重复

  • 唯一约束可以有null值,但只能有一个

  • 创建表时添加唯一约束

       CREATE TABLE stu (id INT ,
                      phone_number VARCHAR(20) UNIQUE  -- 唯一约束
                      );
    
  • 删除唯一约束

    ALTER TABLE stu DROP INDEX phone_number; 
    
  • 创建表后添加唯一约束

    ALTER TABLE stu MODIFY phone_number VARCHAR(20) UNIQUE;
    
主键约束
  • 含义:非空且唯一,主键就是表中记录的唯一标识(如 id,身份证号)

  • 一张表中只能有一列为主键

  • 创建表时添加主键约束

    CREATE TABLE stu (id INT PRIMARY KEY, -- 主键约束
                      NAME VARCHAR(20)
                      );
    
  • 删除主键

    ALTER TABLE stu DROP PRIMARY KEY;
    
  • 创建表后添加主键约束

    ALTER TABLE stu MODIFY id INT PRIMARY KEY;
    
自动增长
  • 概念:如果某一列是数值类型的,使用 auto_increment 关键字 可以使值自动增长。一般配合 int 类型的主键约束来使用。

  • 创建表时添加主键约束,并完成主键自动增长

    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
外键约束
  • 让两个表产生关系,从而保证数据的正确性。

  • 创建表时,添加外键

    create table stu (
                   .......
                   外键列,
                   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
  • 设置级联删除

    alter table 表名  add   constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称) on delete cascade

6.数据库的设计

1.多表之间的关系

①分类

  • 一对一

  • 一对多(多对一)
    示例:部门——员工

  • 多对多
    示例:学生——课程

②实现关系

  • 一对多实现方式:在多的一方建立外键,指向一的一方的主键

  • 多对多的实现方式:需要借助第三张中间表。中间表至少包含两个字段,这两个字段作为第三张表的外键,分别指向两张表的主键。
    第三张表如图所示
    在这里插入图片描述

  • 一对一实现方式:可以在任意一方添加唯一外键指向另一方的主键。

    2.数据库设计范式

    ①概念:设计数据库时,需要遵循的一些规范。(要遵循后边的范式,必须先遵循前边的范式)
    ②分类:

    • 第一范式(1NF):每一列都是不可分割的原子数据项

    • 第二范式(2NF):在1NF的基础上,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖)

    • 第三范式(3NF):在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)

      几个概念

      • 函数依赖:A–>B,如果通过A属性(属性组)的值,可以确定唯一B属性的值。则称B依赖于A。
        例如:学号–>姓名, 学号,课程名称–>成绩
      • 完全函数依赖:A–>B,如果A是一个属性组,则B属性值的确定需要依赖于A属性组中的所有值。
      • 部分函数依赖:A–>B,如果A是一个属性组,则B属性值的确定只需要依赖于A属性组中的部分值。
      • 传递函数依赖:A–>B,B–>C,如果通过A属性(属性组)的值可以确定唯一B属性的值,再通过B属性(属性组)确定唯一C属性的值,则称C传递函数依赖于A。
      • 码:如果在一张表中,一个属性(属性组)被其它所属性(属性组)所完全依赖,则称这个属性(属性组)为该表的码。
      • 主属性:码属性组中的所有属性
      • 非主属性:除码属性组中的所有属性

3.数据库的备份和还原

1.命令行
备份语法:mysqldump -u用户名 -p密码 数据库名称 > 保存的路径
还原:
1.登录数据库
2.创建数据库
3.使用数据库
4.执行文件 语法: source 文件路径
2.图形化工具
https://b23.tv/obWltk,到此网址自行查看。

7.多表查询

笛卡尔积
概念:存在两个集合A和B,取这两个集合的所有组成情况。注:要完成多表查询,需删除无用的数据

1.内连接查询

①隐式内连接:使用where条件消除无用数据

select  字段列表 from1,表2 where  条件;

②显示内链接

select 字段列表  form 表名1 inner join 表名2  on 条件;(inner可省略)

2.外连接查询

①左外连接:查询左边所有数据以及交集部分。 (交集由on 后边的条件决定)

select  字段列表  from1  left  outer  join2 on  条件;   (outer 可省略)

②右外连接:查询右边所有数据以及交集部分。 (交集由on 后边的条件决定)

select  字段列表  from1  right  outer  join2 on  条件;   (outer 可省略)

3.子查询

①概念:查询中嵌套查询,称嵌套查询为子查询
②子查询的不同情况

  1. 子查询的结果是单行单列的
    子查询可以作为条件,使用运算符去判断。 运算符:>,>=,<,<=,= …

    select * from emp where emp.salary <(select avg(salary) from emp);
    
  2. 子查询的结果是多行单列的
    子查询可以作为条件,使用运算符去判断。 运算符:in ;

  3. 子查询的结果是多行多列的
    子查询可以作为一张虚拟表参与查询。

    select * from dept as t1,(select * from where emp.age>18as t2 where t1.id=t2.dept_id;
    

8.事务

1.事务的基本介绍
①概念:如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败。
②操作:

  • 开启事务:strat transaction;

  • 回滚: rollback;

  • 提交:commmit;

③MySQL数据库中事务默认自动提交

  1. 事务提交的两种方式

    • 自动提交:一条DML(增删改)语句会自动提交一次事务。

    • 手动提交:需先开启事务,再提交。(如果没有提交,则数据不会永久性保存)

  2. 修改事务默认提交方式

    • 查看事务默认提交方式: select @@autocommit ; – 1代表自动提交 0 代表手动提交
    • 修改事务默认提交方式: set @@autocommit = 0;

2.事物的四大特征

  1. 原子性:是不可分割的最小操作单位,要么同时成功,要么同时失败
  2. 持久性:当事务提交或回滚后,数据库会持久化的保存事务。
  3. 隔离性:多个事务之间相互独立。
  4. 一致性:事务操作前后,数据总量不变。

9.DCL(控制权限和管理用户)

1.管理用户

①添加用户
语法:create user ‘用户名’ @ ‘主机名’ identified by ‘密码’;

②删除用户
语法:drop user ‘用户名’ @ ‘主机名’ ;

③修改用户密码
语法1:updata user set password =password(‘新密码’) where user =‘用户名’ ;
语法2:set password for ‘用户名’ @ ‘主机名’ =password('新密码’) ;

mysql中忘记了root用户的密码?

  1. cmd–> net stop mysql停止mysql服务(需要管理员运行该cmd)
  2. 使用无验证方式启动mysql服务:mysqld–skip-grant-tables
  3. 打开新的cmd窗口,直接输入mysql命令,敲回车。就可以登录成功。
  4. 修改用户密码
  5. 关闭两个窗口
  6. 打开任务管理器,手动结束mysqld.exe 的进程。
  7. 启动mysql服务
  8. 使用新密码登陆

④查询用户

  • 切换到mysql数据库: use mysql;
  • 查询user表: select * from user;

2.权限管理

  1. 查询权限
    语法:SHOW GRANTS FOR ‘用户名’ @‘主机名’ ;
  2. 授予权限
    语法:grant 权限列表 on 数据库名.表名 to ‘用户名’@‘主机名’ ;
  3. 撤销权限
    语法:revoke 权限列表 on 数据库名.表名 from ‘用户名’@‘主机名’ ;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值