ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

数据库常用语句自查

数据库常用语句自查 数据库常用语句自查文档MySQL自查口诀写前想条件、写后看行数、删改必带 where、事务必须 commit/rollback。一、DDL 数据定义创建数据库createdatabase[ifnotexists]库名defaultcharset字符集;createdatabaseifnotexistsshopdefaultcharsetutf8mb4;删除数据库dropdatabase[ifexists]库名;dropdatabaseifexistsshop;创建表createtable表名(字段类型[约束],...);createtableuser(idintprimarykeyauto_increment,namevarchar(50)notnull,ageintdefault18,created_atdatetimedefaultcurrent_timestamp);删除表droptable[ifexists]表名;droptableifexistsuser;清空表truncatetable表名;truncatetableuser;加列altertable表名addcolumn字段类型[约束];altertableuseraddcolumnemailvarchar(100);改列类型altertable表名modifycolumn字段新类型;altertableusermodifycolumnageintdefault0;改列名altertable表名changecolumn旧名新名类型;altertableuserchangecolumnname usernamevarchar(50);删列altertable表名dropcolumn字段;altertableuserdropcolumnemail;改表名renametable旧表名to新表名;renametableusertousers;创建索引create[unique]index索引名on表名(字段);createindexidx_nameonuser(username);删除索引dropindex索引名on表名;dropindexidx_nameonuser;创建视图create[orreplace]view视图名asselect...;createviewv_adultasselect*fromuserwhereage18;删除视图dropview[ifexists]视图名;dropviewifexistsv_adult;约束速查建表时内联使用primary key 主键 not null 非空 unique 唯一 default 值 默认值 auto_increment 自增 check (条件) 检查约束 foreign key (字段) references 主表(字段) 外键二、DML 数据操作插入单条insertinto表名(字段1,字段2)values(值1,值2);insertintouser(name,age)values(张三,25);插入多条insertinto表名(字段1)values(v1),(v2),(v3);insertintouser(name)values(a),(b),(c);查询结果插入insertinto目标表select字段from源表;insertintouser_backupselect*fromuser;更新update表名set字段值where条件;updateusersetage26wherename张三;多表更新update表ajoin表bon关联条件seta.字段值where条件;updateorderojoinuseruono.uidu.idseto.nameu.namewhereu.age18;删除deletefrom表名where条件;deletefromuserwhereageisnull;⚠️ update / delete 不写 where 全表操作先写select count(*) ... where 同条件确认行数再动手。三、DQL 数据查询查全部select*from表名;select*fromuser;查指定列select字段1,字段2from表名;selectid,namefromuser;别名select字段as别名from表名;selectnameas用户名fromuser;去重selectdistinct字段from表名;selectdistinctagefromuser;条件查询select*from表名where条件;select*fromuserwhereage18andstatus1;区间 between字段between最小值and最大值whereagebetween18and60集合 in / not in字段in(值1,值2)whereidin(1,2,3)模糊 like字段like模式%匹配任意多个字符_匹配单个字符wherenamelike张%-- 张开头wherenamelike张_-- 张三、张四两个字wherenamelike%小明%-- 只要包含小明正则 regexp字段regexp表达式wherenameregexp^张[三四]$空值判断字段isnull字段isnotnullwhereageisnotnull取反not条件wherenot(agebetween18and60)排序orderby字段asc|desc多列orderbyagedesc,idasc分页limit偏移量,条数limit10,20-- 第 11~30 条偏移量 (页码 - 1) × 每页条数聚合函数selectcount(*)fromuserwhereage18;selectsum(price)fromorder;selectavg(price)fromorder;selectmax(price)fromorder;selectmin(price)fromorder;selectcount(distinctage)fromuser;分组 group byselect分组字段,聚合函数from表名groupby分组字段;selectdept_id,count(*)fromempgroupbydept_id;分组后过滤 havingselect分组字段,聚合函数from表名groupby分组字段having聚合条件;selectdept_id,count(*)ascfromempgroupbydept_idhavingc5;where 在 group by 之前执行having 在 group by 之后执行。连表 joinselect...from表a[inner|left|right]join表bon关联条件;selectu.name,o.totalfromuseruleftjoinorderoonu.ido.uid;合并结果 unionselect字段from表aunion[all]select字段from表b;selectnamefromstuunionallselectnamefromteacher;标量子查询where字段(select...);wheresalary(selectmax(salary)fromemp);in 子查询where字段in(select...);wheredept_idin(selectidfromdeptwherecity北京);exists 子查询whereexists(select1from表bwhere关联条件);whereexists(select1fromorderowhereo.uiduser.id);条件分支 case whencasewhen条件then结果else默认endselectname,casewhenage18then成年else未成年endas类型fromuser;窗口函数行号row_number()over(partitionby分组字段orderby排序字段desc)asrnselect*,row_number()over(partitionbydept_idorderbysalarydesc)asrnfromemp;窗口函数累计sum(字段)over(partitionby分组字段orderby排序字段)as别名selectuid,amount,sum(amount)over(partitionbyuidorderbycreated_at)as累计fromorder;四、TCL 事务starttransaction;updateaccountsetbalancebalance-100whereid1;savepointsp1;-- 可选设置保存点updateaccountsetbalancebalance100whereid2;commit;-- 提交或 rollback to sp1 回滚到保存点或 rollback 全部回滚忘记 commit 会锁行 → 查show processlist看Waiting for commit。五、DCL 权限创建用户createuser用户名主机identifiedby密码;createuserapplocalhostidentifiedbypass123;授权grant权限on库.表to用户主机;grantselect,insert,updateonshop.*toapplocalhost;全部权限grantallprivilegeson库.表to用户主机;grantallprivilegesonshop.*toapplocalhost;生效flushprivileges;flushprivileges;回收权限revoke权限on库.表from用户主机;revokedeleteonshop.*fromapplocalhost;删除用户dropuser用户名主机;dropuserapplocalhost;六、常用函数字符串函数concat(a,b)-- 拼接substring(hello,2,3)-- 截取elllength(你好)-- 长度utf8 下 6char_length(你好)-- 字符数2upper(abc)-- 大写ABClower(ABC)-- 小写abctrim( abc )-- 去空格abcreplace(abc,b,x)-- 替换axcleft(abcde,2)-- 左取abright(abcde,2)-- 右取delocate(bc,abcde)-- 查找位置2数值函数round(3.1415,2)-- 四舍五入3.14ceil(3.14)-- 向上取整4floor(3.14)-- 向下取整3abs(-5)-- 绝对值5mod(10,3)-- 取余1rand()-- 随机数 0~1日期函数now()-- 当前日期时间curdate()-- 当前日期curtime()-- 当前时间date_format(now(),%Y-%m-%d)-- 格式化date_add(now(),interval30day)-- 加 30 天datediff(2025-01-10,2025-01-01)-- 相差天数9year(now())-- 提取年份month(now())-- 提取月份day(now())-- 提取日常用示例-- 近 30 天数据select*fromorderwherecreated_atdate_add(curdate(),interval-30day);-- 本月第一天select*fromorderwherecreated_atdate_format(curdate(),%Y-%m-01);条件函数if(条件,真值,假值)-- 三目运算ifnull(x,默认值)-- null 兜底coalesce(a,b,c)-- 返回首个非 nullselectif(age18,成年,未成年)fromuser;selectifnull(phone,无电话)fromuser;selectcoalesce(a.phone,b.phone,无电话)fromuser;七、排查与元数据查看库表showdatabases;showtables;查看表结构desc表名;descuser;查看建表语句showcreatetable表名;showcreatetableuser;查看索引showindexfrom表名;showindexfromuser;执行计划explainselect...;explainselect*fromuserwhereage18;重点看type、key、rows是否走索引。查看运行进程showprocesslist;查慢 sql / 锁。查看字符集showvariableslikecharacter_set%;查看变量showvariableslike模式;showvariableslikeslow_query%;慢查询自查showglobalstatuslikeSlow_queries;-- 发现慢查询数高 → 用 explain 分析explainselect*fromorderwherestatus0;-- 如果看到 type all 且没走索引 → 补索引附10 条金句删改必带 where先select count(*) where 同条件确认行数后执行。分页偏移量 (页码 - 1) × 每页条数。where 在 group by 之前执行having 在 group by 之后执行。join 一定写 onleft join 的副表条件放 on 里放 where 里会变 inner join。字符串用单引号null 判断用is null不用。like 以%开头索引失效前缀匹配才能走索引。多行插入、批量 update 记得包事务。explain 看 typeconst eq_ref ref range index allall 要警惕。日期字段比较用日期函数格式化别对列做函数如date_format(列, ...)否则索引失效。备份先select ...验证dml 前检查autocommit。
返回列表