博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL学习总结(二)
阅读量:2156 次
发布时间:2019-05-01

本文共 4056 字,大约阅读时间需要 13 分钟。

文章目录

1 数据库备份与还原

1.1 备份的应用场景

  在服务器进行数据传输、数据存储和数据交换,就有可能产生数据故障。比如发生意外停机或存储介质损坏。这时,如果没有采取数据备份和数据恢复手段与措施,就会导致数据的丢失,造成的损失是无法弥补与估量的。

1.2 source命令备份与还原

#备份格式:            mysqldump -u用户名 -p密码 数据库 > 文件的路径    #还原格式:            SOURCE 导入文件的路径;

例子: 备份db1

  1. 备份: (无需登录)
    mysqldump -u root -p db1 > c:/test/mydb1.sql()
    mysqldump --no-defaults -u root -p db1 > d:/cesheei.sql(上面报错可以使用这个)
    实际上备份的创建表和插入表数据的 sql命令
  2. 还原
    要先登录:      mysql -u root -p;
    创建对应数据库:   create database db1;
    选中对应数据库:   use db1;
    执行这个sql脚本文件: source c:/test/mydb1.sql;

注意:还原的时候需要先登录MySQL,并选中对应的数据库。

1.3 或使用可视化工具备份和还原

2 数据库约束

  在数据库服务器上,可以存储N个数据库,数据库中可以存储N个表,一个表中可以存储N条记录,一条记录里,可以有N个数据。每个数据在春初时,可以约束一下,约束完后,更利于我们对数据更好的操作。

  约束概述:约束其实就是一种限制,用于修饰表中的列. 通过这种限制来保证表中数据的正确性、有效性和完整性。
在这里插入图片描述

2.1 主键约束(重点)

2.1.1 主键的作用

  用来标注一条记录的唯一性(唯一标识),每个表都应该有一个主键,并且每个表只能有一个主键。

  有些记录的 name,age,score 字段的值都一样时,那么就没法区分这些数据,造成数据库的记录不唯一,这样就不方便管理数据。

哪个字段应该作为表的主键?
  通常不用业务字段作为主键,单独给每张表设计一个id的字段,把id作为主键。主键是给数据库和程序使用的,不是给最终的客户使用的。所以主键有没有含义没有关系,只要不重复非空就行。

2.1.2 创建外键

# 主键:PRIMARY KEY    # 主键的特点:        1. 主键字段值唯一(唯一不可重复)        2. 主键列不能为NULL        3. 一个表中只能有一个主键,但主键可以是多个字段 (联合主键)

创建主键方式:

方式1:创建表时,添加主键约束 (字段约束区)    格式:        create table 表名 (            字段名称1 字段类型 primary key,            字段名称2 字段类型 --字段约束区        );方式2:创建表时,在约束区域添加约束(扩展)    格式1:单一主键        create table 表名 (            字段名称1 字段类型,            字段名称2 字段类型,            primary key(字段名称1)        );    格式2:联合主键        create table 表名 (            字段名称1 字段类型,            字段名称2 字段类型,            primary key(字段名称,字段名称1)        );方式3:给已有表中添加主键(扩展)        alter table 表名 add primary key(字段名称);

注意 :一张表中只有一个主键 , 主键可以为多个字段 , 不过我们一般增加一个字段 id 来作为主键。

2.1.3 删除主键

语法格式:ALTER TABLE 表名 DROP PRIMARY KEY;

2.1.4 主键自增

  主键如果让我们自己添加很有可能重复,我们通常希望在每次插入新记录时,数据库自动生成主键字段的值。

  AUTO_INCREMENT表示自动增长(字段类型是整型数字)
语法格式:例:

--创建学生表user5, 包含字段(id, name)将id做为主键并自动增长CREATE TABLE user5 (     id INT PRIMARY KEY AUTO_INCREMENT,     name VARCHAR(20));--这样插入数据就会自增长insert into user5(name)values('唐策')
  • DELETE和TRUNCATE的区别
    DELETE删除表中的数据,不重置AUTO_INCREMENT的值
    TRUNCATE摧毁表,重建表,AUTO_INCREMENT重置为1
    如果想自定义id的值,可以使用下面的sql进行设置,一般不需要
    ALTER TABLE 表名 AUTO_INCREMENT=起始值;

2.2 唯一约束

实质:在这张表中这个字段不能重复。(本身可为null:因为null是没有值,所以不存在重复的问题;可设置多个)

语法格式:字段名 字段类型 UNIQUE
例:创建学生表st7, 包含字段(id, name),name这一列设置唯一约束,不能出现同名的学生。

CREATE TABLE st7 (     id INT,     NAME VARCHAR(20) UNIQUE);

2.3 非空约束

实质:被修饰的这个字段必须设置值,不能是NULL。

语法格式:字段名 字段类型 NOT NULL
例:创建表学生表st8, 包含字段(id,name,gender)其中name不能为NULL。

CREATE TABLE st8 (     id INT,     NAME VARCHAR(20) NOT NULL,     gender CHAR(2));

2.4 默认值

实质:往表中添加数据时,如果不指定这个字段的数据,就使用默认值。

语法格式:字段名 字段类型 DEFAULT 默认值

例:创建一个学生表 st9,包含字段(id,name,address), 地址默认值是广州。

CREATE TABLE st9 (     id INT,     NAME VARCHAR(20),     address VARCHAR(50) DEFAULT '广州');#此时添加数据:如果不指定值,就会为默认值

3 多表间的关系

3.1 表关系概述

  现实生活中,实体与实体之间肯定是有关系的,比如:老公和老婆,部门和员工,用户和订单、订单和商品、学生和课程等等。那么我们在设计表的时候,就应该体现出表与表之间的这种关系!

表和表之间的关系分成三种:

  1. 一对一 (老公和老婆)
  2. 一对多 (部门和员工, 用户和订单)
  3. 多对多 (学生和课程)

  双11当天,马哥和东哥两个用户分别在淘宝上下了一些订单,已知马哥下了1个订单,订单总金额为999元.东哥下了2个订单,订单金额分别为1314元和10元。

思考: 数据库该如何存放这些数据呢?
没有建立关系前:
    通过表数据不能得知数据间的联系,这样存放数据是没有意义的。
建立关系后:
    通过对该业务的分析,可得知一个用户可以有多个订单,一个订单只属于一个用户。
    我们管1的一方,叫主表或1表. 我们管多个一方,叫从表或多表。
    通常要在多的一方添加一个字段,用于存放主表主键的值,我们管这个字段叫外键字段。
    外键字段的值必须为主表主键的值,若为其他值,则没有意义。

用于限制外键字段取值必须为主表主键的值的约束叫做-外键约束。

3.2 一对多

一对多(1:n)

例如:班级和学生,部门和员工,客户和订单,分类和商品。

一对多建表原则:在从表(多方)创建一个字段,指向主表(一方)的主键.我们把这个字段称之为外键。

3.3 多对多

多对多(m:n)

例如:老师和学生,学生和课程,用户和角色。

多对多关系建表原则:需要创建第三张表,中间表中至少两个字段,这两个字段分别作为外键指向各自一方的主键。

3.4 一对一(了解)

一对一(1:1)

在实际的开发中应用不多.因为一对一可以创建成一张表。

两种建表原则:        外键唯一:主表的主键和从表的外键(唯一),形成主外键关系,外键唯一 UNIQUE        外键是主键:主表的主键和从表的主键,形成主外键关系

3.5 外键约束

实质:一张表中的某个字段引用另一个表的主键。

主表: 约束别人。

副表/从表: 使用别人的数据,被别人约束。

3.5.1 创建外键

  1. 新建表时增加外键:
    [CONSTRAINT] [外键约束名称] FOREIGN KEY(外键字段名) REFERENCES 主表名(主键字段名)
    关键字解释:
    CONSTRAINT – 约束关键字
    [外键约束名称]–不指定会生成默认值
    FOREIGN KEY(外键字段名)– 某个字段作为外键
    REFERENCES – 主表名(主键字段名) 表示参照主表中的某个字段
  2. 已有表增加外键:
    ALTER TABLE 从表 ADD [CONSTRAINT] [外键约束名称] FOREIGN KEY (外键字段名) REFERENCES 主表(主键字段名);

3.5.2 删除外键(了解)

语法格式:ALTER TABLE 从表 drop foreign key 外键名称;

3.5.3 数据操作注意事项

添加数据时:

    先添加主表中的数据,再添加从表中的数据。
删除数据时:
    先删从表中的数据,再删主表中的数据。
修改数据时:
    如果主表中的主键被从表引用了,不能修改此主键的值。

转载地址:http://wfowb.baihongyu.com/

你可能感兴趣的文章
为什么在优化算法中使用指数加权平均
查看>>
什么是 Q-learning
查看>>
用一个小游戏入门深度强化学习
查看>>
如何应用 BERT :Bidirectional Encoder Representations from Transformers
查看>>
5 分钟入门 Google 最强NLP模型:BERT
查看>>
强化学习第1课:像学自行车一样的强化学习
查看>>
强化学习第2课:强化学习,监督式学习,非监督式学习的区别
查看>>
强化学习第3课:有些问题就像个赌局
查看>>
强化学习第4课:这些都可以抽象为一个决策过程
查看>>
强化学习第5课:什么是马尔科夫决策过程
查看>>
强化学习第6课:什么是 Crossentropy 方法
查看>>
强化学习第7课:交叉熵方法的一些局限性
查看>>
强化学习 8: approximate reinforcement learning
查看>>
图解什么是 Transformer
查看>>
代码实例:如何使用 TensorFlow 2.0 Preview
查看>>
6 种用 LSTM 做时间序列预测的模型结构 - Keras 实现
查看>>
走进JavaWeb技术世界1:JavaWeb的由来和基础知识
查看>>
走进JavaWeb技术世界2:JSP与Servlet的曾经与现在
查看>>
走进JavaWeb技术世界3:JDBC的进化与连接池技术
查看>>
走进JavaWeb技术世界4:Servlet 工作原理详解
查看>>