文章目录
1 数据库备份与还原
1.1 备份的应用场景
在服务器进行数据传输、数据存储和数据交换,就有可能产生数据故障。比如发生意外停机或存储介质损坏。这时,如果没有采取数据备份和数据恢复手段与措施,就会导致数据的丢失,造成的损失是无法弥补与估量的。
1.2 source命令备份与还原
#备份格式:
mysqldump -u用户名 -p密码 数据库 > 文件的路径
#还原格式:
SOURCE 导入文件的路径;
例子
: 备份db1
- 备份: (无需登录)
mysqldump -u root -p db1 > c:/test/mydb1.sql(这里报错的解决方法)
mysqldump --no-defaults -u root -p db1 > d:/cesheei.sql(上面报错可以使用这个)
实际上备份的创建表和插入表数据的 sql命令 - 还原
要先登录: 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 表关系概述
现实生活中,实体与实体之间肯定是有关系的,比如:老公和老婆,部门和员工,用户和订单、订单和商品、学生和课程等等。那么我们在设计表的时候,就应该体现出表与表之间的这种关系!
表和表之间的关系分成三种:
- 一对一 (老公和老婆)
- 一对多 (部门和员工, 用户和订单)
- 多对多 (学生和课程)
双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 创建外键
- 新建表时增加外键:
[CONSTRAINT] [外键约束名称] FOREIGN KEY(外键字段名) REFERENCES 主表名(主键字段名)
关键字解释:
CONSTRAINT
– 约束关键字
[外键约束名称]–不指定会生成默认值
FOREIGN KEY(外键字段名)
– 某个字段作为外键
REFERENCES
– 主表名(主键字段名) 表示参照主表中的某个字段 - 已有表增加外键:
ALTER TABLE 从表 ADD [CONSTRAINT] [外键约束名称] FOREIGN KEY (外键字段名) REFERENCES 主表(主键字段名);
3.5.2 删除外键(了解)
语法格式:ALTER TABLE 从表 drop foreign key 外键名称;
3.5.3 数据操作注意事项
添加数据时:
先添加主表中的数据,再添加从表中的数据。
删除数据时:
先删从表中的数据,再删主表中的数据。
修改数据时:
如果主表中的主键被从表引用了,不能修改此主键的值。