02-MySql约束-数据库设计范式-备份还原

目录

数据库表的约束 

表关系的概念

数据库设计的范式

数据库备份和还原


数据库表的约束 

对表中的数据进行限制,保证数据的正确性、有效性和完整性。一个表如果添加了约束,不正确的数据将无法插入到表中。约束在创建表的时候添加比较合适。 

约束种类 

约束名 

约束关键字 

主键 

primary key 

唯一 

unique 

非空 

not null 

外键 

foreign key 

检查约束 

check 注:mysql不支持 



非空约束:某一列不能为null

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);

默认值 :建表的时候,给某个字段添加默认值,添加数据不传值的时候就是用默认值

-- 创建一个学生表 st9,包含字段(id,name,address), 地址默认值是广州
create table st9 (
    id int,
    name varchar(20),
    address varchar(20) default '广州'
)
-- 添加一条记录,使用默认地址
insert into st9 values (1, '李四', default);
insert into st9 (id,name) values (2, '李白');
-- 添加一条记录,不使用默认地址
insert into st9 values (3, '李四光', '深圳');

唯一约束: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;

主键约束 

用来唯一标识数据库中的每一条记录,通常不用业务字段作为主键,单独给每张表设计一个id的字段,把id作为主键。主键是给数据库和程序使用的,不是给最终的客户使用的。所以主键有没有含义没有关系,只要不重复,非空就行。 主键特点:非空,唯一

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(
		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;

默认地AUTO_INCREMENT 的开始值是1,如果希望修改起始值,请使用下列SQL语法
create table st4 (
    id int primary key auto_increment,
    name varchar(20)
) auto_increment = 1000; -- id从1000开始自增长

创建好以后修改起始值
alter table st4 auto_increment = 2000;

DELETE和TRUNCATE对自增长的影响
DELETE:删除所有的记录之后,自增长没有影响。
TRUNCATE:删除以后,自增长又重新开始。

外键约束:foreign key,让表于表产生关系,从而保证数据的正确性。

1. 在创建表时,可以添加外键
	语法:
		create table 表名(
			....
			外键列
			constraint 外键名称 foreign key (外键列名称) references (主表名主表列名称)
		)
2. 删除外键
	ALTER TABLE 表名 DROP FOREIGN KEY 外键名称
3. 创建表之后,添加外键
	ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);

4. 级联操作
   什么是级联操作:在修改和删除主表的主键时,同时更新或删除副表的外键值,称为级联操作
  1. 添加级联操作
     语法:ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称) OUPDATE CASCADE ON DELETE CASCADE;
  2. 分类:
	1. 级联更新:ON UPDATE CASCADE 
	2. 级联删除:ON DELETE CASCADE 

建表时添加级联:
create table employee(
        id int primary key auto_increment,
        name varchar(20),
        age int,
        dep_id int, -- 外键对应主表的主键
        -- 创建外键约束
        constraint emp_depid_fk foreign key (dep_id) references department(id) on update cascade on delete cascade
)

表关系的概念

表与表之间的三种关系 

实现方式

一对多:最常用的关系 部门和员工 

在多的一方建立外键,指向一的一方的主键。

多对多:学生选课表 和 学生表, 一门课程可以有多个学生选择,一个学生选择多门课程 

多对多关系实现需要借助第三张中间表。中间表至少包含两个字段,这两个字段作为第三张表的外键,分别指向两张表的主键

一对一:相对使用比较少。员工表 简历表, 公民表 护照表 

一对一关系实现,可以在任意一方添加唯一外键指向另一方的主键。

数据库设计的范式

设计数据库时,需要遵循的一些规范。要遵循后边的范式要求,必须先遵循前边的所有范式要求

设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。
目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。一般说来,数据库只需满足第三范式(3NF)就行了。 

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基础上消除传递依赖)

 

数据库备份和还原

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

1. 命令行:
备份: mysqldump -u用户名 -p密码 数据库名称 > 保存的路径
还原:
                1. 登录数据库
                2. 创建数据库  create database 数据库;
                3. 使用数据库  use 数据库;
                4. 执行文件。source 文件路径                  source d:/day21.sql;                           

2. 图形化工具:按照工具引导操作。

发布了103 篇原创文章 · 获赞 26 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/lindroid/article/details/104018742