数据库(自用笔记)
一、基础常用语句汇总持续更新show tables/databases数据库名表名大小写敏感; use databases(必须写在一行); create ; flush; alter; describe; grant select,...; update; distance; order by; insert; is null/is not null; like; count();TIMESTAMPDIFFAS;inner joinjoin on;SQL书写顺序和执行顺序不一样常见执行顺序是from/join- where- group by-count/sum/max-having/..-select-order by-limit先有数据来源才能筛选先筛选再决定展示哪些字段要深刻理解执行顺序总结来说就是先拿原始数据再筛掉不要的再挑出要显示的字段再排序最后截取前几条。1、注意host、user name、passward2、不要忘了加分号Multiple-line statements commonly occur by accident when you intend to issue a query on a single line, but forget the terminating semicolon. In this case, mysql waits for more input:mysql SELECT USER()-3、you can use mysql as a simple calculator: mysql SELECT SIN(PI()/4), (41)*5;4、MySQL 支持自由格式输入它会收集输入的各行但直到看到分号才会执行。5、在字符串收集过程中会出现 和 提示换句话说就是 MySQL 正在等待字符串的完成。在 MySQL 中你可以用 或 字符来书写字符串例如hello 或 goodbye而且 mysql 允许你输入跨多行的字符串 At this point, what do you do? The simplest thing is to cancel the query. However, you cannot just type \c in this case, because mysql interprets it as part of the string that it is collecting. Instead, enter the closing quote character (so mysql knows youve finished the string), then type \c:mysql SELECT * FROM my_table WHERE name Smith AND age 30; \cmysql6、CREATE [**TEMPORARY] TABLE [IF NOT EXISTS] 表名 (列名 数据类型 [约束],列名 数据类型 [约束],...[表级约束]) [ENGINE引擎] [CHARSET字符集] [COMMENT注释];7、GRANT ALL ON menagerie.* TO your_mysql_nameyour_client_host;GRANT授权关键字ALL授予“所有权限”包括 SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER 等。ON menagerie.*指定权限的作用对象。格式数据库名.表名menagerie.* 代表 menagerie 数据库里的所有表。TO your_mysql_nameyour_client_host指定授予给哪个用户。your_mysql_nameMySQL 用户名。your_client_host允许该用户从哪台主机连接。localhost 表示仅限本机% 表示任意主机。8、DISTINCT是 SQL 中用于去重的关键字**它用在 SELECT语句里让查询结果中的重复行只出现一次。--基本语法SELECT DISTINCT 列名 FROM 表名;--也可以对多列一起使用此时会按这几列的组合去重。例如查看所有物种去重SELECT species FROM pet;可能返回很多重复的 猫、狗SELECT DISTINCT species FROM pet;只返回 猫、狗每个物种一行--多列组合去重SELECT DISTINCT owner, species FROM pet;返回“每个人养了哪些不同物种”的组合组合不重复。--对 NULL 的处理DISTINCT 会把所有的 NULL 视为相同所以多行 NULL 值只会返回一行。--和 COUNT 连用常用统计有多少个不同的物种SELECT COUNT(DISTINCT species) FROM pet;9、INSERT是 SQL 中用于向表中添加新数据行的命令。INSERT 是“新增”UPDATE 是“修改”---基本语法最常见的写法是指定列名并赋值INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ...);必须注意列名和值的顺序、数量、类型要一一对应。结合你的 pets 表演练:插入一行完整数据所有列都给值INSERT INTO pets (name, owner, species, sex, birth, death)VALUES (旺财, 张三, 狗, 公, 2020-03-15, NULL);如果列的顺序和表结构完全一致可以省略列名不推荐容易出错INSERT INTO pets VALUES (咪咪, 李四, 猫, 母, 2021-07-20, NULL);推荐做法始终写出列名这样即使表结构增加字段你的 SQL 也不会立刻崩。---一次插入多行高效做法INSERT INTO pets (name, owner, species, sex, birth) VALUES(小花, 王五, 猫, 母, 2022-01-01),(小黑, 赵六, 狗, 公, 2021-05-05),(小绿, 钱七, 鸟, 母, 2023-12-12);---使用 SET 语法类似 UPDATE 的写法MySQL 特有适合只插一部分列而且可读性好INSERT INTO pets SET name豆豆, owner小明, species仓鼠;未指定的列会使用默认值或 NULL。--- 从另一张表复制数据 :INSERT INTO pets (name, owner, species, sex, birth)SELECT name, owner, species, sex, birth FROM old_pets WHERE birth 2020-01-01;这常用于数据迁移或归档。10、You cannot use arithmetic comparison operators such as , , or to test for NULL.Because the result of any arithmetic comparison with NULL is also NULL, you cannot obtain any meaningful results from such comparisons.这种表达式通常出现在 WHERE、CASE 或 IF 里比如查询还没录入性别的宠物SELECT * FROM pets WHERE sex IS NULL;查询已经记录死亡日期的宠物SELECT * FROM pets WHERE death IS NOT NULL;在结果集中将 NULL 显示为 未知SELECT name, IF(sex IS NULL, 未知, sex) AS sex_display FROM pets;11、SELECT 列名 FROM 表名 WHERE 列名 LIKE 匹配模式;两个核心通配符%匹配 0 个或多个 任意字符%猫 表示所有以“猫”结尾的_匹配 1 个 任意字符 __猫 表示两个字后面跟“猫”。NOT LIKE反向模糊查询查找名字不以 B 开头的宠物SELECT * FROM pets WHERE name NOT LIKE B%;12、AS 在 SQL 里是一个别名Alias关键字用来给列或表起一个临时的、更易懂的名字。它不会改变原始的表或列只在查询结果中生效。让结果集的列名更好看或者简化长表达式。基本语法SELECT 列名 AS 别名 FROM 表名;例子你刚见过的SELECT TIMESTAMPDIFF(YEAR, birth, date) AS age FROM pet;如果不加 AS age结果的列名会是很长的 TIMESTAMPDIFF(YEAR, birth, date)加了之后列名就是简洁的 age。13、假设 左表 (pets) 是宠物信息右表 (event) 是事件记录JOIN 类型保留左表 (pets) 所有行保留右表 (event) 所有行结果说明INNER JOIN❌ 不保留❌ 不保留只保留两边都匹配的行。LEFT JOIN✅ 全部保留❌ 不保留左表行全部保留右表匹配不上就填NULL。RIGHT JOIN❌ 不保留✅ 全部保留右表行全部保留很少用可转化为 LEFT JOIN。FULL OUTER JOIN✅ 全部保留✅ 全部保留两边都保留MySQL 不直接支持需用UNION模拟。典型业务需求列出所有用户及其最近订单即使某个用户从来没有下过单也要显示用户信息订单部分留空。列出所有文章及其作者一般都有作者但如果作者被误删了文章依然要显示作者名显示为 NULL 或 “未知”。用你的宠物数据你想列出所有宠物即使有些宠物从未发生过事件如 Fluffy 没有事件也要显示宠物信息事件列留空。