• 【Mysql】第3篇--数据库约束


    数据库约束

    约束作用: 保证数据具有真实的作用和意义

    主键约束 primary key

    用来标注一条记录的唯一性

    特征:

    ​ 主键字段值唯一(唯一不可重复)

    ​ 主键列不能包含NULL值

    ​ 一个表中只能有一个主键,但主键可以是多个字段 (联合主键)

    实现方式:

    添加主键
    在创建表时,添加约束 (字段约束区)
    		格式
    			create table 表名 ( 
        			字段名称1 字段类型 字段约束区, 	
        			字段名称2 字段类型 字段约束区
        		);
    
    在创建表时,在约束区域添加约束(扩展)
    		格式1:单一主键
    			create table 表名 (
                	字段名称1 字段类型, 	
                	字段名称2 字段类型, 	
                	primary key(字段名称1)  
            	);
    
    		格式2:联合主键
    			create table 表名 (
                	字段名称1 字段类型, 	
                	字段名称2 字段类型, 	
                	primary key(字段名称,字段名称1)  
            	);
    
    在已有表中添加主键(扩展)
    		alter table 表名 add primary key(字段名称);
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    # 主键约束
    # 方式1: 建表时在字段的约束区添加主键约束
    CREATE TABLE user1(
    	id INT PRIMARY KEY, # 在字段的约束区添加主键约束
    	`name` VARCHAR(20)
    );
    INSERT INTO user1 VALUES(1,'tom');
    INSERT INTO user1 VALUES(NULL,'tom');
    # 方式2: 建表时在约束区添加主键约束
    CREATE TABLE user2(
    	id INT, 
    	`name` VARCHAR(20),
    	PRIMARY KEY (id)
    );
    # 方式3: 创建完表后,通过修改表结构添加主键约束
    CREATE TABLE user3(
    	id INT, 
    	`name` VARCHAR(20)
    );
    # 修改表添加主键
    ALTER TABLE user3 ADD PRIMARY KEY (id);
    
    # 联合主键
    CREATE TABLE user4(
    	id INT, 
    	`name` VARCHAR(20),
    	PRIMARY KEY (id,`name`)
    );
    # 保证id和name字段不为空,然后联合判断唯一性
    
    INSERT INTO user4 VALUES(1,'tom');
    INSERT INTO user4 VALUES(2,"tom");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    删除主键

    ​ alert table 表名 drop PRIMARY KEY;

    主键自增

    ​ auto_increment
    ​ 默认地AUTO_INCREMENT 的开始值是1,如果希望修改起始值,请使用下列SQL语法

    ​ ALTER TABLE 表名 AUTO_INCREMENT=起始值;

    唯一约束: unique

    特征

    添加: insert into 表名 values();

    删除: delete * from 表名 where 条件;

    修改: update 表名 set name = “张三” where 条件;

    查询: select * from 表名 where 条件

    ​ 被修饰的字段唯一,不可重复

    ​ 注意: 一个表中可以有多个被unique修饰的字段,但对null不起作用

    实现方式
    	创建表时在字段后添加 
    		create table 表名 ( 
        		字段名称1 字段类型 约束, 
        		字段名称2 字段类型 约束 
        	);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    删除:

    ​ alter table 表名 drop index 约束名称;

    ​ 约束名称默认为字段名称

    非空约束: not null

    特征:

    ​ 被修饰的字段不可为空

    实现方式

    ​ 直接在字段后面添加即可

    删除: 修改字段删除约束

    ​ alter table 表名 change 旧字段名称 新字段名称 类型 约束;

    default : 默认值约束

    ​ 当不为该字段设置信息时,使用默认值

    数据备份与还原

    移库 —>

    Windows ----> Linux

    Linux: 安全和稳定

    1.dos命令方式

    ​ 只能备份库中的数据和表

    ​ 备份数据

    ​ mysqldump -u用户名 -p密码 数据库 > 文件的路径

    ​ 还原数据

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

    ​ source 导入文件的路径; f:/111.sql

    2.图形化界面方式

    多表的设计与实现

    一对多:

    称一的一方为主表或一表 称多的一方为从表或多表

    ​ 实现

    ​ 在从表中添加一个字段,字段名称自定义,一般是(主表名称_id),类型要和主表的/主键保持一致,该字段被成为外键.

    ​ 作用:

    ​ 保证数据的完整性和有效性

    ​ 特征:

    ​ 主表不能删除从表中引用的数据

    ​ 从表中不能添加主表没有的数据

    分析:
        如何将一对多的关系保存到mysql数据库中?
        在工作中,我们称1的一方为主表或1,
        我们称多的一方为从表或多表.
        我们在从表中添加一个字段,该字段我们称之为-外键字段
        外键字段名自定义(一般为: 主表名称_id)
        外键字段类型要和主表主键类型保持一致
        外键字段存放的值为主表主键已有的值
        为了保证外键字段中的值引入的是主表主键的值,我们需要给外键字段添加约束 --- 外键约束
    
    -- 多表设计与实现
    -- 一对多关系
    -- 1.创建user主表
    CREATE TABLE `user`(
    	id INT PRIMARY KEY AUTO_INCREMENT,
    	`name` VARCHAR(20)
    );
    -- 2.创建orders从表
    CREATE TABLE `orders`(
    	id INT PRIMARY KEY AUTO_INCREMENT,
    	price DOUBLE
    );
    -- 3.修改从表结构,添加外键字段
    ALTER TABLE orders ADD user_id INT;
    -- 4.给从表中的外键字段,添加外键约束
    ALTER TABLE orders ADD FOREIGN KEY(user_id) REFERENCES `user`(id);
    -- 添加信息
    -- 首先添加主表中的数据,再添加从表中的数据信息(从表中有主表主键值的引用)
    -- 删除信息
    -- 首先删除从表中的数据,再删除主表中的数据信息
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    多对多:

    本质上就是两个一对多,添加中间表

    分析:
    	如何将多对多的关系保存到mysql数据库中?
        在工作中我们采用中间表(中间表需要手动添加)
        orders表和product表我们称之为主表,
        中间表为从表, 从表名称自定义(一般为: orders_product),从表中需要有两个外键字段,分别存放两张主表主键的值.
    
    
    # 多对多关系
    # 多对多本质上就是两个一对多
    
    -- 1.创建2个主表
    -- orders表已存在
    -- 创建商品表
    CREATE TABLE product (
    	id INT PRIMARY KEY AUTO_INCREMENT,
    	`name` VARCHAR(20),
    	price DOUBLE
    );
    -- 2.创建中间表(从表)
    CREATE TABLE orders_product (
    	id INT PRIMARY KEY AUTO_INCREMENT,
    	ord_id INT,
    	pro_id INT
    );
    -- 3.给中间表添加两个外键约束
    ALTER TABLE orders_product ADD FOREIGN KEY(ord_id) REFERENCES orders(id);
    ALTER TABLE orders_product ADD FOREIGN KEY(pro_id) REFERENCES product(id);
    
    # 添加信息
    # 首先向两张主表中添加数据信息,再向从表中添加数据信息
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    一对一(了解)

    ​ 人和身份证号,企业和法人

    ​ 实现方式,一般都写在一张表中

    ​ 如果非要拆分成两张表,则在操作比较多的表中添加外键字段

    注意

    ​ 一张表中只有一个字段可以设置为主键

    ​ 一张表中可以多个字段非空与唯一约束

    ​ 主键可以自动增长,非空与唯一约束的字段不能自动增长

    删除时:

    ​ 先删从表数据,再删主表中的数据

    foreign key : 外键

    添加外键

    ​ 方式1: 创建表时添加

    ​ CREATE TABLE orders2 (
    ​ id INT PRIMARY KEY AUTO_INCREMENT,
    ​ price DOUBLE(5,2),
    ​ user_id INT,
    ​ FOREIGN KEY (外键名称) REFERENCES 主表名称(关联的字段)
    ​ );

    ​ 方式2: 创建完表后通过修改表添加

    ​ 在从表中添加外键字段

    ​ alter table 从表 add 外键名称 数据类型;

    ​ 给从表的外键字段添加外键约束

    ​ alter table 从表名 add [constraint 名称] foreign key(外键字段) references 主表名称(主键);

    删除外键

    ​ ALTER TABLE 从表 drop foreign key 外键约束名;

    作业:
    	班级和学生: 1:N
    	老师和学生: 1:N
    	学生和课程: N:N
    
    • 1
    • 2
    • 3
    • 4

  • 相关阅读:
    提升C内功--函数栈帧的创建和销毁(动画讲解)
    阿里云10M带宽服务器价格、下载和上传速度限制说明
    Open3D 模型精细化处理——subdivide_midpoint中点剖分
    最简单的tab选项卡
    Windows远程桌面连线显示请稍后
    [附源码]计算机毕业设计游戏商城平台论文Springboot程序
    python创建sqlite,并使用flask-sqlalchemy连接
    Android学习笔记 46. Room
    Selenium隐藏浏览器和元素截屏实践
    银河麒麟Telnet远程登录
  • 原文地址:https://blog.csdn.net/qq_41250372/article/details/125462357