1.truncate、delete、drop的区别
(1)truncate、drop是不可以rollback的,但是delete是可以rollback的。DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作。TRUNCATE TABLE 则一次性地从表中删除所有的数据并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器。执行速度快。
(2)TRUNCATE 只能对TABLE;DELETE可以是table和view。drop、truncate不能删除有外键约束的表。
(3)TRUNCATE 和DELETE只删除数据,而DROP则删除整个表(结构和数据)。TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变,但其状态会变为:invalid。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 DELETE。如果要删除表定义及其数据,请使用 DROP TABLE 语句。
2.连接的种类
一、外连接
1.左连接:left join 或 left outer join
左连接是根据某个条件以及左边的表连接数据,右边的表没数据的话则填null;
select 查询字段 from 表1 leftr join 表2 on 表1.字段1 = 表2.字段2
2.右连接:right join 或 right outer join
右连接是根据某个条件以及右边的表连接数据,左边的表没数据的话则填null;
select 查询字段 from 表1 right join 表2 on 表1.字段1 = 表2.字段2
3.完整外部联接:full join 或 full outer join
完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。
二、内连接:join 或 inner join
内连接是根据某个条件连接两个表共有的数据所有字段;
三、交叉连接(完全):cross join (不带条件where...)
没有 WHERE 子句的交叉联接将产生联接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。(table1和table2交叉连接产生3*3=9条记录)
3.数据库三范式
- 第一范式(1NF):是指数据库表的每一列都是不可分割,即列不可分。
- 第二范式(2NF):非主属性必须完全依赖主键,不能部分依赖主键,即不能部分依赖。
- 第三范式(3NF):属性不依赖于其它非主属性,即不能传递依赖。