SQL 易混易错知识点笔记1(drop,role,%,localhost)
DROP 与 DELETE 的区别
-
DELETE:删除表中的数据行,属于DML操作,可回滚,可带WHERE条件
DELETE FROM table WHERE condition; -- 删除特定行 DELETE FROM table; -- 删除所有行但保留表结构
-
DROP:删除整个数据库对象(表、视图、索引等),属于DDL操作,不可回滚
DROP TABLE table_name; -- 完全删除表(结构和数据) DROP DATABASE db_name; -- 删除整个数据库
GRANT 语句中角色与用户的区别
-
角色(Role):权限集合的抽象概念,不关联主机名
CREATE ROLE 'public_role'; -- 创建角色 GRANT SELECT ON db.* TO 'public_role'; -- 授权给角色(无@host部分)
-
用户(User):具体账户,必须指定访问来源
CREATE USER 'user1'@'localhost' IDENTIFIED BY 'password'; -- 创建用户 GRANT 'public_role' TO 'user1'@'localhost'; -- 将角色授予用户
% 与 localhost 的区别
-
localhost:仅允许本地连接(通过Unix socket或本地回环IP 127.0.0.1)
CREATE USER 'user'@'localhost'; -- 只能从本机连接
-
%:允许从任何主机连接(包括远程)
CREATE USER 'user'@'%'; -- 可从任意IP连接
其他易错点
-
TRUNCATE 与 DELETE:
-
TRUNCATE是DDL,重置自增值,不触发触发器
-
DELETE是DML,保留自增值,触发触发器
-
-
HAVING 与 WHERE:
-
WHERE过滤行,在GROUP BY前执行
-
HAVING过滤组,在GROUP BY后执行
-
-
CHAR 与 VARCHAR:
-
CHAR定长,适合短且长度固定的数据
-
VARCHAR变长,适合长度变化的数据
-
-
INNER JOIN 与 LEFT JOIN:
-
INNER JOIN只返回匹配的行
-
LEFT JOIN返回左表所有行(不匹配的右表字段为NULL)
-
-
UNION 与 UNION ALL:
-
UNION去重并排序
-
UNION ALL简单合并(更快)
-