数据库篇(六)——数据库命令相关的问题

一、truncate与delete与drop的区别:

参考:https://blog.csdn.net/ws0513/article/details/49980547

1、SQL中的drop、delete、truncate都表示删除,但是三者有一些差别:

  • delete和truncate只删除表的数据不删除表的结构
  • 速度,一般来说: drop> truncate >delete
  • delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;
  • 如果有相应的trigger,执行的时候将被触发. truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger.

truncate table:删除内容,不删除定义,释放空间;
delete table:删除内容,不删除定义,不释放空间;
drop table:删除内容和定义,释放空间。

1、truncate table 表名:只能删除表中全部数据。
  delete from 表名 where...:能删除表中全部数据,也能删除部分数据。
2delete from:记录是一条条删的,锁删除的每行记录都会进日志;而truncate一次性删除整个页,因此日志只记录页释放。
3truncate删除后,不能回滚。delete可以回滚。
4truncatedelete执行速度快
5delete执行后,删除的数据占用的存储空间还在,还可以恢复数据;
truncate删除的数据占用的存储空间不在,不可以恢复数据。

2、drop、delete与truncate分别在什么场景之下使用?

  • 不再需要一张表的时候,用drop
  • 想删除部分数据行时候,用delete,并且带上where子句
  • 保留表而删除所有数据的时候用truncate

二、SQL的授权语句和收回权限的语句

grant 权限 on 数据库对象 to 用户

grant insert on scott.Employees to user1,user2;
grant delete on scott.Employees to user1,user2;
grant select on scott.Employees to user1,user2;
grant update on scott.Employees to user1,user2;

revoke 权限 on 数据库对象 from 用户

三、新加一行记录,添加一个列字段,修改列?

插入:

insert into 表名(字段1,字段2...)values("...","...",...)

增加列:

alter table 表名 add (column) 列名 列的数据类型

删除列

alter table 表名 drop (column) 列名

四、count(*)、count(列名)、count(数字)的区别:

count(*):与count(1)的结果一样,统计总行数,包括对null的统计
count(列名):是不包括对null的统计

五、EXISTS关键字的使用方法:

表示存在。内层查询语句不返回查询的记录,而是返回一个真价值。
示例:

select * from employees
            where exists
            (select d_name from department where d_id=1003);

若存在d_id=1003在,则内层查询语句返回一个true,外层查询语句开始查询;若返回false,外层语句不查询。

六、判断字段值是否为空?

  • 字段是空:where 字段名 is null
  • 不为空:where 字段名 is not null 或者 where Not 字段名 is null

七、问题:有一表Student,有三个字段:name、course、score,每一个学生有三门课程(如数学、语文、英语),写SQL语句查找出三门课程成绩都大于80的学生。

方法一:

select DISTINCT A.name
from Student A
where A.name not in
(select Distinct S.name from Student S where S.score<80 );

方法二:

select S.name from Student S 
group by S.name Having MIN(S.score)>=80;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值