网站首页 > 文章精选 正文
描述主键、外键、超键是什么
- 超键(super key): 在关系中能唯一标识元组的属性集
- 候选键(candidate key): 不含有多余属性的超键称为候选键。也就是在候选键中,若再删除属性,就不
是键了!
- 主键(primary key): 用户选作元组标识的一个候选程序主键
- 外键(foreign key):如果关系模式R中属性K是其它模式的主键,那么k在模式R中称为外键。
数据库设计的三大范式
1. 第一范式(确保每列保持原子性)
2. 第二范式(确保表中的每列都和主键相关)
3. 第三范式(确保每列都和主键列直接相关,而不是间接相关)
drop,delete与truncate的区别
1. delete和truncate都是只能删除表的内容而不能删除表的结构,而drop则是删除表的结构和内容(表将
不复存在);
2. delete可以删除整个表的数据也可以有选择性地删除某一条或多条数据,而truncate则是一次性删除整
个表的数据;
3. 使用delete删除的表数据并没有真正被删掉,数据占用的表空间还存在,日后有需要还可以恢复;
4. 使用truncate删除的表数据会连同其占用的表空间一起直接被删掉,无法恢复
SQL UNION 和 UNION ALL 区别
union: 对两个结果集进行并集操作, 不包括重复行,相当于distinct,会对获取的结果进行排序操作
union all: 对两个结果集进行并集操作, 包括重复行, 即所有的结果全部显示。
union all只是合并查询结果,并不会进行去重和排序操作,在没有去重的前提下,使用union all的执行效率要比union高
exists、in、any、all区别
- exists是表示子查询是否返回结果,而不管返回的具体内容
- in表示值是否存在子查询结果集中
- any是表示子查询结果中任意一个
- all表示子查询结果中的所有
sql语句的执行顺序
1. from 子句组装来自不同数据源的数据
2. where 子句基于指定的条件对记录行进行筛选
3. group by 子句将数据划分为多个分组
4. 使用聚集函数进行计算
5. 使用 having 子句筛选分组
6. 计算所有的表达式
7. select 的字段筛选
8. 使用 order by 对结果集进行排序。
count(*)和count(1)和count(id)区别
count(字段名称)
扫描全表,判断字段可空,拿出该字段所有值,判断每一个值是否为空,不为空则累加 。
count(1)
扫描全表,但不取值,收到的每一行都是1,判断不可能是null,按值累加。
count(*)
MySQL 执行count(*)在优化器做了专门优化。因为count(*)返回的行一定不是空。扫描全表,但是不取值,按行累加。
性能方面:
count(可空字段) < count(非空字段) = count(主键 id) < count(1) ≈ count(*)
SQL语句优化
1. 尽量避免在字段开头模糊查询,会导致数据库引擎放弃索引进行全表扫描
2. order by 条件要与where中条件一致,否则order by不会利用索引进行排序
3. 对where条件后的查询条件尽量添加索引
4. 多表关联查询时,小表在前,大表在后。
5. 避免在索引列上使用内置函数
6. 对于复杂的查询,可以使用中间临时表 暂存数据;
7.避免在where子句中使用 or 来连接条件
8.尽量使用数值替代字符串类型(例如性别(sex):0代表女,1代表男;【因为引擎在处理查询和连接时会逐个比较字符串中每一个字符;而对于数字型而言只需要比较一次就够了;字符会降低查询和连接的性能,并会增加存储开销】)
9.避免在where子句中使用!=或<>操作符
SQL常用函数有哪些?
- 数学函数
- 字符串函数
- 日期和时间函数
- 条件判断函数
- 系统信息函数
- 加密函数
- 格式化函数等
左连接 右连接 内连接的区别
三种连接如果结果相同,优先使用inner join,如果使用left join左边表尽量小
inner join 内连接,只保留两张表中完全匹配的结果集;
left join会返回左表所有的行,即使在右表中没有匹配的记录;
right join会返回右表所有的行,即使在左表中没有匹配的记录;
Mysql三种常见引擎的区别
MySQL常见的三种存储引擎为InnoDB、MyISAM和MEMORY。其区别体现在事务安全、存储限制、空间使用、
内存使用、插入数据的速度和对外键的支持。
1. 事务安全:InnoDB支持事务安全,MyISAM和MEMORY两个不支持。
2. 存储限制:InnoDB有64TB的存储限制,MyISAM和MEMORY要是具体情况而定。
3. 空间使用:InnoDB对空间使用程度较高,MyISAM和MEMORY对空间使用程度较低。
4. 内存使用:InnoDB和MEMORY对内存使用程度较高,MyISAM对内存使用程度较低。
5. 插入数据的速度:InnoDB插入数据的速度较低,MyISAM和MEMORY插入数据的速度较高。
6. 对外键的支持:InnoDB对外键支持情况较好,MyISAM和MEMORY两个不支持外键。
猜你喜欢
- 2025-07-03 Python 后端开发人员必学的核心技术有哪些?
- 2025-07-03 别再说你精通数据库,MySQL的设计和列类型选取真的很有讲究
- 2025-07-03 亲眼看到字节大佬偷学Python,我陷入纠结,不知道该不该跟着学!
- 2025-07-03 揭秘Python内置函数:为什么高手都离不开它们?
- 2025-07-03 哪些百分百会问的MySQ面试题(mysql测试面试题)
- 2025-07-03 SparkSQL Join深度解析:三种实现方式全揭秘
- 2025-07-03 2分钟,快速认识什么是SQL(sql啥意思?)
- 2025-07-03 PostgreSQL技术大讲堂 - 第31讲:SQL调优技巧
- 2025-07-03 海量敏态数据存储与处理“难如登山”,TDSQL一体化内核技术竟有破解秘籍?| Q推荐
- 2025-07-03 OCP认证指南:学什么内容、考什么内容
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)