MySQL操作合集

数据库的操作

创建数据库

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,否则返回1if (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.ccg++ -o $@ $^ -L/lib64/mysql -lmysqlclient 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux之open/close/read/write/lseek记录

一、文件权限 这里不做过多描述&#xff0c;只是简单的记录&#xff0c;因为下面的命令会涉及到。linux下一切皆是文件包括文本、硬件设备、管道、数据库、socket等。通过ls -l 命令可以查看到以下信息 drwxrwxrwx 1 root root 0 Oct 10 17:06 open -rwxrwxrwx 1 root roo…

内网渗透——隧道代理

文章目录 代理代理使用场景VPS建立隧道frpMSF木马生成监听开启frp服务端和客户端执行exe木马文件 代理 实验环境&#xff1a; 攻击机kali&#xff1a;192.168.188.133&#xff08;NAT模式&#xff09; 模拟的公网服务器&#xff08;本机&#xff09;&#xff1a;10.9.75.239 …

【数据库——MySQL(实战项目1)】(4)图书借阅系统——触发器

目录 1. 简述2. 功能代码2.1 创建两个触发器&#xff0c;分别在借出或归还图书时&#xff0c;修改借阅人表中的已借数目(附加&#xff1a;借阅人表的总借书数、图书表的借阅次数以及更新图书表的图书状态为(已借出/在架上))字段&#xff1b;2.2 创建触发器&#xff0c;当借阅者…

相似性搜索:第 3 部分--混合倒排文件索引和产品量化

接续前文&#xff1a;相似性搜索&#xff1a;第 2 部分&#xff1a;产品量化 SImilarity 搜索是一个问题&#xff0c;给定一个查询的目标是在所有数据库文档中找到与其最相似的文档。 一、介绍 在数据科学中&#xff0c;相似性搜索经常出现在NLP领域&#xff0c;搜索引擎或推…

Codeforces Round 903 (Div. 3)

D. Divide and Equalize Example input Copy 7 5 100 2 50 10 1 3 1 1 1 4 8 2 4 2 4 30 50 27 20 2 75 40 2 4 4 3 2 3 1 output Copy YES YES NO YES NO YES NONote The first test case is explained in the problem statement. 很重要很重要的知识点&a…

Windows端口号被占用的查看方法及解决办法

Windows端口号被占用的查看方法及解决办法 Error starting ApplicationContext. To display the conditions report re-run your application with debug enabled. 2023-10-14 22:58:32.069 ERROR 6488 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter : ***…

CustomNavBar 自定义导航栏视图

1. 创建偏好设置键 CustomNavBarTitlePreferenceKey.swift import Foundation import SwiftUI//State private var showBackButton: Bool true //State private var title: String "Title" //"" //State private var subtitle: String? "SubTitl…

算法练习13——跳跃游戏II

LeetCode 45 跳跃游戏 II 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i] i j < n 返回…

螺杆支撑座对注塑机的生产过程有哪些重要影响?

螺杆支撑座对注塑机的生产过程具有重要影响&#xff0c;主要体现在以下几个方面&#xff1a; 1、精度和稳定性&#xff1a;螺杆支撑座能够提高注塑机的精度和稳定性&#xff0c;从而保证塑料制品的品质和一致性。通过提供稳定的支撑和承载&#xff0c;螺杆支撑座可以减少机器运…

React18入门(第三篇)——React Hooks详解,React内置Hooks、自定义Hooks使用

文章目录 概述一、内置 Hook——useState1.1 响应式数据更新1.2 什么是 state1.3 state 特点&#xff08;一&#xff09;——异步更新1.4 state 特点&#xff08;二&#xff09;——可能会被合并1.5 state 特点&#xff08;三&#xff09;——不可变数据&#xff08;重要&#…

MySQL的各种锁

1. MySQL有遇到过死锁的问题吗&#xff1f;你是如何解决的&#xff1f; 死锁&#xff0c;就是两个或两个以上的线程在执行过程中&#xff0c;去争夺同一个共享资源导致互相等待的现象&#xff0c;在没有外部干预的情况下&#xff0c;线程会一直处于阻塞状态&#xff0c;无法往下…

【RocketMQ系列二】通过docker部署单机RocketMQ

您好&#xff0c;我是码农飞哥&#xff08;wei158556&#xff09;&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精…

goland安装教程

安装版本&#xff1a; goland-2023.2.3.exe

spring boot+ vue位置信息大数据综合管理平台源码

spring boot vue位置信息大数据综合管理平台源码 UWB技术的人员定位系统源码 智慧工厂是产业升级的外在表现形式&#xff0c;利用物联网技术加强信息管理的新模式&#xff0c;人员定位管理通过物联网技术、位置信息大数据的综合处理应用&#xff0c;在智慧工厂人员管理方面具有…

git强制删除本地分支 git branch -D

git强制删除本地分支 git branch -D git删除本地分支_zhangphil的博客-CSDN博客git branch -d <分支名>可以通过: git branch 查看所有本地分支及其名字&#xff0c;然后删除特定分支。https://blog.csdn.net/zhangphil/article/details/82255002 使用git branch -d删除…

MacBook/MacOS如何更新到指定的版本

背景 现在是A版本&#xff0c;想要更新到B&#xff0c;而目前能最新更新到C。 是可以做到的&#xff0c;不一定更新就得更新到最新的。 只要下载好B之后更新即可。 方法 思路是下载好目标的版本后更新&#xff0c;这里可以下载&#xff1a; https://support.apple.com/zh-…

Arbitrum Stylus 的工作原理

理解 Arbitrum 如何协调 EVM 和 WASM 的共存是至关重要的。这不仅仅是拥有两个独立的引擎&#xff1b;这是一种增强两者优势的协同关系。 Arbitrum 的独特架构允许 EVM 和 WASM 之间进行无缝和同步的操作&#xff0c;这要归功于其统一的状态、跨 VM 调用和兼容的经济模型。 用…

uniapp小程序实现绘制内容,生成海报并保存截图(Painter和Canvas两种方式举例)

一、Painter方法 Painter插件传送门 1.下载资源包 2.将资源包的如下部分 3.使用页面引入组件 ui样式 <paintercustomStyle=margin-left: 40rpx; height: 1000rpx;palette="{{palette}}"bind:imgOK="onImgOK"/>data 中数据(绘制内容,替换区域) pai…

8.简易无线通信

预备知识 Zigbee无线通信&#xff0c;需要高频的载波来提供发射效率&#xff0c;Zigbee模块之间要可以正常的收发&#xff0c;接收模块必须把接收频率设置和发射模块的载波频率一致。Zigbee有27个载波可以进行通信&#xff0c;载波叫做信道&#xff08;无线通信的通道&#xf…

Umi + React + Ant Design Pro + TS 项目搭建

新建项目目录 mkdir 【项目名称】在对应目录 D:\react\demo 中&#xff0c;安装 Umi 脚手架&#xff1a; yarn create umi接下来&#xff0c;安装将要用到的相关依赖 umijs/plugins&#xff1a; npm i umijs/plugins -Dumijs/plugins 是 Umi 的官方插件集&#xff0c;包含了…