MySQL基础语法和语句
MySQL启动
开启服务后
使用mysql [-h 127.0.0.1] [-p 3306] -u root -p的方式进行登录
SQL通用语法
单行注释:--或者#(MySQL特有)
多行注释/*注释类容*/
DDL(Data Definition Language)
修改表
ALTER TABLE tablename MODIFY[COLUMN] colunm_defintion[FIRST\AFTER col_name]
修改表emp的ename字段定义,将varchar(10)改为varchar(20):
alter table emp modify ename varchar(20);
增加表字段,语法如下
ALTER TABLE tablename ADD[COLUMN] column_defintion[FRISE\AFTER col_name]
alter table user add gender char(1);
在表emp中新增字段age,类型为int(3)
alter table emp add age int(3);
删除表字段,语法如下
ALTER TABLE tablename DROP [COLUMN] col_name
将字段age删除掉
ALTER TABLE emp DROP age;
字段改名,语法如下
ALTER TABLE tablename CHANGE [COLUMN] old_col_name column_defintion[FIRST\AFTER col_name]
例如,将age改名为age1,同时修改字段类型为int(4);
ALTER TABLE emp CHANGE age age1 int(4);
注意:change和modify都可以修改表的定义,不同的是change后面需要写两次列名,不方便,但是change的有点是可以修改列名称,modify不能
修改字段排列顺序 字段增加和修改语法(ADD/CHANGE/MODIFY)中,都有一个可选项first|after column_name,这个选项可以用来修改字段在表中的位置,ADD增加的新字段默认是加在表的最后位置,而CHANGE/MODIFY默认都不会改变字段位置
将新增的字段birth date加在ename之后

修改字段age ,将它放在最前面

注意 : CHANGE /FIRST/AFTER COLUMN这些关键字都属于MySQL在标准SQL上的扩展,在其他数据库上不一定适用。
更改表名,语法如下
ALTER TABLE tablename RENAME [TO] new_tablename
将emp表名修改成emp1

三种删除比较
drop table
drop 是直接删除表信息,速度最快,但是无法找回数据
例如删除 user 表:
drop table user;
truncate table
truncate 是删除表数据,不删除表的结构,速度排第二,但不能与where一起使用
例如删除 user 表:
truncate table user;
delete from
delete 是删除表中的数据,不删除表结构,速度最慢,但可以与where连用,可以删除指定的行
例如删除user表的所有数据
delete from user;
删除user表的指定记录
delete from user where user_id = 1;
三种方式的区别
相同点
truncate和不带where子句的delete,drop都会删除表内的数据;
drop,truncate都是DDL语句(数据定义语言),执行后会自动提交;
不同点
语句类型:delete语句是数据库操作语言(DML),truncate,drop是数据库定义语言(DDL);
效率:一般来说 drop > truncate> delete;
是否删除表结构:truncate和delete 只删除数据不删除表结构,truncate 删除后将重建索引(新插入数据后id从0开始记起),而 delete不会删除索引 (新插入的数据将在删除数据的索引后继续增加),drop语句将删除表的结构包括依赖的约束,触发器,索引等;
安全性:drop和truncate删除时不记录MySQL日志,不能回滚,delete删除会记录MySQL日志,可以回滚;
返回值:delete 操作后返回删除的记录数,而 truncate 返回的是0或者-1(成功则返回0,失败返回-1);
小知识
delete 与 delete from 区别
如果只针对一张表进行删除,则效果一样;如果需要联合其他表,则需要使用from
delete tb1 from tb1 m where id in (select id from tb2);
用法总结
希望删除表结构时,用 drop;
希望保留表结构,但要删除所有记录时, 用 truncate;
希望保留表结构,但要删除部分记录时, 用 delete。
DML(Data Manipulate Language)
DQL(Data Query Language)
聚合函数
聚合函数作用于字段,而且NULL值不参与计算
关于having
这里需要注意,在group by执行完成之后,已经分组完成的列是不会在改变了的,
此时可以根据having条件把不需要的列移除,但是不能替换列,如:
select d.name Department,e.name Employee,e.salary Salary from employee e inner join department d on e.departmentId = d.id group by e.departmentId 查询出的分组只能看见满足条件(select的条件)的每一个分组的第一行数据,其他行数据隐藏,某些简单情况下,分组得到的结果和DISTINCT相似 #having count(*)>1 having salary=max(salary) 此时我的想法是找出每一个分组的薪水中的最高者,但事实是,此语句会对现有的列进行过滤,如果当前列不是该分组里面薪水最高的,则会被剔除
值得注意的是,当使用LIMIT的时候
如果本来只有3条语句,然后如果你的语句是limit 4,1 返回第4条数据开始的1条数据(下标从0开始)
这种情况下,没有数据要返回,所以返回只有表头的一张表,没有数据行,也不会返回NULL
分组查询
具体实例
DQL执行顺序
总结
DCL(Data Control Language)
权限控制
可以赋予及修改的权限(部分)
.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下