MySQL命令

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySQL命令

创建数据库

CREATE DATABASE eesy;

使用某个数据库

USE eesy;

创建表

CREATE TABLE account (

   id INT PRIMARY KEY AUTO_INCREMENT,

   NAME VARCHAR(40),

   money FLOAT

)CHARACTER SET utf8 COLLATE utf8_general_ci;

增删改查数据

增加数据 insert into

insert into table_name values(…,…);

删除数据 delete from

delete from table_name where ……

更新数据 update……set……

update table_name set 属性名='...',…… where ……

删除数据库

drop database <数据库名>;

删除数据表

DROP TABLE worker;

查看表结构

describe

DESCtable_name;

查看创建表的命令

SHOWCREATETABLEtable_name;

ALTER

当我们需要修改数据表名或者修改数据表字段时,就需要使用到 ALTER命令。

增删改表字段

使用了 ALTER 命令及 DROP 子句来删除字段

# 将 teacherInfo_table 表的 wages 字段删除

ALTERTABLE teacherInfo_table DROP wages;

使用 ADD 子句来向数据表中添加列,如下实例在表 中添加字段,并定义数据类型,字段会自动添加到数据表字段的末尾

# 在 teacherInfo 表中增加名为 wages 的字段,数据类型为 FLOAT。

ALTERTABLE teacherInfo ADD wages FLOAT;

指定新增字段的位置,可以使用MySQL提供的关键字 FIRST (设定位第一列), AFTER 字段名(设定位于某个字段之后)

ALTERTABLE testalter_tbl ADD i INTFIRST;

ALTERTABLE testalter_tbl ADD i INTAFTER c;

FIRSTAFTER 关键字可用于 ADD 与 MODIFY 子句,来修改某个字段的位置

在移动时,是必须要设置字段类型的

# 将 birthday 字段的位置改到 sex 字段的前面。

ALTER TABLE teacherInfo MODIFY birthday DATETIME AFTER NAME;

修改表字段类型及名称(modify)

如果需要修改字段类型及名称, 你可以在ALTER命令中使用 MODIFY

# 将 teacherInfo 表的 name 字段的数据类型改为 VARCHAR(30)

ALTER TABLE teacherInfo MODIFY NAME VARCHAR(30) CHARACTER SET utf8;

modify只能改字段数据类型完整约束,不能改字段名,但是change可以

# 将 num 字段改名为 t_id

ALTER TABLE teacherInfo CHANGE num t_id INT(10) NOT NULL;

修改表名

如果需要修改数据表的名称,可以在 ALTER TABLE 语句中使用 RENAME 子句来实现

# 将 teacherInfo 表改名为 teacherInfo_table

ALTER TABLE teacherInfo RENAME teacherInfo_table;

修改存储引擎

# 将 teacherInfo_table 表的存储引擎更改为 MyISAM 类型

ALTER TABLE teacherInfo_table ENGINE=MYISAM;

查看字符集

-- 创建数据库时指定字符集

create schema schema_name character set utf8 collate utf8_general_ci;


-- 创建表时指定字符集

create table table_name engine=InnoDB default charset=utf8;


-- 查看表的字符集信息

show create table table_name;


-- 修改表的默认字符集

alter table table_name default character set utf8 collate utf8_general_ci;


-- 修改字段的字符集

alter table table_name change column_name column_name varchar(255) character set utf8;

数据库

show create database eesy;

数据表

show create table t_account;

字段

show full columns from t_account;

修改字符集

数据库

ALTER DATABASE `test_db` CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';

# COLLATE指字符的排序规则

数据表

ALTER TABLE `test_db`.`user` CHARACTER SET = utf8mb4, COLLATE = utf8mb4_bin;

字段

alter table t_account modify username varchar(11) character set utf8;

将一个表的所有字段修改为指定字符集

alter table `table_name` convert to character set utf8 COLLATE utf8_bin;

分组 group by

聚合是从行的角度看

分组是从表的角度看

对数据进行分组统计的时候需要用到 GROUP BY 进行分组,GROUP BY 子句就像切蛋糕那样将表进行了分组。在GROUP BY 子句中指定的列称为聚合键或者分组列。group by子句根据聚合键,对相同的数据进行汇总,得到不同的分组

1. 通用语法

会先根据WHERE 子句指定的条件进行过滤,然后再进行汇总处理

同时使用GROUP BY 和 WHERE 的情况下句子的执行顺序为:FROMWHEREGROUP BYSELECT

SELECT <列名1>, <列名2>, <列名3>, ……

FROM <表名>

where ……

GROUP BY <列名1>, <列名2>, <列名3>, ……;

2. 聚合键中包含null

都归为一组中,显示为空

常见错误

1. 使用聚合函数时 SELECT 中书写多余列

使用聚合函数时,SELECT 子句中只能存在以下三种元素。

  • 常数
  • 聚合函数
  • GROUP BY 中指定的列(也指聚合键常数就是指常量值,数字或者字符串等。聚合函数就是count、sum之类的。最容易出问题的是写上了聚合键以外的列名。

MySQL除外,写上其它列名也可以执行

2. 在GROUP BY子句中使用列的别名

SELECT 子句中的项目可以通过AS 关键字来指定别名。但是,在GROUP BY 子句中是不能使用别名的。

SELECT product_type AS pt, COUNT(*)

FROM Product

GROUP BY pt;

这个句子出错的原因是因为SQL执行顺序的原因。之前有介绍过DBMS是先执行GROUP BY 再执行 SELECT,所以在 SELECT 中设置的别名不生效

需要注意的是,虽然这样的写法在PostgreSQL和MySQL都不会发生执行错误,但是这并不是通常的使用方法

3. 在WHERE子句中错误使用聚合函数

只有SELECT子句和HAVING子句(以及ORDER BY子句)中能够使用聚合函数,因为只有group by操作之后才有分组,才能去使用聚合函数,where操作是在group by操作之前的

实例

查询每个部门有多少员工。先按部门号进行分组,然后用 COUNT()函数来计算每组的人数(id数量)。

select d_id,count(id) from yuangong group by d_id;

# 给count(id)取名为sum

select d_id,count(id) as sum from yuangong group by d_id;

查询每个部门的最高工资。先按部门号进行分组,然后用 MAX()函数来计算最大值。

select d_id,MAX(salary) from yuangong group by d_id;

计算每个部门的总工资。先按部门号进行分组,然后用 SUM()函数来求和

SELECT d_id,SUM(salary) FROM yuangong GROUP BY d_id;

having子句

如果想要从 GROUP BY 分组中进行筛选的话,不是用 WHERE 而是使用 HAVING 来进行聚合函数的筛选。

通用语法

SELECT <列名1>, <列名2>, <列名3>, ……

FROM <表名>

where ……

GROUP BY <列名1>, <列名2>, <列名3>, ……

HAVING <分组结果对应的条件>

HAVING 子句必须写在GROUP BY 子句之后,其在DBMS 内部的执行顺序也排在GROUP BY 子句之后。

HAVING和GROUP BY 类似,可以使用在HAVING里面的表达式:

  • 常数
  • 聚合函数
  • GROUP BY 指定的列名(即聚合键)

排序 ORDER BY

descend:下降;降序排列

查询 yuangong 表,按照工资从高到低的顺序排列

SELECT * FROM yuangong ORDER BY salary DESC;

合并 union

从 bumen 表和 yuangong 表中查询出部门号,然后使用 UNION 合并查询结果

SELECT d_id FROM yuangong UNION SELECT d_id FROM bumen;

like

查询家是北京市员工的姓名、年龄、家庭住址。这里使用 LIKE 关键字

SELECT name,birthday,address FROM yuangong WHERE address LIKE '北京%';

唯一性

取消唯一性

ALTER TABLE student DROP INDEX sex;


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
9天前
|
SQL 存储 关系型数据库
MySQL进阶突击系列(01)一条简单SQL搞懂MySQL架构原理 | 含实用命令参数集
本文从MySQL的架构原理出发,详细介绍其SQL查询的全过程,涵盖客户端发起SQL查询、服务端SQL接口、解析器、优化器、存储引擎及日志数据等内容。同时提供了MySQL常用的管理命令参数集,帮助读者深入了解MySQL的技术细节和优化方法。
|
4月前
|
存储 关系型数据库 MySQL
初步了解MySQL数据库的基本命令
初步了解MySQL数据库的基本命令
46 0
|
2月前
|
tengine 关系型数据库 MySQL
Tengine、Nginx安装MySQL数据库命令教程
本指南详细介绍了在Linux系统上安装与配置MySQL数据库的步骤。首先通过下载并安装MySQL社区版本,接着启动MySQL服务,使用`systemctl start mysqld.service`命令。若启动失败,可尝试使用`sudo /etc/init.d/mysqld start`。利用`systemctl status mysqld.service`检查MySQL的服务状态,确保其处于运行中。通过日志文件获取初始密码,使用该密码登录数据库,并按要求更改初始密码以增强安全性。随后创建一个名为`tengine`的数据库,最后验证数据库创建是否成功以及完成整个设置流程。
|
3月前
|
存储 关系型数据库 MySQL
MySQL基础命令及使用示例
这些基础命令构成了与MySQL数据库交互的核心,理解并掌握它们对于进行有效的数据库操作至关重要。在实际使用中,建议结合实际案例和需求来练习这些命令,以加深理解和提高效率。
34 3
|
3月前
|
存储 关系型数据库 MySQL
MySQL基础命令及使用示例
这些基础命令构成了与MySQL数据库交互的核心,理解并掌握它们对于进行有效的数据库操作至关重要。在实际使用中,建议结合实际案例和需求来练习这些命令,以加深理解和提高效率。
72 4
|
2月前
|
关系型数据库 MySQL 数据库
Mysql 常用命令
Mysql 常用命令
23 0
|
5月前
|
存储 关系型数据库 MySQL
(十五)MySQL命令大全:以后再也不用担心忘记SQL该怎么写啦~
相信大家在编写SQL时一定有一个困扰,就是明明记得数据库中有个命令/函数,可以实现自己需要的功能,但偏偏不记得哪个命令该怎么写了,这时只能靠盲目的去百度,以此来寻找自己需要的命令。
177 28
|
5月前
|
SQL 关系型数据库 MySQL
MySQL删除表数据、清空表命令(truncate、drop、delete 区别)
MySQL删除表数据、清空表命令(truncate、drop、delete区别) 使用原则总结如下: 当你不需要该表时(删除数据和结构),用drop; 当你仍要保留该表、仅删除所有数据表内容时,用truncate; 当你要删除部分记录、且希望能回滚的话,用delete;
|
5月前
|
SQL 关系型数据库 MySQL
mysql性能调优:EXPLAIN命令21
【7月更文挑战第21天】掌握SQL性能调优:深入解析EXPLAIN命令的神奇用法!
64 1
|
5月前
|
存储 SQL Cloud Native
云原生数据仓库使用问题之运行MySQL命令发现中文内容变成了问号,该如何解决
阿里云AnalyticDB提供了全面的数据导入、查询分析、数据管理、运维监控等功能,并通过扩展功能支持与AI平台集成、跨地域复制与联邦查询等高级应用场景,为企业构建实时、高效、可扩展的数据仓库解决方案。以下是对AnalyticDB产品使用合集的概述,包括数据导入、查询分析、数据管理、运维监控、扩展功能等方面。