外键

MySQL外键约束方式

大兔子大兔子 提交于 2020-03-01 03:19:32
MySQL外键约束方式 如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表。外键是用来实现参照完整性的,不同的外键约束方式将可以使两张表紧密的结合起来,特别是修改或者删除的级联操作将使得日常的维护工作更加轻松。这里以MySQL为例,总结一下3种外键约束方式的区别和联系。 www.2cto.com 这里以用户表和用户组表为例,这是一个典型的多对一关系,多个用户对应于一个用户组。 首先创建用户组表: 创建用户组表 create table t_group ( id int not null, name varchar(30), primary key (id) ); 并插入两条记录: 插入记录 insert into t_group values (1, 'Group1'); insert into t_group values (2, 'Group2'); 下面创建用户表,分别以不同的约束方式创建外键引用关系: 1、级联(cascade)方式 级联方式 create table t_user ( id int not null, name varchar(30), groupid int, primary key (id), foreign key (groupid) references t_group(id) on delete cascade

DDL-级联删除

岁酱吖の 提交于 2020-02-28 23:57:56
#查看有没有索引:主键、外键、唯一键 SHOW INDEX FROM major; SHOW INDEX FROM stuinfo; #删除外键 ALTER TABLE stuinfo DROP FOREIGN KEY fk_stu_major; #传统的方式添加外键 ALTER TABLE stuinfo ADD CONSTRAINT fk_stu_major FOREIGN KEY(majorid) REFERENCES major(id); #查看表中有没有数据 SELECT * FROM major; #插入数据 INSERT INTO major VALUES (1,'java'),(2,'H5'),(3,'大数据'); #查看表中有没有数据 SELECT * FROM stuinfo; #插入数据 INSERT INTO stuinfo SELECT 1,'john1','女',NULL,NULL,1 UNION ALL SELECT 2,'john2','女',NULL,NULL,1 UNION ALL SELECT 3,'john3','女',NULL,NULL,2 UNION ALL SELECT 4,'john4','女',NULL,NULL,2 UNION ALL SELECT 5,'john5','女',NULL,NULL,1 UNION ALL

PostgresSQL-性能提升技巧

蓝咒 提交于 2020-02-28 23:01:27
13.4. 向数据库中添加记录 我们第一次填充数据库时可能需要做大量的表插入。 下面是一些建议,可以尽可能高效地处理这些事情。 13.4.1. 关闭自动提交 关闭自动提交,并且只在每次(数据拷贝)结束的时候做一次提交 。 (在纯 SQL 里,这就意味着在开始的时候发出 BEGIN, 并且在结束的时候执行 COMMIT。有些客户端的库可能背着你干这些事情, 这种情况下你必须确信只有在你要那些库干这些事情的时候它才做。) 如果你允许每个插入都独立地提交,那么 PostgreSQL 会为所增加的每行记录做大量的处理。 在一个事务里完成所有插入的动作的最大的好处就是,如果有一条记录插入失败, 那么,到该点为止的所有已插入记录都将被回滚,这样你就不会很难受地面对一个只装载了一部分数据的表。 13.4.2. 使用 COPY 使用 COPY 在一条命令里装载所有记录, 而不是一连串的INSERT命令。COPY 命令是为装载数量巨大的数据行优化过的; 它没 INSERT 那么灵活,但是在大量装载数据的情况下,导致的过荷也少很多。 因为 COPY 是单条命令,因此填充表的时候就没有必要关闭自动提交了。 如果你不能使用 COPY,那么 使用 PREPARE 来创建一个准备好的 INSERT, 然后使用 EXECUTE 多次效率更高。 这样就避免了重复分析和规划 INSERT 的开销。 请注意,

数据库设计三大范式和五大约束

自闭症网瘾萝莉.ら 提交于 2020-02-28 06:50:01
来源: https://www.cnblogs.com/zhouguowei/p/9268788.html 一、三大范式: 什么是范式:简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系。所以建立科学的,规范的的数据库是需要满足一些规范的来优化数据数据存储方式。在关系型数据库中这些规范就可以称为范式。范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导方法,以下就是对这三个范式的基本介绍: 第一范式(1NF): 1、数据表中的每一列(字段),必须是不可拆分的最小单元,也就是确保每一列的原子性。满足第一范式是关系模式规范化的最低要求,否则,将有很多基本操作在这样的关系模式中实现不了。 如果需求知道那个省那个市并按其分类,那么显然第一个表格是不容易满足需求的,也不符合第一范式。 2、两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据。 显然第一个表结构不但不能满足足够多物品的要求,还会在物品少时产生冗余。也是不符合第一范式的。 第二范式(2NF): 满足1NF后要求表中的所有列,每一行的数据只能与其中一列相关,即一行数据只做一件事。只要数据列中出现数据重复,就要把表拆分开来。 一个人同时订几个房间,就会出来一个订单号多条数据,这样子联系人都是重复的,就会造成数据冗余。我们应该把他拆开来。

Entity Framework4.0 (六) EF4的 增加、删除、更改

廉价感情. 提交于 2020-02-27 07:55:01
前面介绍了EF4的查询功能,主要是借助于LINQ的强大的查询功能和它简单的语法。让我们可以完全面向对象集体去进行查询,而不必去劳心处理那些关系型数据库表的操作。这样我们更容易把主要精力集中在业务逻辑上面,从而轻松、快捷、高扩展性地实现所需的业务功能。 好了,这次介绍EF4的增加、删除、更改。 ======================================================== 我们基于前面的EFDemo的示例,作进一步的修改: 1.增加Category: 1 using (NorthwindEntities context = new NorthwindEntities())2 {3 Category category = new Category(); 4 category.CategoryName = cateName;5 category.Description = desc;6 context.Categories.AddObject(category);7 context.SaveChanges();8 } 代码解释: 第1行:new 出容器对象 context。对EF4的实体操作前,都要new出这个容器的,因为是这个容器管理着所有的EF实体对象。 第3行:new一个Category 的对象category

5.13. Dependency Tracking

一笑奈何 提交于 2020-02-27 02:53:13
5.13. Dependency Tracking 5.13.依赖性跟踪 When you create complex database structures involving many tables with foreign key constraints, views, triggers, functions, etc. you implicitly create a net of dependencies between the objects. For instance, a table with a foreign key constraint depends on the table it references. 当创建了一个复杂的数据库架构,里面包含许多有外键约束的表,视图,触发器,函数等等,实际上,你隐式的在各个对象之间创建了一个依赖网。例如,具有外键约束的表依赖于它所引用的表。 To ensure the integrity of the entire database structure, PostgreSQL makes sure that you cannot drop objects that other objects still depend on. For example, attempting to drop the products

候选键与主键

放肆的年华 提交于 2020-02-26 23:01:59
候选键与主键 候选键 关系中能唯一标志一个元祖的最小属性集 关系实例上任何两个元祖的值在候选键的属性(集)上取值不同 主键(primary Key) 若一个关系有多个候选键,可选择其中的一个作为主键 包含候选键的属性集称为超键(SuperKey) 若关系只有一个候选键,且这个候选键包含了关系的所有属性,称该候选键为全键(All-key) 外键(Foreign Key) 若关系R的一个属性(集)F与关系S的主键Ks对应,即关系R中的元祖在F上的取值与关系S中元祖的Ks上的值对应,则称该属性(集)F为关系R的外键 外键并不一定要与相应的主键同名 可由一个或多个其值能唯一标识该关系模式中任何元组的属性组成 来源: CSDN 作者: weixin_44522477 链接: https://blog.csdn.net/weixin_44522477/article/details/104522605

阿里11条mysql规范

余生颓废 提交于 2020-02-26 10:28:39
阿里11条mysql规范 转载 ~时光易逝~ 最后发布于2019-09-11 09:40:09 阅读数 101 收藏 展开 对于阿里的11条规范,虽然平时写sql的时候会注意到,但是还是要记录一下,编写sql的时候要注意,很实用,希望能帮助到想提升sql的速度的同学。 阿里开发强制要求的11条SQL编写规范 1.【强制】不要使用count(列名)或count(常量)来替代count(*),count(*)是SQL92定义的标准统计行数的语法,跟数据库无关,跟NULL和非NULL无关。 说明:count(*)会统计值为NULL的行,而count(列名)不会统计此列为NULL值的行。 2.【强制】count(distinct col) 计算该列除NULL之外的不重复行数,注意 count(distinct col1, col2) 如果其中一列全为NULL, 那么即使另一列有不同的值,也返回为0。 3.【强制】当某一列的值全是NULL时,count(col)的返回结果为0,但sum(col)的返回结果为NULL,因此使用sum()时需注意 NPE问题。 正例:可以使用如下方式来避免sum的NPE问题:SELECT IF(ISNULL(SUM(g)),0,SUM(g)) FROM table; 4.【强制】使用ISNULL()来判断是否为NULL值。 说明

SQL回顾

筅森魡賤 提交于 2020-02-26 07:29:44
数据库的本质是一种特殊的文件 数据库是由数据表组成的,数据表是真正存储数据的 数据库客户端-->SQL语句-->数据库服务器-->数据库文件 表与表之间存在关联的数据库称为关系型数据库 (sql-server my-sql(5.1, 5.6, 5.7) Oracle(10g, 11g) db2) 非关系型数据库(mongodb redis) 唯一的标识一行信息的特殊的列 主键(primary key)不允许重复,不允许为空 当前表中的某个字段来自与另一张表中的主键的值,那么这个字段称之为 外键(foreign key) 列 字段 同一类的信息 行 记录 对象的详细信息 记录的集合组成数据表,数据表的集合组成数据库文件 DQL 数据查询语言 select DML 数据操作语言 insert, update, delete DDL 数据定义语言 create, drop 数据库服务端的安装 sudo apt-get install mysql 数据库客户端的安装 sudo apt-get install mysql-client 将程序的一些配置 写到配置文件中 修改的时候不用修改程序只需要修改配置文件即可(可以更好地保护程序源码) decimal() 占5位小数占2位 enum("情况1","情况2",..) 把所有可能出现的情况都列举出来 体积比较大的文件不存在数据库中

MariaDB增删改

给你一囗甜甜゛ 提交于 2020-02-26 03:30:46
1.MariaDB 数据类型 MariaDB数据类型可以分为数字,日期和时间以及字符串值。 使用数据类型的原则:够用就行, 尽量使用范围小的,而不用大的 常用的数据类型: 1.整数:int, bit(位,0和1 ) 数值类型(常用) 2.小数:decimal #decimal(5,2) 五位数,保留两位小数 3.字符串:varchar, char 字符串 4.日期时间: date, time, datetime 日期时间类型 5.枚举类型(enum) :只能在制定好的选项中选择,enum('男','女','人妖','保密')再给该选项赋值的时候可以用1代表男,2代表女,3代表人妖,4代表保密,5以后就不可以了。 约束: 1.主键primary key:物理上存储的顺序;唯一性,不为空,关联外键,索引功能 2.非空not null:此字段不能为空,如果字段为空,整条数据都作废 3.唯一unique:此字段不允许重复 4.默认default:当不填写此值时会使用默认值,如果填写则已填写为准 5.外键foreign key:对关系字段进行约束,当为关系字段填写值时,会到关联的表中查询此值是否存在,如果存在则填写成功,如果不存在则填写失败并抛出异常。在范围小的表中设置外键。 6.auto_increment :自动增加 2. sql语句-增 显示当前时间:select now();