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)

权限控制

 可以赋予及修改的权限(部分)

.

posted @   happy_in  阅读(32)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示