外键

mySql搜索引擎

落爺英雄遲暮 提交于 2019-12-07 10:33:44
转载自 深入浅出mysql数据库 MySQL5.5以后默认使用 InnoDB 存储引擎,其中InnoDB和BDB提供事务安全表,其它存储引擎都是非事务安全表。 若要修改默认引擎,可以修改配置文件中的default-storage-engine。可以通过:show variables like ‘default_storage_engine’;查看当前数据库到默认引擎。命令:show engines和show variables like ‘have%’可以列出当前数据库所支持到引擎。其中Value显示为disabled的记录表示数据库支持此引擎,而在数据库启动时被禁用。在MySQL5.1以后,INFORMATION_SCHEMA数据库中存在一个ENGINES的表,它提供的信息与show engines;语句完全一样,可以使用下面语句来查询哪些存储引擎支持事物处理:select engine from information_chema.engines where transactions = ‘yes’; 可以通过engine关键字在创建或修改数据库时指定所使用到引擎。 主要存储引擎:MyISAM、InnoDB、MEMORY和MERGE介绍: 在创建表到时候通过engine=…或type=…来指定所要使用到引擎。show table status from

mysql 出现Cannot delete or update a parent row: a...

一笑奈何 提交于 2019-12-07 02:10:06
当在Mysql下删除有一个建有外键的表的数据时可能会报此异常,所以可以启动MySql命令行模式,运行如下的sql语句来关闭外键检测: SET FOREIGN_KEY_CHECKS = 0; 执行你要的操作后把再把外键检测恢复 SET FOREIGN_KEY_CHECKS = 1; 其他相关的有: 关闭唯一性校验 set unique_checks=0; set unique_checks=1; 来源: oschina 链接: https://my.oschina.net/u/150415/blog/103227

外键(FOREIGN KEY)

随声附和 提交于 2019-12-07 01:52:41
1、只有InnoDB类型的表才可以使用外键。mysql默认是MyISAM,这种类型不支持外键约束 2、外键的好处:保证数据的一致性和完整性并实现一些级联操作。 3、创建的步骤 要使用外键必须为这个列名建立索引,去外键的数据类型要与引用表中数据类型一致 指定主键关键字: foreign key (列名), 引用外键关键字: references <外键表名>(外键列名)。 事件触发限制: on delete 和 on update , 可设参数 cascade (跟随外键改动)。 restrict (限制外表中的外键改动), set Null (设空值), set Default (设置默认值)。 [系统默认] no action 4、举例 outTable表 主键 id 类型 int 创建含有外键的表: 代码如下: create table temp( id int, name char(20), foreign key(id) references table_name(id) on delete cascade on update cascade); 说明:把id列 设为外键 参照外表table_name的id列 当外键的值删除 本表中对应的列筛除 当外键的值改变 本表中对应的列值改变。 来源: oschina 链接: https://my.oschina.net/u

MySQL(三)—— 表的约束

北战南征 提交于 2019-12-06 17:26:09
一、概念 约束:对表中的数据进行限定,保证数据的正确性、有效性和完整性。 二、分类 1.主键约束:primary key 2.非空约束:not null 3.唯一约束:unique 4.外键约束:foreign key 三、非空约束 not null,被修饰列值不能为空 1.创建表时添加非空约束 create table student(id int, name varchar(32) not null); -- name为非空 2.删除非空约束 alter table student modify name varchar(32); 3.创建表完成后,添加非空约束 alter table student modify name varchar(32) not null; 四、唯一约束 unique,被修饰列值不能重复 1.创建表时添加唯一约束 create table student(id int, phone_number varchar(20) unique); -- phone_number列添加了唯一约束 2.删除唯一约束 alter table student drop index phone_number; 3.创建表完成后,添加唯一约束 alter table student modify phone_number varchar(20) unique; 注意

Hibernate映射关系:一对一、一对多和多对多

ⅰ亾dé卋堺 提交于 2019-12-06 13:59:12
在 Hibernate 中,同样可以对多张存在关联关系的表进行操作,但需要在映射文件中,将对象的关联关系与数据库表的外键关联进行映射。本章将对 Hibernate 的关联关系映射进行详细讲解。 在关系型数据库中,多表之间存在着三种关联关系,分别为一对一、一对多和多对多,如图 1 所示 图 1 关系型数据库中多表之间的三种关联关系 这三种关联关系的具体说明如下。 一对一:在任意一方引入对方主键作为外键。 一对多:在“多”的一方,添加“一”的一方的主键作为外键。 多对多:产生中间关系表,引入两张表的主键作为外键,两个主键成为联合主键。 通过数据库表可以描述实体数据之间的关系,同样,通过对象也可以进行描述。在 Hibernate 中,使用 Java 实体对象之间的关系描述数据表之间的关系,如图 2 所示。 从图 2 中可以看出,一对一的关系就是在本类中定义对方类型的对象,如 A 类中定义 B 类类型的属性 b,B 类中定义 A 类类型的属性 a;一对多的关系,在一个 A 类类型对应多个 B 类类型的情况下,需要在 A 类以 Set 集合的方式引入 B 类类型的对象,在 B 类中定义 A 类类型的属性 a;多对多的关系,在 A 类中定义 B 类类型的 Set 集合,在 B 类中定义 A 类类型的 Set 集合,这里用 Set 集合的目的是避免数据的重复。 以上就是 Java

MySQL数据库~~~~ 完整性约束

北城以北 提交于 2019-12-06 12:54:07
1. not null 与 default not null : 不可空 default : 默认值 例: create table t1(id int not null default 2); 2. unique unique : 唯一属性 例: create table t1(name varchar(20) unique); ​ create table t1(name varchar(20), constraint uk_name unique(name)); 联合唯一: create table t1(name varchar(20),host varchar(15), unique(name,host)); 3. primary key primary key : 主键,字段不为空切唯一 主键 primary key是 innodb存储引擎组织数据的依据,innodb称之为索引组织表,一张表中必须有且只有一个主键。 create table t1(id int primary key); 4. auto_increment auto_increment: 自增属性,默认起始位置为1,步长也为1. create table t1(id int primary key auto_increment); 5. foreign key foreign key : 外键

Oracle------第七章Overview of Data Modeling and Database Design

感情迁移 提交于 2019-12-06 12:49:08
Oracle------第七章Overview of Data Modeling and Database Design 第七章:数据建模和数据库的设计 数据库的设计的步骤: 需求分析:从客户的商业描述中抽象出实体,属性和关系。 实体----->表 属性----->表中的字段 关系----->外键。 实体与实体的关系 需求分析由项目经理或者项目的架构师完成。 设计阶段:把需求分析中实体,属性和关系通过ER图表示出来。 建立文档:把需求分析和ER图通过文档的方式描述出来。 作用:和客户交流。 为了更方便维护数据库 建立表实例图:根据ER图建立表实例图 表实例图包含表中包含哪些字段,以及字段数据类型,字段约束类型。 产品(写建表语句):根据表实例图写建表语句。 Entity-Relationship实体关系模型图: 好处:更方便获取数据库表的信息。 获取实体,获取属性,获取关系。 1)实体:世界上任何一个东西都可以作为实体 如:学生,课程,老师等 2)属性:描述实体 学生(学号,姓名…) 关系:实体与实体之间的关系。加外键。 同时性 3)关系: 一对一的关系:丈夫和妻子(法律上) 外键加上任何一方。 如果出现mustbe关系,外键 放在mustbe一方。 一对多的关系:飞机和乘客 外键加上多的一方。 多对多的关系:学生和课程 建立一张桥表。外键放在桥表。 桥表的作用是把多对多的关系

mysql的外键探讨

こ雲淡風輕ζ 提交于 2019-12-06 11:12:56
在MySQL 3.23.44版本后,InnoDB引擎类型的表支持了外键约束。 一,什么是foreign key,及其完整性 个人觉得,foreign key就是表与表之间的某种约定的关系,由于这种关系的存在,我们能够让表与表之间的数据,更加的完整,关连性更强。关于完整性,关连性我举个例子,大家就会明白了。 有二张表,一张是用户表,一张是订单表: 1,如果我删除了用户表里的用户,那么订单表里面根这个用户有关的数据,就成了无头数据了,不完整了。 2,如果我在订单表里面,随便插入了一条数据,这个订单在用户表里面,没有与之对应的用户。这样数据也不完整了。 如果有外键的话,就方便多了,可以不让用户删除数据,或者删除用户的话,通过外键同样删除订单表里面的数据,这样也能让数据完整 外键的好处:可以使得两张表关联,保证数据的一致性和实现一些级联操作; 二,使用foreign key,遵守以下几点规则 1,有外键约束的表,必须是innodb型 2,外键约束的二个表,本来就相关系的表,并且要有索引关系,如果没有,创建外键时也可以创建索引。 3,不支持对外键列的索引前缀。这样的后果之一是BLOB和TEXT列不被包括在一个外键中,这是因为对这些列的索引必须总是包含一个前缀长度。 4,mysql外键的名子在数据库内要是唯一的 三,创建foreign key的语法规则 外键的定义语法: [CONSTRAINT

CouchDB

拜拜、爱过 提交于 2019-12-06 08:58:12
由于关系数据库的流行,很多开发者对于实体 - 关系(Entity-Relation,ER)模型非常熟悉。而 CouchDB 使用的是面向文档(Document oriented)的模型。在使用 CouchDB 的时候,需要完成从 ER 模型到文档模型的思维方式的转变。下面通过几个具体的例子来说明如何在 CouchDB 中对于一些典型的场景进行建模,并与关系数据库中的建模方式进行比较。 描述实体 第一个场景是对实体的描述。关系数据库中使用表来表示实体。数据库表是有固定的模式的,该模式定义了表中每行数据应该满足的格式。表中每行数据都对应于实体的一个实例。比如应用中如果需要描述“注册用户”和“图书”两种实体的话,就需要两张不同的表。而在 CouchDB 中,所有的实体都是以文档来描述的。文档是没有模式的,可以用任意的 JSON 对象来表示。同一实体的实例在结构上也可能不同。这更能反映问题域中数据的真实状态。比如对“人”这一实体进行描述时,有一个字段是“传真号码”。因为不是所有人都拥有传真机,这一字段是可选的。如果用关系数据库来建模的话,则需要在表中添加一列表示传真号码。对于没有传真机的人来说,该列的值为 null 。而如果用 CouchDB 中的文档来描述的话,对于有传真机的人,其 JSON 对象中就有一个属性表示“传真号码”,否则的话就没有此属性。 CouchDB

11.29

穿精又带淫゛_ 提交于 2019-12-06 08:38:15
目录 1、非外键字段数据 1.1 增加 1.2 查询 1.2.1 常用方法 1.2.3 模糊查询 1.3 修改 1.4 删除 2、外键字段数据 2.0 级联更新 2.1 一对一 2.2 一对多 2.4 跨表查询 3、聚合查询 3.1 聚合函数 3.2 分组查询 3、F查询 3.1 使用F查询 4、Q查询 4.1 Q查询的基本使用方法 4.2 Q查询的高级使用方法 5、orm字段及参数 5.1 常用字段 5.2 自定义char字段 6、orm中的事务操作 6.1 什么是事务 6.2 django使用事务 7、orm查询优化 7.1 orm惰性查询 7.2 only与defer 7.3 select_related与prefetch_related 1、非外键字段数据 1.1 增加 1、create方法 #以books表为例 #在create方法中,以逗号分隔,以关键字参数传字段数据,它们是AND关系 book_obj = models.Books.objects.create() 2、对象的绑定方法save ''' 1、先实例化一个表数据对象 2、调用对象绑定方法save ''' book_obj = models.Books() # 实例化参数:关键字形式,字段名=字段值 book_obj.save() 1.2 查询 1.2.1 常用方法 (1)先获取QuerySet对象