mysql常用指令操作

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

基本操作:

-- 登入数据库
    mysql -uroot  -proot -h 127.0.0.1  -P 3306
    
-- 查看数据库、表
    show   databases
    show   tables
    
-- 查看指令的用法
    ?  create
    
-- 创建数据库
    create  database  databaseName;
    
-- 查看创建过程,加\G纵向排列
   show   create  database  databaseName \G ;
   
-- 选择数据库
   use  databaseName;
   
-- 创建数据库
   create  table   IF NOT EXISTS tableName(
     id  int(11) primary key  auto_increment,
     name varchar(32) not null  UNIQUE,
     sex  char(1)  default '男',
     deptId int(11), 
     -- 定义主键
     primary key(id),
     -- 定义外键
     CONSTRAINT fk_tableName_deptId FOREIGN KEY(deptId) REFERENCES tb_dep1(id)  on delete 
     cascade on update cascade,  -- 删除、更新联动
     -- 定义唯一健
     CONSTRAINT STH UNIQUE(name)
   )ENGINE=InnoDB  DEFAULT CHARSET=utf8  COLLATE=utf8_unicode_ci  auto_increment=1000  
  --  从1000开始自增
  COLLATE:字符的存储方式,有三种值:
           utf8_bin:是将字符串中的每个字符用二进制数据存储,区分大小写。
           utf8_general_cs:(case sensitive):大小写敏感
           utf8_general_ci:(case insensitive):大小写不敏感
   
-- 查看表结构
    desc  tableName;

   

外键:

    为保证数据的完整性而定义:

    一个表的外键必须为主键,可以是本表,也可以使其他表。

    外键字段添加数据必须为主键中已有的字段,或者是null。

    创建外键时父子表中的字段类型必须一致,父子表的存储引擎必须都是InnoDB。

    外键的联动策略:

       cascade:  主从联动

       no action: 从表限制主表

         

    如果一个主键是其他表的外键,则这个字段删除前必须删除外键所在的记录。    

创建外键:

CONSTRAINT fk_tableName_deptId FOREIGN KEY(deptId) REFERENCES tb_dep1(id)

alter table tableName add FOREIGN KEY(deptId) REFERENCES tb_dep1(id)

   

10. 修改表名
    alter  table oldTableNmae  rename [to] newTablName
    
11. 修改字段类型、排列顺序
    alter table tableName  modify column  varchar(32)   [frist][after column]
    
12. 修改字段名
    alter table tableName change oldcolumn   newcolumn  varchar(32)
    
13. 添加字段(在第一列或在某一列之后)
    alter table tableName add newcolumn  varchar(32)  [frist][after column]
   
14. 删除字段
    alter  table tableName drop  column
    
15. 修改表的引擎
    alter  table tableName  engine=InnoDB;
16. 删除、添加外键约束
    alter table  tableName drop  FOREIGN KEY(deptId)    REFERENCES tb_dep1(id);
    alter table tableName add  CONSTRAINT fk_tableName_deptId FOREIGN KEY(deptId) REFERENCES tb_dep1(id)    on delete no action on update cascade
    
17. 添加主键
    alter table tableName ADD primary key(id);
    
18. 添加唯一约束
    添加唯一约束即给该字段添加了一个索引
    alter table tableName add unique(id);
    
19. 删除约束
     alter table tableName drop index indexName; -- 删除有名称索引
     drop index columnName on tableName;    -- 删除没名称索引
20. 查看警告:
     show warnings;
21. 查看数据库大小
     select  table_name,index_length,data_length from information_schema.tables where table_schema like 'schoolBD'

DML    

       

1. 插入数据
    insert  into  tableName  (column1,column2)  values('aa','bb'),('aa','bb');
    insert  into  tableName  values('aa','bb'),('aa','bb');
    
    如果数据存在则执行更新操作
    insert  into  tableName  (column1,column2)  values('aa','bb'),('aa','bb') ON DUPLICATE KEY UPDATE column1=VALUES(column1)+VALUES(column2);
    
    表数据的复制
    insert  into  tableName  (column1,column2)  select column1,column2 from oldTableNmae;
    如果数据存在就替换,以主键、唯一健确定唯一性。不存在直接新增。
    replace into tableName (column1,column2)  values('aa','bb'),('aa','bb');
    
    
2. 更新数据
    update tableName set column1=value1,column2=value2 where condition;
    
3. 删除数据
   delete from  tableName where condition;
   truncate table tableName;
   
   区别:delete 是DML语句,是删除表数据。
         truncate 是DDL语句,是将删表后再建表。因此清表时执行速度比delete 块
  
   关联删除,需指定删除的表  
   delete  t1 from tableName1 t1 left join tableName2 t2 on t1.id =t2.id

   

25. 运算符:

    1. = 与安全等于运算符<=> 区别:=不能用来比较null,<=>可以用来比较null。相等返回1,不等返回0.

    2. !=与<> 没任何区别。都不能用来比较null。

   

26. 字母比较运算符:

    1.  least(0,20,30),不能比较null,  greatest(10,20,30)

   

27. 视图

    视图是一种虚表,它并不真实存在,它依赖于原表中的数据。

    创建视图可以以表为基表,也可以以视图为基表。

   

    1. create  view tableNameView  as  select columnName1 as 列1,columnName2 as 列2 from  tableName;

    2. create  view tableNameView (列1,列2)  as  select columnName1,columnName2 from  tableName;

   

    视图的增删改:

    1. 如果视图以单表为基表,则可以删除、新增,多表不行。

    2. 新增时基表中不在视图中的字段允许为空。

    3. 视图更新只能更新视图中的字段,不能对基表中不在视图中的字段进行操作。

    4. 如果视图中数据与基表不是一对一关系,或者定义视图时使用了聚合函数、having、group by、join等sql块会使得视图不可更新。

    5. 尽可能的不要使用视图去更新数据,它得使得更新操作更加复杂而导致失败。

   

    视图的三种算法:

     1. undefined: mysql优化器看着办。

     2. merge: 视图定义的sql与外层合并

     3. temptable:视图定义的sql先执行生成临时表再执行外层sql。

28  where和having的区别

1、having与where的区别

where:

  • 是作用在查询结果进行分组之前,过滤掉不符合条件的数据。
  • where中不能包含聚合函数。(注意是:where后面子句不能有聚合函数,而在含有where中可以使用聚合函数)
  • 作用在group by和having字句前
  • 是作用于对表与视图

having:

  • 是作用在查询结果分组之后,筛选满足条件的组,过滤掉数据。
  • 通常跟聚合函数一起使用。
  • having子句在聚合后对组记录进行筛选。
  • 是作用于分组

2、使用having例子

(1)计算出每个班级的总成绩

SELECT CLASS,SUM(TOTAL_SCORES) FROM student_score GROUP BY CLASS;

(2)筛选出总成绩大于505的班级

SELECT CLASS,SUM(TOTAL_SCORES) FROM student_score GROUP BY CLASS HAVING SUM(TOTAL_SCORES)>505;

这里用where SUM(TOTAL_SCORES)>505的话,将会出错,因为表中根本没有总成绩分数这项,这是分组之后才有的

3、使用having与where联立的例子

利用having与where联立查询

实例:查询班级中分数大于250的学生的总成绩大于531的班级有哪几个班。

执行顺序为:

开始 -> where行记录筛选 -> group by分组 -> 聚合函数(sum、max、min)计算 -> having分组筛选->结束

具体的如下:

  • where筛选学生成绩大于250的所有学生。
  • group by分组班级
  • sum计算分组班级中学生的总分数
  • having筛选总成绩大于531的班级

具体代码如下:

-- 1.WHERE筛选出分数大于250的学生
SELECT CLASS,SNAME,TOTAL_SCORES FROM student_score WHERE TOTAL_SCORES>250;
-- 4.SUM计算之后,having筛选总成绩大于531的分组 
SELECT CLASS,SUM(TOTAL_SCORES) AS SUM_SCORE 
FROM student_score 
WHERE TOTAL_SCORES>250 
GROUP BY CLASS 
HAVING SUM(TOTAL_SCORES)>531;

     

   

     

   

   

   

   

 

 

   

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5月前
|
SQL 运维 关系型数据库
MySQL 中 GRANT 操作会引起复制中断吗?
GRANT 操作并不是一个原子性操作,不管执行成功与否,都会触发一个隐式重载授权表的行为。 在生产环境中需要规范用户创建及授权的操作,不推荐使用 DML 语句去直接变更 mysql.user 表,可能会引发其他的问题,若使用了 DML 语句进行变更, 需要手工执行 flush privileges。
73 4
|
5月前
|
JavaScript 关系型数据库 MySQL
创建nodejs项目并接入mysql,完成用户相关的增删改查的详细操作
创建nodejs项目并接入mysql,完成用户相关的增删改查的详细操作
73 0
|
6月前
|
关系型数据库 MySQL
【mysql技巧】如何在这个mysql语句执行前加个前提,也就是只有表里没有相同数据才进行添加插入操作
【mysql技巧】如何在这个mysql语句执行前加个前提,也就是只有表里没有相同数据才进行添加插入操作
43 1
|
5月前
|
存储 关系型数据库 文件存储
面试题MySQL问题之简单的SELECT操作在MVCC下加锁如何解决
面试题MySQL问题之简单的SELECT操作在MVCC下加锁如何解决
52 2
|
5月前
|
SQL 关系型数据库 MySQL
实时计算 Flink版操作报错合集之从mysql读数据写到hive报错,是什么原因
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
5月前
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版操作报错合集之运行mysql to doris pipeline时报错,该如何排查
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
5月前
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版操作报错合集之整库同步mysql到starRock提交任务异常,该如何处理
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
5月前
|
SQL 关系型数据库 MySQL
「Python入门」python操作MySQL和SqlServer
**摘要:** 了解如何使用Python的pymysql模块与MySQL数据库交互。首先,通过`pip install pymysql`安装模块。pymysql提供与MySQL的连接功能,例如创建数据库连接、执行SQL查询。在设置好MySQL环境后,使用`pymysql.connect()`建立连接,并通过游标执行SQL(如用户登录验证)。注意防止SQL注入,使用参数化查询。增删改操作需调用`conn.commit()`来保存更改。pymssql模块类似,但导入和连接对象创建略有不同。
71 0
「Python入门」python操作MySQL和SqlServer
|
5月前
|
SQL 存储 关系型数据库
|
6月前
|
关系型数据库 MySQL 数据库
『Django』模型入门教程-操作MySQL
一个后台如果没有数据库可以说废了一半。日常开发中大多数时候都在与数据库打交道。Django 为我们提供了一种更简单的操作数据库的方式。 在 Django 中,模型(Model)是用来定义数据库结构的类。每个模型类通常对应数据库中的一个表,类的属性对应表中的列。通过定义模型,Django 的 ORM(Object-Relational Mapping)可以将 Python 对象映射到数据库表,并提供一套 API 来进行数据库操作。 本文介绍模型的用法。

推荐镜像

更多
下一篇
DataWorks