Hi!欢迎光临陕西省的权威思科、华为、Oracle、红帽、深信服、微软认证培训中心!
| 029-88235527
您现在所在位置:首页 > 新闻资讯 > 行业新闻 >

MySQL的基础知识数据库设计三范式是什么?

发布日期:2020-08-20 16:24:13点击次数:

分享到:
说一下MySQL数据库设计三范式是什么?
 
1范式:1NF 是对属性的原子性约束,要求属性具有原子性,不可再分解;(只要是关系型数据库都满足1NF)
2范式:2NF 是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;
3范式:3NF 是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余,没有冗余的数据库设计可以做到。
但是,没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据,具体做法是:在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑,降低范式就是增加字段,允许冗余。
SQL 语句有哪些分类?
 
DDL:数据定义语言(create alter drop)
DML:数据操作语句(insert update delete)
DTL:数据事务语句(commit collback savapoint)
DCL:数据控制语句(grant revoke)
数据库删除操作中的 delete、drop、 truncate 区别在哪?
 
当不再需要该表时可以用 drop 来删除表;
当仍要保留该表,但要删除所有记录时, 用  truncate 来删除表中记录。
当要删除部分记录时(一般来说有 WHERE 子句约束) 用 delete 来删除表中部分记录。
什么是 MySql 视图?
 
视图是虚拟表,并不储存数据,只包含定义时的语句的动态数据。
创建视图语法:
CREATE
    [OR REPLACE]
    [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
    [DEFINER = user]
    [SQL SECURITY { DEFINER | INVOKER }]
    VIEW view_name [(column_list)]
    AS select_statement
    [WITH [CASCADED | LOCAL] CHECK OPTION] 
参数说明:
OR REPLACE:如果视图存在,则替换已有视图。
ALGORITHM:视图选择算法,默认算法是 UNDEFINED(未定义的)由 MySQL 自动选择要使用的算法。
DEFINER:指定视图创建者或定义者,如果不指定该选项,则创建视图的用户就是定义者。
SQL SECURITY:SQL 安全性,默认为 DEFINER。
select_statement:创建视图的 SELECT 语句,可以从基表或其他视图中选择数据。
WITH CHECK OPTION:表示视图在更新时保证约束,默认是 CASCADED。
使用 MySQL 视图有何优点?
 
操作简单方便。视图用户完全不需要关心视图对应的表的结构、关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集。
数据更加安全。视图用户只能访问视图中的结果集,通过视图可以把对表的访问权限限制在某些行和列上面。
数据隔离。屏蔽了源表结构变化对用户带来的影响,源表结构变化视图结构不变。
MySql 服务默认端口号是多少 ?
 
默认端口是 3306
查看端口命令:> show variables like 'port';
用 DISTINCT 过滤多列的规则?
 
DISTINCT 用于对选择的数据去重,单列用法容易理解。比如有如下数据表 tamb: 
 name        number
   Tencent      1
   Alibaba      2
   Bytedance    3
   Meituan      3
 
查询语句:SELECT DISTINCT name FROM table tamb 结果如下:  
 name       
   Tencent   
   Alibaba    
   Bytedance 
   Meituan  
 
如果要求按 number 列去重同时显示 name ,你可能会写出查询语句:
SELECT DISTINCT number, name FROM table tamb
多参数 DISTINCT 去重规则是:把 DISTINCT  之后的所有参数当做一个过滤条件,也就是说会对 (number, name)整体去重处理,只有当这个组合不同才会去重,结果如下:    
 number   name
         1  Tencent
         2  Alibaba
         3  Bytedance
         3  Meituan
 
从结果来看好像并没有达到我们想要的去重的效果,那要怎么实现「按 number 列去重同时显示 name」呢?可以用 Group By 语句:
SELECT number, name FROM table tamb GROUP BY number 输出如下,正是我们想要的效果:    
  number   name
         1  Tencent
         2  Alibaba
         3  Bytedance
 
什么是存储过程?
 
一条或多条 sql 语句集合,有以下一些特点:
存储过程能实现较快的执行速度。
存储过程可以用流程控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。
存储过程可被作为一种安全机制来充分利用。
存储过程能够减少网络流量。
 delimiter 分隔符
create procedure|proc proc_name()
begin
    sql语句
end 分隔符
delimiter ;    --还原分隔符,为了不影响后面的语句的使用
--默认的分隔符是;但是为了能在整个存储过程中重用,因此一般需要自定义分隔符(除\外)
 
show procedure status like ""; --查询存储过程,可以不适用like进行过滤
drop procedure if exists;--删除存储过程
 
存储过程和函数好像差不多,你说说他们有什么区别?
 
存储过程和函数是事先经过编译并存储在数据库中的一段 SQL 语句的集合,调用存储过程和函数可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。
相同点
存储过程和函数都是为了可重复的执行操作数据库的 SQL 语句的集合。
存储过程和函数都是一次编译后缓存起来,下次使用就直接命中已经编译好的 sql 语句,减少网络交互提高了效率。
不同点
标识符不同,函数的标识符是 function,存储过程是 procedure。
函数返回单个值或者表对象,而存储过程没有返回值,但是可以通过 OUT 参数返回多个值。
函数限制比较多,比如不能用临时表,只能用表变量,一些函数都不可用等,而存储过程的限制相对就比较少。
一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。
函数的参数只能是 IN 类型,存储过程的参数可以是 IN OUT INOUT 三种类型。
存储函数使用 select 调用,存储过程需要使用 call 调用。
本文是 MySQL 系列,都是非常基础的内容,但越是基础越显得重要,想了解更多IT软件学习方面的内容,欢迎到西安鸥鹏IT教育进行咨询,是专业的IT项目管理、项目开发、IT人力资源顾问公司。OPENLAB为几乎所有相关知名IT企业CISCO,MICROSOFT,REDHAT,华为,ORACLE的授权培训机构,同时是PROMETRIC和VUE授权的相关考试中心,可以组织学员参加认证考试并获得IT资格认证。为您提供最好的优质服务。