外键

SQL中的复杂语句

别等时光非礼了梦想. 提交于 2019-12-06 08:08:55
目录 1. DQL:查询语句 1. 排序查询 2. 聚合函数 3. 分组查询 4. 分页查询 2. 约束 3. 多表之间的关系 4. 范式 5. 数据库的备份和还原 DQL:查询语句 1. 排序查询 语法:order by 子句 order by 排序字段1 排序方式1 , 排序字段2 排序方式2... 排序方式: ASC:升序,默认的。 DESC:降序。 注意:如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。 2. 聚合函数:将一列数据作为一个整体,进行纵向的计算。 1. count:计算个数 ####1. 一般选择非空的列:主键 ####2. count(*) 2. max:计算最大值 3. min:计算最小值 4. sum:计算和 5. avg:计算平均值 注意:聚合函数的计算,排除null值。 解决方案: 选择不包含非空的列进行计算 IFNULL函数 3. 分组查询: 语法:group by 分组字段; 注意: 分组之后查询的字段:分组字段、聚合函数 where 和 having 的区别? where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来 where 后不可以跟聚合函数,having可以进行聚合函数的判断。 -- 按照性别分组。分别查询男、女同学的平均分 SELECT sex ,

多表操作

流过昼夜 提交于 2019-12-06 06:41:53
1.外键 1.1:什么是外键 为了了解外键,我们先创两张表 mysql> USE itcast; Database changed 创建完成第一张表 mysql> CREATE TABLE class(id INT(11) PRIMARY KEY,name VARCHAR(20))ENGINE=INNODB; Query OK, 0 rows affected 给第一张表添加数据 mysql> INSERT INTO class(id,name) VALUES(1913,"上午班"),(1923,"下午班"); Query OK, 2 rows affected Records: 2 Duplicates: 0 Warnings: 0 创建第二张表 mysql> CREATE TABLE student(id INT PRIMARY KEY,name VARCHAR(20),class_id INT(11))ENGINE=INNODB; Query OK, 0 rows affected 给第二张表添加数据 mysql> INSERT INTO student(id,name,class_id) VALUES (191301,"张三",1913),(192301,"李四",1923),(191302,"王二",1913); Query OK, 3 rows affected

主键--外键

浪子不回头ぞ 提交于 2019-12-06 04:46:28
主键自增长: 主键只能够设置在数据类型为整型的列上。可以子集设置主键值,也可以利用主键自增长的特性 实现主键数据的自动更新。自增长只能作用于当前的数据库,但是在集群的状态下主键自增长可能 会失效。 使用uuid来代替主键自增长,这样可以避免在集群环境的主键重复。 使用代理主键来代替自然主键,防止业务变更时导致系统崩溃。 非空约束: 将某些列的值设置为非空(not null),虽然约束为非空,但是可以重复。 唯一约束: 将某些列的值设置为唯一(unique),该约束为唯一约束,但是并没有规定值不可以为空。 概念模型: 实体之间的关系: 一对一:老公和夫妻之间的关系。 一对多:老师可以有多个学生。 多对多:学生和老师之间的关系,老师可有多个学生,学生也可以有多个老师。 外键约束: 外键必须是另一张表的主键。(外键必须引用主键) 外键是可用重复的,但必须是另一张表的主键 外键也是可以为空的 一张表中可以含有多个外键,可引用多个表的主键。 创建具有外键的表时,包含该外键需要引用的主表需要先存在,并且在删除表时,要先删除从表 才能够删除主表。 外键约束的创建方法: 1 首先可以在创建一张表的时候创建表中外键列,语法为constraint 约束名 foreign key(列名)references 主键表(主键列名)。创建外键列时不必和主键的列同名。 2 可以使用alter table 表明

多表操作

只谈情不闲聊 提交于 2019-12-06 04:21:17
外键 ①外键是指引用另一个表中的一列或多列(被引用的列应具有主键约束或唯一性约束),建立和加强两个表数据之间的链接 首先,创建两个名为student和class的表并给表添加数据 (student表中的class_id是引入了class表中的主键id,从而建立了两个表数据之间的连接。即class_id作为student表的外键) (被引用的表class是主表,引用外键的表student是从表,两表是主从关系) (注意:建立的表都必须是INNODB型,不能是临时表,不然不能使用外键) (注意:引入外键后,外键列只能插入参照列存在的值,参照列被参照的值不能被删除,保证了数据的参照完整性) (例:下图class表中的id被student表中的class_id引用,那么class表中的id列就不能被删除。如果将student表中class_id列的1913都改为1923或者把1913的那几条学生信息都删掉,那class表中id列的1913那一行就可以成功删除了) ②为表添加外键约束 ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY(外键字段名) REFERENCES 外表表名(主键字段名); (注意:定义外键名时,不能加引号。如:constraint 'FK_ID' 或 constraint " FK_ID "都是错误的) 添加外键约束的参数说明

Django模型层—ORM

和自甴很熟 提交于 2019-12-06 03:31:52
目录 一、模型层(models) 1-1. 常用的字段类型 1-2. 字段参数 1-3. 自定义char字段 1-4. 外键关系 二、Django中测试脚本的使用 三、单表操作 3-1. 添加记录 3-2. 删除记录 3-3. 修改记录 3-4. 单表查询-必知必会13条 3-5. orm注意事项 3-6. 单表查询-双下划线 四、多表操作 4-1. 一对多 4-2. 多对多 1.添加数据 add() 2.删除数据 remove() 3.清空数据 clear() 4.修改数据 set() 4-3. 基于对象的跨表查询 1.一对一 查询数据 2.一对多 3.多对多 4-4. 基于双下划线查询 1.一对一 2.一对多 3.多对多 4.联表操作 五、聚合查询 六、分组查询 七、F查询 八、Q查询 Q对象高级用法 九、ORM中的事务操作 9-1. 什么是事务 9-2. 事务的特性(ACID) 十, 数据库三大范式 数据库设计范式 理解三大范式 一、模型层(models) Django提供了一个orm(关系映射模型)系统,模型包含了一些字段信息以及查询方法 1-1. 常用的字段类型 AutoField 当model中如果没有自增列,则会自动创建一个列名为id的列,int 自增列,必须填入参数primary_key=True CharField 字符类型 , 必须提供max_length参数,

day 55 ajax

♀尐吖头ヾ 提交于 2019-12-06 02:51:23
only与defer only括号内放字段 查询结果是一个列表套一个个的数据对象 这些数据 对象点括号内的字段属性不会再查询数据库 直接就是对象获取属性 也支持点击 括号内没有的字段 但是每点击一次就会 重新走一次数据库 查询 效率极低 defer与only是互为反操作 defer 括号内放什么字段 查询出来的对象就没有该字段属性 如果你要点击 每点击一次就要重新走一次数据 而你如果 点击了非括号内的字段 就 不会走数据库 仅仅是对象属性的操作 select_related与prefetch_related select_related与prefetch_related select_related括号内只能 放外键字段 并且外键字段的类型只能是 一对多 或者 一对一 不能是多对多 内部是自动连表操作 会将括号内外键字段所关联的表 与当前表 自动拼接成一张表 然后将表中的数据一个个查询出来封装成一个个的对象 这样做的好处就在于跨表也不需要重复的走数据库了 减轻数据库的压力 select_related括号内可以 放多个外键字段 都号隔开 会将多个外键字段关联的表与当前表 全部拼成一张大表 耗时:数据库层面需要先连表 prefetch_related 内部是子查询 会自动帮你 按步骤查询多张表 然后 将查询的结果封装到对象中 给用户的感觉好像还是连表操作 括号内支持传多个外键字段

【SSH进阶之路】Hibernate映射——一对一单向关联映射(五)

时光毁灭记忆、已成空白 提交于 2019-12-06 02:34:03
【SSH进阶之路】Hibernate基本原理(一) ,小编介绍了Hibernate的基本原理以及它的核心,采用对象化的思维操作关系型数据库。 【SSH进阶之路】Hibernate搭建开发环境+简单实例(二) ,小编搭建了基本Hibernate的开发环境,并做了一个简单实例,对它的基本原理有了一个理性的认识。 【SSH进阶之路】Hibernate基本映射(三) ,我们介绍了Hibernate的基本映射(即对一个实体进行映射)的相关概念,并给大家实现相关实例,比较简单。 【SSH进阶之路】Hibernate映射——多对一单向关联映射(四) ,我们介绍了多对一的关联映射,并详细了解说了,映射技巧,这篇我们依旧使用此映射技巧,帮助大家更好的理解。 下面开始今天的愉快之旅。 映射原理 两个实体对象之间是一对一的关联映射,即一个对象只能与另外唯一的一个对象相对应。例如:一个人(Person)只有一张身份证(IdCard)。我们看一下这个例子的对象模型,如下图所示: 对象模型 从上图中可以看出: 1、一个人只有一张身份证,唯一的一个身份证号,对象之间是一对一的关系; 2、人(Person)持有身份证(IdCard)的引用,所以,两个对象关系维护由person端决定。 从对象模型映射成关系模型,有两种方式:主键关联和唯一外键关联,我们继续看下面的内容。 分类: 主键关联: 1

Django模型层-ORM

不羁的心 提交于 2019-12-06 00:21:27
目录 一、模型层(models) 1-1. 常用的字段类型 1-2. 字段参数 1-3. 自定义char字段 1-4. 外键关系 二、Django中测试脚本的使用 三、单表操作 3-1. 添加记录 3-2. 删除记录 3-3. 修改记录 3-4. 单表查询-必知必会13条 3-5. orm注意事项 3-6. 单表查询-双下划线 四、多表操作 4-1. 一对多 4-2. 多对多 1.添加数据 add() 2.删除数据 remove() 3.清空数据 clear() 4.修改数据 set() 4-3. 基于对象的跨表查询 1.一对一 查询数据 2.一对多 3.多对多 4-4. 基于双下划线查询 1.一对一 2.一对多 3.多对多 4.联表操作 五、聚合查询 六、分组查询 七、F查询 八、Q查询 Q对象高级用法 九、ORM中的事务操作 9-1. 什么是事务 9-2. 事务的特性(ACID) 9-3. 数据库的三大范式 第一范式(1NF):列不可再分 第二范式(2NF):属性完全依赖主键 第三范式(3NF):属性不依赖于其它非主属性 属性直接依赖于主键 9-4. Django中如何开启事务 一、模型层(models) Django提供了一个orm(关系映射模型)系统,模型包含了一些字段信息以及查询方法 1-1. 常用的字段类型 AutoField 当model中如果没有自增列

关系型数据库基础

喜夏-厌秋 提交于 2019-12-05 23:40:48
主键 如果一个属性或者一组属性能唯一标识一行数据,那么这个属性(组)就是主键; 数据表必须有主键,且只能有一个主键,且主键不能重复; 如果是一个属性作为主键,代表列的完整性约束; 如果是一组属性作为主键,代表表的完整性约束; 原则 1. 有且只有一个 2. 唯一性原则:不能重复 3. 最小化原则:如果一组属性作为主键,从这组属性中删除一个属性,仍然能唯一标识一行数据,那么这组属性就不是主键 外键 外键用于与另一张表关联; 它能唯一确定另一张表的记录,它是另一张表的主键; 外键可有可无,且可以有多个,且外键可以重复; 索引 索引是对表中一个或多个列进行排序的结构; 他可以加快查询速度; 索引又分为唯一索引、主键索引、聚集索引、非聚集索引; 唯一索引不能重复,主键索引就是主键,也不能重复; 非聚集索引可以重复; 非聚集索引是我们最常用的索引; 视图 数据库视图是个虚拟表或者罗技表,并非物理表,他是把一个或者多个表的部分数据进行处理后,生成的一张虚拟表; 它是动态表,当物理表的数据发生变化时,它也会变化; 一个 sql 语句理解视图 CREATE VIEW current_employees AS SELECT NAME, ID, SALARY FROM EMPLOYEES; # current_employees 视图表 # EMPLOYEES 原表 # 原表变,视图表也变