Mysql从简到杂,从删库到跑路!

2023-10-07 00:59

本文主要是介绍Mysql从简到杂,从删库到跑路!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  1. 创建数据库、创建表、添加字段、复制表以及删库跑路

CREATE DATABASE test  ;#创建一个数据库,名称为testDROP DATABASE IF EXISTS `test`; #如果存在就删除,没有的话执行下方的创建数据库 
CREATE DATABASE test  ;#创建一个数据库,名称为tesUSE test;                             #选择哪个数据库
DROP TABLE IF EXISTS `zbc`;           #如果表存在,就删除,不存在直接执行下方sql
CREATE TABLE zbc(              #创建表,表名称为zbc
id INT PRIMARY KEY AUTO_INCREMENT     #id 列名,primary key 主键,auto_increment 自增1
)ENGINE=INNODB DEFAULT CHARSET=utf8  #复制表
CREATE TABLE cbc LIKE zbc;
INSERT INTO cbc SELECT * FROM zbc;
#基于zbc创建cbc表,
查询zbc表中所有信息插入到cbc表中#查看表结构
SHOW CREATE TABLE zbc \G
#注:如果使用第三方软件例如navicat执行此命令时会出现错误,因为第三方软件不能识别出\G
#ENGINE=INNODB 使用InnoDB引擎,InnoDB,是MySQL的数据库引擎之一,DEFAULT CHARSET=utf8 代表数据库默认编码为utf-8

2. 添加列

#添加phone列,类型是 nvarchar(50)
ALTER table zbc add phone nvarchar(30) 
#添加name列,类型是 nvarchar(50),default 代表着你这字段有默认值 值就是跟在后边的'1'
ALTER table zbc add name nvarchar(50) default '1' 
#表示插入在第一列
ALTER TABLE zbc ADD Uid INT FIRST;
#表示添加在id字段的后边
ALTER TABLE zbc ADD idCard INT AFTER id;

3. 修改列

#修改name列,default 默认值为100,设置之后每添加一条数据,该字段会默认添加100
ALTER TABLE zbc  MODIFY name int  NOT NULL DEFAULT 100;
#修改表列名,将之前的 phone 改为了 idCard,类型为int
ALTER TABLE zbc CHANGE phone idCard  int ; 

4. 删除列

# 删除zbc表中的phone列
ALTER TABLE  zbc DROP phone;
5. 查询

就以上方这两个表为例子

  1. 单表查询
查询所有信息,*号代表里边的所有字段,但是正常开发时不建议使用!
SELECT * FROM `xbc`

查询某一列的值
SELECT name FROM `xbc`
查询id为3的那条
SELECT * FROM `xbc` where id=3

查询id不等于3的数据

SELECT * FROM `xbc` where id!=3
查询id是3或者4的信息
SELECT * FROM `xbc` where id=3 or id=4
查询id小于三的信息
SELECT * FROM `xbc` where id<3 
查询名字带有张的信息
SELECT * FROM `xbc` where name like '%张%'
查询前边是10开头的phone
SELECT * FROM `xbc` where phone like '10%'
查询以6结尾的信息
SELECT * FROM `xbc` where phone like '%6'
查询name中张开头,后边只有一个字的数据,为了明确表达,我把张三改为了张三二
SELECT * FROM `xbc` where name like '张_'
基于id排序查询,默认是升序,asc代表的就是升序,默认就是,所以asc写不写无所谓
SELECT * FROM `xbc`  order by id asc
基于id排序查询,降序
SELECT * FROM `xbc`  order by id desc 
查询最大的id
SELECT max(id) FROM `xbc` 
查询最小id
SELECT min(id) FROM `xbc` 
查询所有id的和
SELECT sum(id) FROM `xbc` 
查询id的平均数
SELECT avg(id) FROM `xbc` 
合并查询结果,需要保证字段数是一致的

select id,... from zbc 
UNION  #All  all代表查询所有,不进行去重  distinct去重,默认自动去重了已经,如果不需要就加All
select id,... from xbc
分组,基于name进行分组,查询name字段的条数
select name ,count(*) from zbc group by name 
分组查询之后再添加with rollup 所有条数的和
select name ,count(*) from xbc group by name WITH ROLLUP 
多表联查---内连接,基于关联条件查询两个表共有的字段
select * from 表名 a #as 起别名,as可以省略,所以这个表名的别名为 a 
inner join zbc b on a.id=b.id   #inner可以省略
多表联查---左连接,以左表为主,也就是zbc为主,xbc为辅,zbc里边的数据会全部展示,如果xbc的数据小于zbc,那么xbc的数据以null补齐
select * from  zbc a
left  join xbc  b on a.id=b.id
多表联查---右连接,以右表为主,也就是xbc为主,zbc为辅,xbc里边的数据会全部展示,如果zbc的数据小于xbc,那么zbc的数据以null补齐
select * from  zbc a
right  join xbc  b on a.id=b.id
对于字段中出现null值的处理,查询zbc表中Uid字段不是null的信息
select * from  zbc  where Uid is not null
对于字段中出现null值的处理,查询zbc表中Uid字段是null的信息
select * from  zbc  where Uid is  null
如果Uid的值是null,那么就给他赋值为0
select  ifnull(Uid,0)   from  zbc  
查询---利用正则表达式
#表示查询phone字段最后一位是4的信息
SELECT phone FROM xbc WHERE phone REGEXP '4$';
#表示查询phone字段以10开头的信息
SELECT phone FROM xbc WHERE phone REGEXP '^10';
#表示查询phone字段中带有9的信息
SELECT phone FROM xbc WHERE phone REGEXP '9';
#表示查询phone字段中以9开头并且以4结尾的数据
SELECT phone FROM xbc WHERE phone REGEXP '^[9]|4$';

具体表达式参考正则表达式的

正则表达式的替换
#正则的替换,将zbc表中name字段包含2的内容将2替换成5,条件是2开头的
UPDATE zbc set name = REGEXP_REPLACE(name, '2', '5') WHERE name REGEXP '^2';
#简化之后
UPDATE zbc set name = REGEXP_REPLACE(name, '^2', '5') 
查询MYSQL的元数据
SELECT VERSION( )    #当前mysql的版本信息
SELECT DATABASE( )   #当前数据库的名称,如果没有选择就是空
SELECT USER( )       #当前操作的用户名
SHOW STATUS          #当前MYSQL的状态
SHOW VARIABLES       #服务器配置变量

mysql去重

#查询条数 #插叙所有条数,

select count(*) as cc ,id,name,phone from zks
group by id,name,phone

#结果

#字面意思就是

id是1,name是1,phone是1的一共有三条,

id是1,name是12,phone是1的有1条,也就是cc代表的条数,id、name、phone代表的各自的字段信息,如果cc>1那么就代表这个表里的信息对应的id,name,phone对应的值有重复的

#加上having
select count(*) as cc ,id,name,phone from zks
group by id,name,phone
having cc>1 
如果加上having就代表只要id是1的,就总结到一起,也就是id是1并且name、phone相同的数据的条数并且>1,因为id是1但是name、phone不是1,所以不存在此条件中!
mysql函数---字符串

#CHAR_LENGTH() 返回name字段的长度,与CHARACTER_LENGTH( ) 作用一致

SELECT id,CHAR_LENGTH(name) AS length from test;

#CONCAT() 将所查询的id、name、phone拼接起来并返回

SELECT id,CONCAT(id,' ',name,' ',phone) AS name from test;  

# CONCAT_WS() #类似CONCAT(),第一个定义的"-"会在后边拼接的位置自动加上:id-name-phone

SELECT CONCAT_WS("-", id,name,phone)AS cc from test;

# FIELD() #结合order by 进行使用,自带group by ,如果不添加desc就是默认的升序显示顺序:

1 2 3 132 5 89,如果加上desc 89 5 132 1 2 3 顺序显示

select * from zka order by field(name,'132','5','89') desc ;

也可以简单的使用直接查位置,例如官方例子:

SELECT FIELD("c", "a", "b", "c", "d", "e");

# FIND_IN_SET ( s1,s2) #查询s2中包含s1信息的字段

SELECT * FROM zka WHERE  FIND_IN_SET (  id ,'8,12,1,2,3,4,5,6,7');

未完待续...

这篇关于Mysql从简到杂,从删库到跑路!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/155088

相关文章

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

SQL Server数据库死锁处理超详细攻略

《SQLServer数据库死锁处理超详细攻略》SQLServer作为主流数据库管理系统,在高并发场景下可能面临死锁问题,影响系统性能和稳定性,这篇文章主要给大家介绍了关于SQLServer数据库死... 目录一、引言二、查询 Sqlserver 中造成死锁的 SPID三、用内置函数查询执行信息1. sp_w

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

MySQL 衍生表(Derived Tables)的使用

《MySQL衍生表(DerivedTables)的使用》本文主要介绍了MySQL衍生表(DerivedTables)的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学... 目录一、衍生表简介1.1 衍生表基本用法1.2 自定义列名1.3 衍生表的局限在SQL的查询语句select

MySQL 横向衍生表(Lateral Derived Tables)的实现

《MySQL横向衍生表(LateralDerivedTables)的实现》横向衍生表适用于在需要通过子查询获取中间结果集的场景,相对于普通衍生表,横向衍生表可以引用在其之前出现过的表名,本文就来... 目录一、横向衍生表用法示例1.1 用法示例1.2 使用建议前面我们介绍过mysql中的衍生表(From子句

六个案例搞懂mysql间隙锁

《六个案例搞懂mysql间隙锁》MySQL中的间隙是指索引中两个索引键之间的空间,间隙锁用于防止范围查询期间的幻读,本文主要介绍了六个案例搞懂mysql间隙锁,具有一定的参考价值,感兴趣的可以了解一下... 目录概念解释间隙锁详解间隙锁触发条件间隙锁加锁规则案例演示案例一:唯一索引等值锁定存在的数据案例二:

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

MySQL 设置AUTO_INCREMENT 无效的问题解决

《MySQL设置AUTO_INCREMENT无效的问题解决》本文主要介绍了MySQL设置AUTO_INCREMENT无效的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录快速设置mysql的auto_increment参数一、修改 AUTO_INCREMENT 的值。