MySQL操作合集

news2024/11/27 0:18:42

数据库的操作

创建数据库

create database [if not exists] db_name 
[character set utf8]
[collate utf8_general_ci];

查看所有数据库

show databases;

查看数据库的创建语句

show create database db_name;

修改数据库

alter database db_name 
character set utf8
collate utf8_bin;

删除数据库

drop database [if exists] db_name;
  • 里面所有的表都会被删除

备份和恢复

备份:

在操作系统的shell中完成

mysqldump -P3306 -uroot -p密码 -B数据库名 > 备份储存的文件路径

还原:

在mysql中完成

source 备份储存的文件路径

可以使用相对路径,默认当前路径为mysql客户端打开的路径

注意事项:

  • 备份数据库下的表

    mysqldump -uroot -p 数据库名 表1 表2 > 备份储存的文件路径
    
  • 备份多个数据库

    mysqldump -uroot -p -B 数据库1 数据库2 >备份储存的文件路径
    
  • 如果备份一个数据库没有-B,恢复时需要先进入一个数据库再source

表的操作

创建表

CREATE TABLE table_name (
	field1 datatype,
	field2 datatype,
	field3 datatype
) [character set 字符集] [collate 校验规则] [engine 存储引擎];

存储引擎:

show engines;
  • MyISAM:数据目录中由三种不同的文件
    • .frm:表结构
    • .MYD:表数据
    • .MYI:表索引
  • InnoDB:由两种不同的文件
    • .ibd:索引和数据
    • .frm:表结构

查看表结构

desc 表名;

修改表

alter table tablename add column datatype [after column] [not null][default expr],column...
alter table tablename modify column datatype ...
alter table tablename drop column;

删除表

drop temporary table [if exists] tb_name,...

关于字符集和校验集

查看所有的字符集和校验集:

show character set [like 'utf8%'];
show collation [like 'utf8%'];

查看当前数据库的默认字符集和校验集:

show variables like 'character_set_database';
show variables like 'collation_database';

实际上有很多character_set 和collation ,mysql服务器的、客户端的、数据库的…它们具有一定继承关系

在当前数据库下建表的默认字符集和校验集从上面继承而来

表的字符集和校验集:

--创建时指定
create table table_name(
 ...
)character set utf8 collate utf8_bin;
--修改
alter table table_name character set utf8 collate utf8_bin;

指定某一列的字符集和校验集:

--创建时指定
create table table_name(
	name varchar(30) character set utf8 collate utf8_bin;
);
--修改某一列
alter table table_name modify name varchar(30) character set utf8 collate utf8_bin;

两个常用的校验方式:

utf8_general_ci;//不区分大小写

utf8_bin;//区分大小写

DML

插入

插入冲突解决

insert过程可能发生主键冲突或唯一键冲突

  • 更新:

    INSERT INTO students (id, sn, name) VALUES (100, 10010, '唐大师')
    	ON DUPLICATE KEY UPDATE sn = 10010, name = '唐大师';
    

    当主键冲突发生,直接把当前主键对应的snname进行更新

  • 替换:

    REPLACE INTO students (sn, name) VALUES (20001, '曹阿瞒');
    

    不冲突则插入,冲突则删除后重新插入

查询

别名

SELECT column [AS] alias_name [...] FROM table_name;
SELECT id, name, chinese + math + english 总分 FROM exam_result;

去重

SELECT DISTINCT math FROM exam_result;

where条件

IN (option, …)如果是 option 中的任意一个,返回 TRUE(1)
BETWEEN a0 AND a1范围匹配,[a0, a1],如果 a0 <= value <= a1,返回 TRUE(1)
LIKE模糊匹配。% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字符

where后面的表达式可以出现select字句,如:

where sal = (select max(sal) from emp);

子查询如果是多行,可能会用到如下关键词:

INwhere column in (select …) 存在即返回true
ALLwhere column > all(select …) 大于所有即返回true
ANYwhere column > all(select …) 大于任意一个即返回true

如果是多个元素的对应,即子查询是多列,可以用如下方式:

where (colum1,colum2,…) = (select colum1,colum2,… from emp);

子查询

像上面的子查询不仅可以出现在如上的where后面的表达式中

还可以直接将子查询当作一张临时的表,出现在from后:

select * from [子查询] where [exp]

或者做笛卡尔积

select * from table1,[子查询] where [exp]

排序

SELECT ... FROM table_name [WHERE ...]
ORDER BY column [ASC|DESC], [...];
-- ASC 为升序(从小到大)
-- DESC 为降序(从大到小)
-- 默认为 ASC
-- column 可以是前面定义的别名

分页

-- 从 0 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;
-- 从 s 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n;
-- 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;

更新

UPDATE table_name SET column = expr [, column = expr ...]
[WHERE ...] [ORDER BY ...] [LIMIT ...]

找到对应的行,对响应的列元素进行替换

与插入冲突的两个语法比较:

插入冲突解决实际是查找 + 判断是否成功 + 更新的过程

删除

DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]

找到相应的行,进行删除

截断

TRUNCATE [TABLE] table_name
  1. 删除整表的所有数据
  2. 不经过事务,无法回滚
  3. 会重置AUTO_INCREMENT为0

插入查询的结果

从一个表中查询出n条数据,将这些数据插入一个表

这两个表可以是同一个

INSERT INTO table_name [(column [, column ...])] SELECT ...

聚合

聚合函数

COUNT([DISTINCT] expr)返回查询到的数据的 数量
SUM([DISTINCT] expr)返回查询到的数据的 总和,不是数字没有意义
AVG([DISTINCT] expr)返回查询到的数据的 平均值,不是数字没有意义
MAX([DISTINCT] expr)返回查询到的数据的 最大值,不是数字没有意义
MIN([DISTINCT] expr)返回查询到的数据的 最小值,不是数字没有意义
  • distinct用于将数据去重后再统计

group by

select column1, column2, .. from table group by column [having expr];

显示平均工资低于2000的部门和它的平均工资 :

select avg(sal) as myavg from EMP group by deptno having myavg<2000;

having和where的区别

语法顺序:
where出现在group by前,having出现在group by

执行顺序:

  • where先进行筛选
  • group by进行分组
  • 调用前面的聚合函数
  • having筛选聚合函数

表的内外链接

内连接

前面我们将两个表进行笛卡尔积,并在后面使用where进行筛选,我们可以将其结合成一个内连接的语法

select 字段 from 表1 inner join 表2 on 连接条件 and 其它条件;

外连接

内连接相当于取两张表的交集,连接条件一定要满足

外连接分为两种

  • 左外连接
  • 右外连接

如果是左外连接则表示需要完全显式左边的表,如果连接条件没有成立,右表的字段会为空

右连接反之

select 字段名 from 表名1 left/right join 表名2 on 连接条件

索引操作

索引创建

  1. 表定义时指定:

    --列后指定id为主键,name为唯一键
    create table user(id int primary key, name varchar(30) unique);
    --最后指定id为主键,name为唯一键,email为普通索引
    create table user(id int, name varchar(30), email varchar(30), primary key(id), unique(name), index(email));
    
  2. 创建表后再添加

    --主键索引
    alter table user add primary key(id);
    --唯一键索引
    alter table user add unique(name);
    --普通索引(2种)
    alter table user add index(email);
    create index idx_name on user(email);
    
  • 主键索引值不能为空,唯一键索引可以为空
  1. 全文索引的创建及使用

    当对文章字段或有大量文字的字段进行检索时,会使用到全文索引。MySQL提供全文索引机制,但是有
    要求,要求表的存储引擎必须是MyISAM,而且默认的全文索引支持英文,不支持中文。如果对中文进
    行全文检索,可以使用sphinx的中文版(coreseek)

    • 表定义时创建主键索引:
    CREATE TABLE articles (
    	id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
    	title VARCHAR(200),
    	body TEXT,
    	FULLTEXT (title,body)
    )engine=MyISAM;
    
    • 创建表后再添加
    alter table articles add fulltext(title,body);
    

    使用全文索引

    不可如下方式进行模糊匹配

    select * from articles where body like ‘%databases%’

    正确使用方法:

    select * from articles where match(title,body) against('database');
    

查询索引

  • show keys from user;
  • show index from user;
  • desc user;

删除索引

  • 删除主键索引:alter table user drop primary key;
  • 删除其它索引:alter table user drop index 索引名;
  • 方法二: drop index 索引名 on 表名

视图操作

创建视图:

create view 视图名 as select ...;
  • 修改视图对基表数据又影响
  • 修改基表对视图数据有影响
  • 视图不能添加索引

删除视图:

drop view 视图名;

用户管理

基本操作

查询用户信息:

use mysql;
select host,user,authentication_string from user;
  • host:表示这个用户可以从那个主机登陆
  • user:用户名
  • authentication_string:用户密码通过password()函数加密之后
  • *_priv:用户拥有的权限

创建用户:

create user '用户名'@'登陆主机/ip' identified by '密码'

删除用户:

drop user '用户名'@‘主机名’

修改密码:

set password=password('新的密码');
set password for  '用户名'@‘主机名’=password('新的密码');

数据库权限

给用户授权

grant 权限列表 on 库.对象 to '用户名'@'登陆位置' [identified by '密码']
  • 权限列表:select, delete, create,…;或者all [privileges]
  • *.*:代表本数据库的所有对象(表、视图、存储过程)
  • 库.*:某个数据库的所有对象
  • 如果加了identified,会同时修改密码,如果用户不存在,会直接创建用户

查看权限

show grants for '用户名'@'%';

回收权限

revoke 权限列表 on 库.对象 from '用户名'@'登陆位置';

查看连接情况

show processlist;

使用C语言连接数据库

#include <iostream>
#include <mysql/mysql.h>
using namespace std;

int main()
{
    cout << "mysql client version: " << mysql_get_client_info() << endl;
    // 初始化mysql对象
    MYSQL *mfp = mysql_init(nullptr);
    if (mfp == nullptr)
    {
        cerr << "mysql_init error" << endl;
        return 0;
    }
    // 设置字符集(中文编码问题)
    mysql_set_character_set(mfp, "utf8");
    // 登陆认证:
    mfp = mysql_real_connect(mfp, "127.0.0.1", "root", "yue2983383631,", "db_test", 3306, nullptr, 0);
    if (mfp == nullptr)
    {
        cerr << "mysql_real_connect error" << endl;
        return 0;
    }
    // 向数据库发送sql语句
    string sql = "select * from account";
    int n = mysql_query(mfp, sql.c_str()); // 成功返回0,否则返回1
    if (n == 0)
    {
        cout << "mysql_query success" << endl;
    }
    else
    {
        cout << "mysql_query error" << endl;
        return 0;
    }
    // 提取数据库的返回结果
    // 初始化结果存储对象
    st_mysql_res *res = mysql_store_result(mfp);
    if (res == nullptr)
    {
        return 0;
    }
    int rows = mysql_num_rows(res);               // 获取行数
    int fields = mysql_num_fields(res);           // 获取列数
    MYSQL_FIELD *fname = mysql_fetch_fields(res); // 获取列名(返回一个数组)
    // 打印列名
    for (int i = 0; i < fields; i++)
    {
        cout << fname[i].name << "\t|";
    }
    cout << endl;
    // 按行列读取信息
    for (int i = 0; i < rows; i++)
    {
        MYSQL_ROW row = mysql_fetch_row(res); // 获取一行信息,行数会自动迭代
        for (int j = 0; j < fields; j++)      // 获取当前行的每列信息
        {
            cout << row[j] << "\t|";
        }
        cout << endl;
    }
    cout << endl;
    // 释放结果存储对象
    mysql_free_result(res);
    // 关闭mysql对象
    mysql_close(mfp);
}

makefile:

test:test.cc
	g++ -o $@ $^ -L/lib64/mysql -lmysqlclient 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1089995.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JWT的原理及实际应用

前言&#xff1a; 定义&#xff1a;JSON Web Token&#xff08;缩写 JWT&#xff09;是目前最流行的跨域认证解决方案 JWT官网 由于HTTP协议是无状态的&#xff0c;这意味着如果我们想判定一个接口是否被认证后访问&#xff0c;就需要借助cookie或者session会话机制进行判定&…

气膜建筑膜材分为哪些类型?

近年来随着人们的环保理念越来越强&#xff0c;气膜结构建筑因其材料特性慢慢开始投入到各个领域当中&#xff0c;并且也得到了很大的推广。关于气膜结构建筑的使用年限和所使用的膜材料参数有哪些。 气膜建筑所使用的膜材是一种具有高强度、柔韧性好的薄膜材料&#xff0c;是由…

​EtherNet/IP 库卡机器人和EtherCAT倍福PLC总线协议连接案例​

EtherNet/IP 是一种适合于工业环境和对时间要求比较苛刻的应用的网络。而远创智控YC-EIPM-ECT通讯网关&#xff0c;是一款自主研发的EtherNet/IP 从站功能的通讯网关。它不仅可以实现EtherNet/IP 和EtherCAT的无缝连接&#xff0c;还可以将EtherNet/IP 作为从站连接到EtherCAT总…

专业吃鸡行家揭秘:战斗力提升、作战干货、库存查询一网打尽!

吃鸡玩家们&#xff0c;大家好&#xff01;今天我作为专业吃鸡行家&#xff0c;将为大家揭秘一些热门话题&#xff0c;为你提供不同寻常的干货&#xff0c;让你的吃鸡之路更上一层楼&#xff01; 首先&#xff0c;让我们来谈谈战斗力提升。除了一些基本的游戏技巧&#xff0c;我…

有想过吗,高速信号隔直电容为什么是几百NF量级的?

高速先生成员--黄刚 交流耦合电容&#xff0c;坊间也俗称隔直电容&#xff0c;相信大家对它的原理都非常的熟悉&#xff0c;就是把直流电平隔掉&#xff0c;保证传输过程中电平的转换不会影响接收端。下面的一条常见的PCIE4.0的金手指链路&#xff0c;TX端会有隔直电容&#x…

如何通过MES系统提高生产计划效率?

导 读 ( 文/ 1730 ) 在现代制造业中&#xff0c;通过制造执行系统&#xff08;MES&#xff09;系统来提高生产计划效率是至关重要的。本文将介绍如何通过MES系统来优化生产计划&#xff0c;包括实时数据分析、智能排程和协同协作。通过这些关键方法&#xff0c;企业可以提高生产…

VBA_MF系列技术资料1-202

MF系列VBA技术资料 为了让广大学员在VBA编程中有切实可行的思路及有效的提高自己的编程技巧&#xff0c;我参考大量的资料&#xff0c;并结合自己的经验总结了这份MF系列VBA技术综合资料&#xff0c;而且开放源码&#xff08;MF04除外&#xff09;&#xff0c;其中MF01-04属于定…

外卖跑腿系统开发的最佳实践和成功案例

外卖跑腿系统的开发既涉及技术实现&#xff0c;也需要考虑用户体验、运营策略和合规性。以下是一些最佳实践和一些成功的案例&#xff0c;以帮助您更好地理解这个领域的要点。 1. 技术框架的选择 选择适合的技术框架是外卖跑腿系统成功的关键。您可以考虑使用以下技术&#…

混凝土搅拌站预拌厂数字孪生可视化管理系统,三维可视化数据监控平台

本项目基于三维建模、数据融合等技术&#xff0c;构建一套实时的混凝土搅拌站厂区数字孪生可视化系统&#xff0c;提升混凝土搅拌站厂区信息化建设水平。 通过三维可视化项目的建设&#xff0c;实现搅拌站厂区展示和漫游、生产流程中设备的实时映射孪生、关键设备参数及指标图…

所谓的35岁中年危机只不过是在还曾经的债、填曾经的坑罢了~

听人劝、吃饱饭,奉劝各位小伙伴,不要订阅该文所属专栏。 作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 跨域学习者,从事过全栈研发、产品经理等工作,现任研发部门 CTO 。荣誉:2022年度博客之星Top4、博客专家认证、全栈领域优质创作者、新星计划导师,“星荐官共赢计…

修改jar包中的class文件

1.解压jar包&#xff1a;将要修改内容的jar包解压&#xff1b; 2.修改为java文件&#xff1a;将解压后的class文件用idea打开&#xff0c;创建一个同名的java文件&#xff0c;将class文件全部内容赋值到java文件中&#xff1b;我这里是做了导出升级&#xff0c;修改了一些参数…

U盘重装笔记本系统Win10操作方法

如果我们的笔记本系统出现崩溃、病毒感染等问题&#xff0c;这时候我们就可以给笔记本电脑重新安装系统。但是&#xff0c;很许多新人用户不知道笔记本电脑Win10系统重装的详细步骤&#xff0c;接下来小编给大家详细介绍关于利用U盘给笔记本Win10电脑重装系统的方法&#xff0c…

SAAS模式和本地化部署哪种更好?

导 读 ( 文/ 1798 ) 在制造执行系统&#xff08;MES&#xff09;的选择和部署过程中&#xff0c;企业面临着SAAS&#xff08;软件即服务&#xff09;模式和本地化部署两种选择。SAAS模式以云端服务的形式提供MES系统&#xff0c;而本地化部署则将系统部署在企业自身的服务器上。…

java.awt.HeadlessException

java.awt.HeadlessException异常 原因 从异常信息可以看到HeadlessExeption是项目开启了Headless模式&#xff0c;在这中模式下系统就会缺少其他设备的支持。 解决方法 在程序的入口类里修改成以下代码即可&#xff1a; 原有 public static void main(String[] args){Spring…

基于单片机智能汽车仪表设计系统

基于单片机的汽车智能仪表的设计 摘要&#xff1a;汽车的汽车系统。速度测量以及调速是我们这次的设计所要研究的对象&#xff0c;本次设计的基础核心的模块就是单片机&#xff0c;其应用的核心的控制单元就是stc89c52单片机&#xff0c;用到的测速模块是霍尔传感器&#xff0c…

类别不均衡,离群点以及分布改变

原文&#xff1a;Class Imbalance, Outliers, and Distribution Shift Introduction to Data-Centric AI 这节课是关于真实世界中机器学习的数据中出现的三大问题&#xff1a;类别不均衡&#xff0c;离群点以及分布改变。 类别不均衡&#xff1a; 现实世界的分类问题中常常会…

《商用密码应用安全性评估管理办法》发布,沃通CA助力商用密码改造

2023年10月7日&#xff0c;国家密码管理局公布了《商用密码应用安全性评估管理办法》&#xff08;国家密码管理局令第3号&#xff09;&#xff08;以下简称《办法》&#xff09;&#xff0c;《办法》已经在国家密码管理局局务会议审议通过&#xff0c;自2023年11月1日起施行。 …

Excel 的单元格内容和单元格格式

文章目录 单元格内容单元格格式常规格式数字格式 单元格内容 文本&#xff1a;只要不是纯数字&#xff0c;Excel 都默认是文本格式。 在 Excel 中&#xff0c;逻辑值只有两个&#xff1a;True 和 False。 全选一片区域&#xff0c;按 Delet 键删除内容时&#xff0c;确实可以删…

Nginx - 反向代理与负载均衡

目录 一、Nginx 1.1、Nginx 下载 1.2、nginx 基础配置的认识 a&#xff09;第一部分&#xff1a;全局块 b&#xff09;第二部分&#xff1a;events 块 c&#xff09;第三部分&#xff1a;http 块 http 块中 内嵌的 server 块 1.3、一些常用配置 1.3.1、location 匹配级…

基于Flume+Kafka+Hbase+Flink+FineBI的实时综合案例(一)案例需求

文章目录 FlumeKafkaHbaseFlinkFineBI的实时综合案例01&#xff1a;课程回顾02&#xff1a;课程目标03&#xff1a;案例需求 FlumeKafkaHbaseFlinkFineBI的实时综合案例 01&#xff1a;课程回顾 Hbase如何解决非索引查询速度慢的问题&#xff1f; 原因&#xff1a;Hbase以Rowk…