外键

数据库常见面试题

两盒软妹~` 提交于 2020-01-16 07:05:30
(1)表的操作 表的创建:create table 表名 (列名1 类型 约束, 列名2 类型 约束...) 表的删除:drop table 表名 表的更改:alter table 表名 add|drop 列名|约束名 插入记录:insert into 表名... value... 更新记录:update 表名 set 列名=值 where 条件 删除记录:delete from 表名 where 条件 查询记录:select 列名... from 表名 where 条件 (2)什么是数据库约束,常见的约束有哪几种? 约束可以分为:主键约束primary key、外键约束foreign key、唯一约束unique、检查约束check、空值约束not null、默认值约束default (3)主键和外键的区别? 主键在本表中是唯一的,不可为空的,外键可以重复可以为空。 外键和另一张表的主键关联,不能创建对应表中不存在的外键。 (4)什么是索引?优缺点? 对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。 优缺点:优点:利用索引可以加速对数据的检索,索引是可以唯一的,创建索引允许指定单个列或者多个列 缺点:减慢了数据录入速度,同时也增加了数据库的尺寸大小 (5)order by和group by的区别? order by为排序查询、ASC升序

mysql

倾然丶 夕夏残阳落幕 提交于 2020-01-15 02:01:49
有关MySQL的知识点总结 1.相关概念 DB 数据库(database):存储数据的"仓库",它保存了一系列有组织的数据。 DBMS 数据库管理系统(Database Management System).数据库是通过DBMS创建和操作的容器。 SQL 结构化查询语言(Structure Query Language):专门用来与数据库通信的语言。 常见的数据库管理系统:Mysql Oracle DB2 sqlServer等。 Mysql是关系型数据库(c/s),是一种开放资源代码的关系型数据管理系统,适用于多种平台。 关系型数据库的特点: 1.实现数据共享,减少数据冗余 2.采用特定的数据类型 3.具有较高的数据独立性 4.具有统一的数据控制功能 sql语句: DDL:数据库定义语言, 用于库和表的创建( create )、修改、删除 。 DQL:数据库查询语句 select(查询) DML: 数据操纵语句,用于添 加、删除、修改、查询数据库记录,并检查数据完整性 ,insert(插入/添加) update(修改),delete(删除) DCL:数据控制语句, 用于定义用 户的访问权限和安全级别 。用于对数据库对象操作的权限。如grant revoke commit rollback等语句 -- 连接mysql mysql -uroot -p密码; -- 退出 exit; 或

MySQL 索引详解

有些话、适合烂在心里 提交于 2020-01-14 03:15:42
索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。 注: [1] 索引不是万能的 ! 索引可以加快数据检索操作,但会使数据修改操作变慢。每修改数据记录,索引就必须刷新一次。为了在某种程序上弥补这一缺陷,许多SQL命令都有一个DELAY_KEY_WRITE项。这个选项的作用是暂时制止MySQL在该命令每插入一条新记录和每修改一条现有之后立刻对索引进行刷新,对索引的刷新将等到全部记录插入/修改完毕之后再进行。在需要把许多新记录插入某个数据表的场合,DELAY_KEY_WRITE选项的作用将非常明显。 [2]另外, 索引还会在硬盘上占用相当大的空间 。 因此应该只为最经常查询和最经常排序的数据列建立索引。注意,如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果。 从理论上讲,完全可以为数据表里的每个字段分别建一个索引,但MySQL把同一个数据表里的索引总数限制为16个。 1. InnoDB数据表的索引 与MyISAM数据表相比,索引对InnoDB数据的重要性要大得多。在InnoDB数据表上,索引对InnoDB数据表的重要性要在得多。在 InnoDB数据表上,索引不仅会在搜索数据记录时发挥作用,还是数据行级锁定机制的苊、基础。”数据行级锁定”的意思是指在事务操作的执行过程中锁定正在被处理的个别记录

JPA生成的表无外键

人盡茶涼 提交于 2020-01-13 21:50:24
问题描述:使用spring data jpa生成的表的外键没有生成 原因:使用jpa默认mysql引擎为MyISAM,没有外键,只表示外键关系 解决方法:在application.properties配置mysql引擎为InnoDB 即 spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect 来源: CSDN 作者: I like study. 链接: https://blog.csdn.net/rj2017211811/article/details/103963552

mysql 不能加载表问题

被刻印的时光 ゝ 提交于 2020-01-13 19:27:19
记录一次 mysql 5.7 下,出现重启数据库后不能加载特定表的问题处理。 搜索了很多的类似的错误,大多都是说因为外键同名的索引丢失的情况。但在5.7这个版本下,会禁止更新外键关联的索引。 最后经过分析,发现是之前更新了主外键的字符集导致的。数据库的默认字符集是utf8mb4(预期是uft8),如果执行脚本的时候没指定,都会已表的默认字符集去更新。导致外键引用的列字符集不一致,出现错误。 只需要同步外键字段的字符集就能处理该问题。 来源: https://www.cnblogs.com/tangcn/p/12188500.html

django 2.x创建sql表的外键

戏子无情 提交于 2020-01-12 20:00:07
运行环境 : django 2.1 from django.db import models # Create your models here. class Grade(models.Model): g_name = models.CharField(max_length=32) class Student(models.Model): s_name = models.CharField(max_length=16) # s_grade = models.ForeignKey(Grade) # django version 1.x s_grade = models.ForeignKey(to=Grade, on_delete=models.CASCADE) # django version >= 2.x """ 关联类名 on_delete 在2.x版本是必填的 on_delete= models.CASCADE 级联删除 PROTECT 保护 SET(1) 删除后设置为某个值 SET_DEFAULT 设置为默认值设置为某一个值 SET_NULL 设置为空 DO_NOTHING 什么都不变 """ # django 2.x的外键设置参数比django 1.x多了一个参数,稍填写第二个参数就会报错 ############# ERROR ########### # book =

MySQL笔记-数据库的设计、备份和还原

≡放荡痞女 提交于 2020-01-12 04:03:47
## 数据库的设计 1. 多表之间的关系 1. 分类: 1. 一对一(了解): * 如:人和身份证 * 分析:一个人只有一个身份证,一个身份证只能对应一个人 2. 一对多(多对一): * 如:部门和员工 * 分析:一个部门有多个员工,一个员工只能对应一个部门 3. 多对多: * 如:学生和课程 * 分析:一个学生可以选择很多门课程,一个课程也可以被很多学生选择 2. 实现关系: 1. 一对多(多对一): * 如:部门和员工 * 实现方式:在多的一方建立外键,指向一的一方的主键。 2. 多对多: * 如:学生和课程 * 实现方式:多对多关系实现需要借助第三张中间表。中间表至少包含两个字段,这两个字段作为第三张表的外键,分别指向两张表的主键 3. 一对一(了解): * 如:人和身份证 * 实现方式:一对一关系实现,可以在任意一方添加唯一外键指向另一方的主键。 3. 案例 -- 创建旅游线路分类表 tab_category -- cid 旅游线路分类主键,自动增长 -- cname 旅游线路分类名称非空,唯一,字符串 100 CREATE TABLE tab_category ( cid INT PRIMARY KEY AUTO_INCREMENT, cname VARCHAR(100) NOT NULL UNIQUE ); -- 创建旅游线路表 tab_route /* rid

从零开始学java(9)

主宰稳场 提交于 2020-01-11 11:48:10
day 9 今天继续数据库。。 12. 分组查询的详解 select stuName , SUM ( mark ) , AVG ( mark ) , COUNT ( * ) from student where mark is not null -- 根据什么条件查询 group by stuName -- 根据什么字段进行统计 having COUNT ( * ) = 2 -- 分组之后的结果进行筛选 order by SUM ( mark ) desc ; -- 对最终的结果进行排序 1.根据条件 执行查询 — where 2.对根据指定的条件查询出来的结果进行聚合函数各种操作, sum() count() avg() max() min() 3.聚合之前 设置分组 进行各种聚合的条件, 根据分组的条件进行聚合。 注意:不设置分组默认统计的是整个表格的数据。 加了分组,默认根据分组条件进行统计 – group by 4.对于分组之后的结果再一次进行筛选 – having 写聚合函数得到的结果进行再一次过滤。 5.对最终的结果进行 排序 – order by 注意事项 : 使用了聚合函数,就不可以查询其他的普通字段,默认只会查询出第一条数据。 但是可以查询 group by 之后的字段。 13.数据库的单表操作 DML操作:插入,删除,修改。 DQL操作:查询。 DDL操作:对库

SQL的主键和外键约束

徘徊边缘 提交于 2020-01-11 05:42:47
SQL的主键和外键约束 SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值。 (1)插入非空值时,如果主键表中没有这个值,则不能插入。 (2)更新时,不能改为主键表中没有的值。 (3)删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除。 (4)更新主键记录时,同样有级联更新和拒绝执行的选择。 简而言之,SQL的主键和外键就是起约束作用。 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键。 比如: 学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯一的,学号就是一个主键; 课程表(课程编号,课程名,学分) 其中课程编号是唯一的,课程编号就是一个主键; 成绩表(学号,课程号,成绩) 成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录,所以,学号和课程号的属性组是一个主键。 成绩表中的学号不是成绩表的主键,但它和学生表中的学号相对应,并且学生表中的学号是学生表的主键,则称成绩表中的学号是学生表的外键;同理,成绩表中的课程号是课程表的外键。 定义主键和外键主要是为了维护关系数据库的完整性,总结一下: 一、主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。