一、主键约束与“not null unique”区别
1、作为Primary Key的域/域组不能为null,而Unique Key可以。
2、在一个表中只能有一个Primary Key,而多个Unique Key可以同时存在。unique not null 可以 将表的一列或多列定义为唯一性属性,而primary key设为多列时,仅能保证多列之和是唯一的, 具体到某一列可能会重复。
3、更大的区别在逻辑设计上。Primary Key一般在逻辑设计中用作记录标识,这也是设置 Primary Key的本来用意,而Unique Key只是为了保证域/域组的唯一性。
二、数据库设计的三大范式
什么是范式?
为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。 在关系型数据库中这种规则就叫做范式。
第一范式(1NF)确保每列保持原子性
第二范式(2NF)属性完全依赖于主键
第三范式(3NF)属性不依赖于其它非主属性属性直接依赖于主键
三、MyISAM和InnoDB的区别:
MySQL从5.5之后,默认采用InnoDB引擎。Innodb支持事物,对比MylISAM的存储引擎,InnoDB写的处理效率差一些,并且会占用更多的磁盘空间以保存数据和索引。MyISAM只缓存索引,不缓存真实数据;InnoDB不仅缓存索引还要缓存真实数据,对内存要求较高,而且内存大小对性能有决定性的影响。
MyISAM提供了大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM不支持事务、行级锁、外键,有一个毫无疑问的缺陷就是崩溃后无法安全恢复。 5.5之前默认的存储引擎 。优势是访问的速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用,故而count(*)的查询效率很高。
四、having和where的区别:
where是对表中每一条数据进行判断
having是对分组聚合后的数据进行条件筛选
五、delete truncate drop的区别:
delete只删数据; truncate不仅删数据 还把索引删掉了
drop 不仅删数据,还删除了索引,表结构也删了