数据库的设计以及备份和还原(最后)

数据库的基本概念

  1. 数据据库的英文单词:DataBase 简称:DB

  2. 什么是数据库?
    用于存储和管理数据的仓库

  3. 数据库的特点

  4. 持久化储存数据。其实数据库就是一个文件系统

  5. 方便存储和管理数据

  6. 使用了统一的方式操作数据库 SQL

  7. 常见的数据库软件
    MYSQL, DB2, SQLSever, SyBase, SQLife, Oracle

MySQL数据库软件

  1. 安装
  2. 卸载
  3. 配置
    • MySQL服务器启动
  • 手动 在此电脑管理 服务里面

                  *  cmd-> services.mcs 打开服务的窗口
    
    • net stop/start mysql 这个得以管理员身份运行cmd (前提我电脑里软件叫这个名字)
      • MySQL登录
  • mysql -uroot -p密码

  • mysql -hip -uroot –连接目标的密码

  • mysql –host=ip –user=root –password=连接目标的密码

    • MySQL退出
      1.exit
      2.quit

    • Mysql目录结构
      1.安装目录

           *   配置文件  My.ini
      
      1. 数据目录
      • 几个概念
        *数据库:文件夹
        *表:文件
        *数据:数据

SQL

  1. 定义了一种操纵所有关系数据库规则。每一种数据库操作的方式存在不一样的地方,称为“方言”
  2. SQL通用语法
    1. SQL语句可以单行或多行书写,以分号结尾
    2. 可以用空格和缩进
    3. 数据库的SQL语句不区分大小写,关键字建议用大写
    4. 3种注释

​ 单行注释:- - 注释内容 或#注释内荣

​ 多行注释:/* 注释* /

  1. SQL的分类
    1.DDL:操作数据库和表,
    2.DML:增删改表中的数据
    3.DQL:查询表中数据
    4.DCL:授权

DDL:

  1. 操作数据库:CRUD
    1.C(Create):创建

       * 创建数据库:
                 creste database 数据库名称
    
  • 创建数据库,判断不存在,在创建:
    *create database if not exists 数据库名称;

  • 创建数据库,并指定字符集
    *create database 数据库名称 character set字符集名;

  • 练习:创建db4数据库,判断是否存在,并制定字符集为gbk
    *create database if not exists db4 character set gbk;

      2.  R(Retrieve):查询
        * 查询所有数据库名称:
             show databases;
     * 查询某个数据库的字符集:查询某个数据库的创建语句
           show create database 数据库名称;
           3.U(Update):修改
             * 修改数据库的字符集
           alter database 数据库名称 character set 字符集名称
    

    ​ 4.D(Delete):删除
    * 删除数据库
    drop database 数据库名称;
    * 判断数据库存在,存在再删除
    drop database if exists 数据库名称;
    5.使用数据库

                           * 查询当前正在使用的数据库名称
                     select databaessh ();
                            	* 使用数据库
                           use 数据库名称;
    

操作表

​ 1.C(Create)创建
​ 1.语法:
​ create table 表名(
​ 列名1 数据类型1,
​ 列名2 数据类型2
​ …
​ 列名n 数据类型n
​ );
​ *注意:最后一列不需要加逗号(,)
​ *数据库类型
​ 1.int:整数类型
​ 2.double:小数类型
​ *score double(5,2)
​ 3.date:日期,只包含年月日,
​ 4.datetime:日期,包含年月日时分秒
​ 5.timestamp:时间类型 包含年月日时分秒
​ 6.varchar:字符串

	*创建表
	   create table student(
	       id int,
		   name varchar(32),
		   age int,
		   score double(4,1),
		   birthday date,
		   insert_time timestamp
		   );

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


2.R(Retrieve)查询
*查询某个数据库中所有表名称
​ *show tables;
*查询表结构
​ *desc 表名
3.U(Update):修改
​ 1.修改表名
​ alter table 表名 rename ti 新的名字
​ 2.修改表的字符集
​ alter table 表名 character set 字符集名称;
​ 3.添加一列
​ alter table 表名 add 列名 数据类型;
​ 4.修改列名称 类型
​ alter table 表名 change 列名 新列名 新数据类型;
​ alter table 表名 modify 列名 新数据类型;
​ 5.删除列
​ alter table 表名 drop 列名;
4.D(Delete):删除
*drop table 表名
*drop table if exists 表名

客户端图形化工具:SQLyog

### DML:增删改表中数据(重点)

​ 1.添加数据
​ *语法:
​ *insert into 表名(列名1,列名2, , , ,列名n)values(表1,表2 , , 表n);
​ *注意:
​ 1.列名和值一一对应
​ 2.如果表名后,不定义列名,则默认给所有列添加值
​ insert into 表名 values(值1,值2,…值n);
​ 3.除了数字类型,其他类型要用引号
​ 2.删除数据
​ *语法:
​ *delete from 表名 where 条件}
​ *注意:
​ 1.如果不加条件,则删除表中所有记录
​ 2.如果要删除所有数据:TRUNCATE TABLE 表名; /先删除表,然后再创建一张一样的表
​ 3.修改数据
​ *语法:
​ *update 表名 set 列名1 = 值1,列名2 = 值2,…{where 条件};
​ *注意:
​ 1.如果不加条件,则删除表中所有记录

DQL:查询表中的记录

​ * slect* from 表名;

1.语法:
select
字段列表
from
表名列数
where
条件列表
group by
分组字段
having
分组之后的条件
order by
排序
limit
分页限定

2.基础查询
1.多个字段的查询
select 字段名1.字段名2…from 表名;
*注意:
如果查询所有字段,则可以使用代替字段列表
2.去除重复
*distinct
3.计算列
*一般可以使用四则运算来计算一些列额值。(一般只会进行数值型的计算)
*ifnull(表达式1,表达式2)
*表达式1:哪个字段需要判断是否为null
*如该字段为null后的替换值
4.起别名
*as:as也可以省略 打个空格就行
3.条件查询
1.where子句后面跟条件
2.运算符
*<,>,<=,>=,=,<>
*between and
*in(集合)
*like:模糊查询
*占位符:
*-单个任意字符
*%多个任意字符
*is null
*and 或&&
*or 或||
*not 或 |

        查询年龄大于20岁
		select *from student where age > 20;
		select *from student where age >= 20;
		查询年龄等于20岁
		select *from student where age = 20;
		查询年龄不等于20岁
		select *from student where age <> 20;
		select *from student where age |= 20;
		查询年龄大于等于20小于等于30
		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;
		查询年龄22岁,18岁,25岁的信息
		select *from student where age = 22 or age = 18 or age = 25;
		select *from student where age in (22.18,25);
		查询英语成绩为null
		select *from student where english = null;这是不对的。null值不能用= (|=)判断
		select *from student where english is null;
		
		查询英语成绩不为null
		select *from student where english is not null;

DQL:查询语句

​ 1.排序查询
​ *语法:order by 子句
​ *order by 排序字段1 排序方式1,排序字段2,排序方式2…
​ *排序方式:
​ *ASC:升序
​ *DESC:降序
​ *注意:
如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件

​ 2.聚合查询:将一列数据作为一个整体,进行纵向的计算
​ 1.count:计算个数
​ 1.一般选择非空的列;主键
​ 2.count(

​ 2.max:计算最大值 select max(math) from student;
​ 3.min:计算最小值
​ 4.sun:计算和
​ 5.avg:计算平均值

​ *注意;聚合函数的计算,排除null值
​ 解决方案:
​ 1.选择不包含非空的列进行计算
​ 2.ifunll函数

​ 3.分组查询
​ 1.语法:group by 分组字段
​ 2.注意:
​ 1.分组之后查询的字段:分组字段。聚合函数
​ 2.where和having 的区别?

  • where 在分组之后进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来

  • where后不可以跟聚合函数,having 可以进行聚合函数的判断

    4.分页查询
    1.语法:limit 开始的索引,每页查询的条数;
    2.公式:开始的索引 = (当前的页码 - 1 ) * 每页显示的条数
    –每页显示三条记录

          select * from student limit 0,3;  --第一页
          select * from student limit 3,3;  --第二页
          select * from student limit 6,3;  --第三页
          
       3.limit是一个“方言”
    

    约束

    ​ *概念:对表中的数据进行限定,保证数据的正确性,有效性和完整性。
    ​ *分类:
    ​ 1.主键约束:primary key
    ​ 2.非空约束:not null
    ​ 3.唯一约束:nuique
    ​ 4.外键约束:foreign key
    ​ *非空约束:not full

            1.创建表是添加约束
    		  create table stu(
    		       id int,
    			   name varchar(20)not null --name为非空
    		  );
    	    2.创建表完后,添加非空约束 
    		  alter table stu modify name varchar(20) not null;
    		3.删除name的非空约束
    		  alter table stu modify name varchar(20);
    

    ​ *唯一约束:unique ,值不能重复
    ​ 1.创建表时,添加唯一约束
    ​ create table stu(
    ​ id int,
    ​ phone_number varchar(20) unique --添加了唯一约束
    ​ );
    ​ *注意:在mysql中,唯一约束限定的列的值可以有多个null
    ​ 2.删除唯一约束
    ​ alter table stu drop index phone _number;
    ​ 3.在创建表后,添加唯一约束
    ​ alter table stu modify phone_number varchar(20) unique;
    ​ *主键约束:primary key
    ​ 1.注意:
    ​ 1.含义:非空并唯一
    ​ 2.一张表只能有一个字段为主键
    ​ 3.主键就是记录的唯一标识
    ​ 2.在创建表时,添加主键约束
    ​ create table stu(
    ​ id int primary key,–给id添加主键约束
    ​ name varchar(20)
    ​ );

    ​ 3.删除主键
    ​ 错误形式 alter table stu modify id int;
    ​ 正确 alter table stu drop primary key;

    ​ 4.创建完表之后,添加主键
    ​ alter table stu modify id int primary key;

    ​ 5.自动增长:
    ​ 1.概念:如果某一列是数值型的,使用auto_increment 可以来完成值得自动增长

    ​ 2.在创建表时,添加主键约束,并且完成主键自动增长
    ​ create table stu(
    ​ create table stu(
    ​ id int primary key auto_increment, --给Id添加主键约束
    ​ name varchar(20)
    ​ );

    ​ 3.删除自动增长
    ​ alter table stu modify id int;

    ​ 4.添加自动增长
    ​ alter table stu modify id int auto_increment,;

    ​ *外键约束:foreign key,让表与表产生关系,从而保证数据的正确性
    ​ 1.在创建表时,可以添加外键
    ​ *语法:
    ​ create table 表名(
    ​ …
    ​ 外键列
    ​ costraint 外键名称 foreign key (外键列名称) rferences 主表名称 (主表列名称)
    ​ );

    约束

    ​ *概念:对表中的数据进行限定,保证数据的正确性,有效性和完整性。
    ​ *分类:
    ​ 1.主键约束:primary key
    ​ 2.非空约束:not null
    ​ 3.唯一约束:nuique
    ​ 4.外键约束:foreign key
    ​ *非空约束:not full

    ​ *唯一约束:unique ,值不能重复
    ​ 1.创建表时,添加唯一约束
    ​ create table stu(
    ​ id int,
    ​ phone_number varchar(20) unique --添加了唯一约束
    ​ );
    ​ *注意:在mysql中,唯一约束限定的列的值可以有多个null
    ​ 2.删除唯一约束
    ​ alter table stu drop index phone _number;
    ​ 3.在创建表后,添加唯一约束
    ​ alter table stu modify phone_number varchar(20) unique;
    ​ *主键约束:primary key
    ​ 1.注意:
    ​ 1.含义:非空并唯一
    ​ 2.一张表只能有一个字段为主键
    ​ 3.主键就是记录的唯一标识
    ​ 2.在创建表时,添加主键约束
    ​ create table stu(
    ​ id int primary key,–给id添加主键约束
    ​ name varchar(20)
    ​ );

    ​ 3.删除主键
    ​ 错误形式 alter table stu modify id int;
    ​ 正确 alter table stu drop primary key;

    ​ 4.创建完表之后,添加主键
    ​ alter table stu modify id int primary key;

    ​ 5.自动增长:
    ​ 1.概念:如果某一列是数值型的,使用auto_increment 可以来完成值得自动增长

    ​ 2.在创建表时,添加主键约束,并且完成主键自动增长
    ​ create table stu(
    ​ create table stu(
    ​ id int primary key auto_increment, --给Id添加主键约束
    ​ name varchar(20)
    ​ );

    ​ 3.删除自动增长
    ​ alter table stu modify id int;

    ​ 4.添加自动增长
    ​ alter table stu modify id int auto_increment,;

    ​ *外键约束:foreign key,让表与表产生关系,从而保证数据的正确性
    ​ 1.在创建表时,可以添加外键
    ​ *语法:
    ​ create table 表名(
    ​ …
    ​ 外键列
    ​ costraint 外键名称 foreign key (外键列名称) rferences 主表名称 (主表列名称)
    ​ );

​ 2.删除外键
​ alter table 表名 drop foreign key 外键名称 ;
​ 3.创建表之后,添加外键
​ alter table 表名 adda costraint 外键名称 foreign key (外键字段名称) references 主表名称(主表列名称);

​ 4.级联操作
​ 1.添加级联操作
​ 语法:alter table 表名 add costraint 外键名称
​ foreign key (外键字段名称) references 主表名称(主表列名称) on update cascade on delete cascade;
​ 2.分类:
​ 1.级联更新:on update cascade
​ 2.级联删除:on delete cascade

数据库的设计

1.多表之间的关系
    1.一对一:
	2.一对多(多对一)
	    如:部门和员工.  一个部门对应多个员工 但是一个员工值对应一个部门
	3.多对多:
        如:学生和课程
2.实现关系:
    1.一对多(多对一)
	    实现方式:在多的一方建立外键,指向一的一方的主键!

数据库的设计以及备份和还原(最后)_第1张图片
2.多对多
实现方式:需要借助第三张中间表。
中间表至少包含两个字段,这两个字段作为第三张表的外键,分别指向两张表的主键

		 用到了“联合主键”

数据库的设计以及备份和还原(最后)_第2张图片
3.一对一
实现方式:可以在任意一方添加‘唯一’外键指向另一方的主键。
数据库的设计以及备份和还原(最后)_第3张图片

2.数据库设计的范试
    *概念:设计数据时,需要遵循的一些规范。要遵循后边的,必循先遵循前面的范式要求
    *分类:
        1.第一范式1NF:每一列时不可分割的原子数据项
        2.第二范式:基于第一范式(消除部份依赖)
            *几个概念:
                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属性(属性组),可以确定唯一C属性的值,则称C传递函数依赖于A
                5.码:如果在一张表中,一个属性或属性组被其他所有属性完全依赖,则称这个属性(属性组)为该表的码
                    * 主属性:码属性组中的所有属性
                    * 非主属性:
        3.第三范式:基于第二范式(消除传递依赖)


数据库的备份和还原

1.命令行:

  • 语法:

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

    • 还原:

      1. 登录数据库

      2. 创建数据库

      3. 使用数据库

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

        用命令行:mysqldump -uroot -p密码 db1 > d://a.db1

        ​ show databases;

        ​ drop batabase db1;

        ​ create batabase db1;

        ​ use db1;

        ​ source d://a.sql;

        ​ show tables;

        图形化工具

2.图形化工具

你可能感兴趣的:(数据库的设计以及备份和还原(最后))