首页
学习
活动
专区
圈层
工具
发布

【数据库】MySQL进阶一、主外键讲解

MySQL进阶主外键讲解 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性 外键:是另一表的主键, 外键可以有重复的, 可以是空值,用来和其他表建立联系用的...Id=Dept_id,而Dept_id就是员工表中的外键:因为员工表中的员工需要知道自己属于哪个部门,就可以通过外键Dept_id找到对应的部门,然后才能找到部门表里的各种字段信息,从而让二者相关联。...所以说,外键一定是在从表中创建,从而找到与主表之间的联系;从表负责维护二者之间的关系。 2.外键的使用需要满足下列的条件:(这里涉及到了InnoDB的概念) 1....MySQL常见引擎有两种:InnoDB和MyISAM,后者不支持外键。 2. 建立外键关系的对应列必须具有相似的InnoDB内部数据类型。 3....ON DELETE后面的四个参数:代表的是当删除主表的记录时,所做的约定。 RESTRICT(限制):如果你想删除的那个主表,它的下面有对应从表的记录,此主表将无法删除。

2.8K70
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    在PowerDesigner中设计物理模型1——表和主外键

    Name是模型上显示的名称,Code是生成的实际的表名,后面的3个复选框P代办主键、F代表外键,M代表不能为空。...另外需要注意的是,在建立主键时,系统会在主键上建立索引,索引分为聚集索引和非聚集索引,在“键属性”窗口的General选项卡中可以设置该主键上建立的索引是聚集索引还是非聚集索引,如图所示: 外键 如果是由概念模型或者逻辑模型生成物理模型...,那么外键是通过Relationship生成的,也可以通过工具栏中的Reference来实现两表之间的外键关系。...”按钮,然后在设计面板中,课程表上按下鼠标左键,并拖拽到教师表中放开鼠标,这时如果课程表中没有RoomID列,系统会自动创建RoomID列并创建该列上的外键引用,如果已经存在RoomID列,则只添加外键引用...切换到鼠标指针模式,双击箭头,系统将弹出引用的属性窗口,在属性窗口中可以设置该引用的Name、Code、关联的列、约束名、更新策略和删除策略等。

    3.9K10

    【MySQL】外键约束的删除和更新总结

    外键约束的删除/更新行为 行为 说明 NO ACTION 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。...(与RESTRICT一致) RESTRICT 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。...(与NOT ACTION一致) CASCADE 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有,则也删除/更新外键在子表总的记录。...SET NULL 当在父表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置该子表中该外键值为null(这就要求该外键允许取null)。...id为6,我们可以看到子表emp中存在外键关联的数据也会被删除。

    2.6K10

    iOS 键盘删除键响应

    iOS 键盘删除键响应 背景 背景是,实现一个分享到微信,多选加输入框,点击键盘删除键,删除多选选中对象的东西。...实现 由于UITextField没有删除键的代理,所以笔者最开始的想法是,通过textField:shouldChangeCharactersInRange:replacementString:来实现监听...self.deleteBackwardBlock } } return YES; } 验证后发现:第三方输入法用此逻辑没有问题,但是系统原生输入法,当textField为空时,点击删除键是不会走这个代理方法的...测试后可以发现点击键盘删除键时,代理方法确实响应了,代码如下: @interface TargetView () @property (nonatomic, strong...,字符和多选一同被删除了,而我们需要的时,在最后一个字符删除后,再次点击删除才应该操作多选。

    1.6K20

    Redis 过期键删除策略

    先来介绍一下各种方案: ---- 定时删除: 在设置键的过期时间的同时,创建一个定时器(timer),让定时器在键的过期时间来临时,立即执行对键的删除操作.即从设置key的Expire开始,就启动一个定时器...,到时间就删除该key;这样会对内存比较友好,但浪费CPU资源 ---- 惰性删除:放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键;如果没有过期,就返回该键...至于要删除多少过期键,以及要检查多少个数据库,则由算法决定。...如果输入键已经过期,那么expireIfNeeded函数将输入键从数据库中删除。...当键不存在或者键因为过期而被expireIfNeeded函数删除时,命令按照键不存在的情况执行。

    1.8K10

    Redis 过期键删除策略

    Redis 中数据库键的过期时间都保存在过期字典中,当一个键过期了,Redis 存在三种不同的删除策略:定时删除、惰性删除和定期删除 定时删除 定义 在设置键的过期时间的同时创建一个计时器,让定时器在键过期时间来临时...,立即执行对键的删除操作。...定时删除策略对内存是最友好的:通过使用定时器,定时删除策略可以保证过期键会尽快被删除,并且释放过期键所占用的内存。...惰性删除 定义 放任过期键不管,但是每次从键空间中获取键时都检查取得的键是否过期,如果过期的话,就删除该键;如果没有过期则返回该键。...定期删除 定义 每隔一段时间,程序都会对数据库进行一次检查,删除里面的过期键。至于要删除多少过期键,以及要检查多少个数据库,则由算法决定。

    1.2K10

    Oracle 级联删除外键

    所谓的级联删除是指当主表中的一条记录被删除,那么子表中所关联的记录也相应的自动删除。本教程将教大家如何在Oracle中使用级联删除外键。...此外,我们也可以创建一个具有多个字段的外键(带级联删除),如下例所示: CREATE TABLE supplier ( supplier_id numeric(10) not null, supplier_name...根据supplier_id和supplier_name删除supplier表中的记录时,外键fk_foreign_comp上的级联删除会导致products表中的所有对应记录也会被级联删除。...带级联删除),该外键基于supplier_id字段引用supplier表。...此外,我们也可以创建一个具有多个字段的外键(带级联删除),如下例所示: ALTER TABLE products ADD CONSTRAINT fk_supplier FOREIGN KEY (supplier_id

    1.9K30

    SQL Server数据库中导入导出数据及结构时主外键关系的处理

    操作过程分为以下几个步骤: 步骤1:从源数据库生成数据结构脚本【不包表含外键关系】   在数据源188连接上,右键点击源数据库》【任务】》【生成脚本】 ? 弹出“生成和发布脚本” ?...将“编写外键脚本”的值设置为false,意思是这一步骤生成的数据结构脚本中不包含表之间的外键关系。其他选项根据实际情况设置。 点击【确定】按钮,生成脚本,入下图。 ?...设置 SET IDENTITY_INSERT dbo.T_ACL_User Off ; 步骤5:从源数据库生成仅包含表外键关系的数据结构脚本   步骤与步骤1大致相同,最后一步设置相反 ?...红色框内,将“编写外键脚本”设置为True,其他选项与步骤1中设置相反。点击"确定"按钮,生成脚本,另存为“OriginalDataStructureOnlyWithFK.sql”。...外键已经成功创建。

    2.7K40

    mysql删除主键和删除索引(含删除unique索引)

    mysql删除主键和删除索引(含删除unique索引) ##删除表 DROP TABLE config_back; ##删除主键 ALTER TABLE config_back DROP PRIMARY...update_op` varchar(50) DEFAULT NULL COMMENT '修改人', `is_delete` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否删除...0未删除 1已删除', PRIMARY KEY (`id`) ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='配置表备份表...' 在MySQL中移除主键有以下几种不同的实现方法: 使用ALTER TABLE语句移除主键约束: ALTER TABLE 表名 DROP PRIMARY KEY; 这种方法适用于需要移除表中已有主键的情况...ALTER TABLE config_back DROP PRIMARY KEY, ADD UNIQUE KEY (`price_end`); ##删除索引(含删除unique索引) ALTER TABLE

    5.4K10

    删除mysql日志文件

    的日志文件占据了大部分空间 , 整整27G,于是现在的任务就是清理mysql的日志文件(主要是清理.log文件和mysql-bin.00000X二进制日志文件) 一、删除mysql日志文件 第一步:登陆进入...删除日志文件的命令:purge binary logs to ‘mysql-bin.000005’;mysql> purge binary logs to 'mysql-bin.000005'; 删除除...删除后就能释放大部分空间。 二、mysql 定时清理日志文件 如果每次等到发现空间不足的时候才去手动删除日志文件, 这种方式是很不理想的。...编辑mysql的配置文件,设置expire_logs_days(mysql定时删除日志文件) [root@sam ~]# vim /etc/my.cnf 在my.cnf中,添加或修改expire_logs_days...的值 (这里设置的自动删除时间为10天, 默认为0不自动删除)expire_logs_days=10修改后,重启mysql就会生效。

    5.2K00
    领券