MySql 常用Sql语句

news/2025/1/21 9:37:42/文章来源:https://www.cnblogs.com/TMesh/p/18682958

目录
  • 命令
    • 启动 MySQL
    • 停止 MySQL
    • 重启 MySql
  • 语句
    • 数据库操作
    • 创建数据库
    • 用户操作
    • 查看当前登录的用户
    • root 权限下可以查看所有用户信息
    • 创建用户
    • 删除用户
    • 更改密码
    • 权限操作
    • 表操作
    • 创建表
    • 修改字段信息
    • 修改字段名及信息
    • 添加字段名
      • 末尾添加
      • 头部添加
      • 指定位添加:指定字段后
    • 删除字段名
  • 导出数据库:
  • 导入数据库
  • 查看性能语句
    • 查看 MySQL 服务器配置信息 show variables;
    • 查看 MySQL 服务器运行的各种状态值
    • 查看进程
    • 查询进程使用情况
    • 查询服务器 thread_cache_size配置
    • 查看线程
    • 查看全部的线程
    • 按客户端 IP 分组,看哪个客户端的链接数最多
    • 查看正在执行的线程,并按 Time 倒排序,看看有没有执行时间特别长的线程
    • 查询缓存配置
    • 查看当前的 MySQL 数据库是否支持查询缓存:
    • 查看当前 MySQL 是否开启了查询缓存 :
    • 查看查询缓存的占用大小 :
    • 查看查询缓存的状态变量:
    • 查看超时时间
    • 查看 innodb 缓冲池大小
    • 查看 server 接受的数据包大小
  • 查看字符集
  • 查看所有数据库字符集
  • 查看表的字符集
  • 查看表字段的字符集
  • 查看某个数据库中所有表的数据量
    • 查询数据库中所有表名
  • 查询指定数据库中所有表名
  • 查询指定数据库中指定表的所有字段名 column_name
  • 模糊查询指定数据库中指定表的所有字段名 column_name
  • 查询指定字段在哪个表中
  • 查找某个表在哪个库
  • 模糊查找某个表在哪个库
  • 并集
    • 去重
    • 不去重
  • 交集
  • 差集

命令

启动 MySQL

net start mysql  

停止 MySQL

net stop mysql 

重启 MySql

service mysqld restart

语句

数据库操作

创建数据库

create database databaseName default character set characterName collate collateName

用户操作

此处的‘localhost',是指该用户只能在本地登录,不能在另外一台机器上远程登录。如果想远程登录的话,将’localhost‘改为’%‘,表示在任何一台电脑上都可以登录。也可以指定某台机器可以远程登录。

查看当前登录的用户

select user();

root 权限下可以查看所有用户信息

select * from mysql.user;    #查看所有用户的所有信息
select user,password,host from mysql.user;  #查看所有用户的(user,password,host)

创建用户

# 创建了一个名为:TMesh 密码为:TMesh729 的用户
create user 'TMesh'@'localhost' identified by 'TMesh729';

删除用户

# 删除用户“TMesh”
drop user 'tmesh'@'%' ;

更改密码

# 密码实时更新;修改用户“test”的密码为“TMesh729”
set password for TMesh =password('TMesh729');# 需要刷新;修改用户“test”的密码为“1234”
update mysql.user set password=password('TMesh729') where user='TMesh'ALTER USER 'TMesh'@'%' IDENTIFIED BY 'TMesh729';
# 刷新
flush privileges;

权限操作

# 查看用户权限
show grants for test;# 为特定的数据库分配有该数据库 操作权限 的用户
grant 权限们 on 数据库.表 to 用户名@'主机名' identified by '密码';# 1)all:所有权限
# 2)database.*:database数据库下所有表数据库下所有表
# 3)TMesh@'localhost':本机可以通过TMesh用户登入
# 4)identified by 'TMesh729':密码为TMesh729
grant all privileges on database.* to TMesh@'localhost' identified by 'TMesh729';grant all privileges on *.* to 'TMesh'@'%' with grant option;# 1)select,delete,update,insert,drop,alter:指定的权限
# 2)database.*:database数据库下所有表
# 3)TMesh@'%':任何机器可以通过TMesh用户登入
# 4)identified by 'TMesh729':密码为TMesh729
grant select,delete,update,insert,drop,alter on database.* to TMesh@'%' identified by 'TMesh729';# 撤销权限
revoke 权限1,权限2,... on 数据库名.表名 from 用户名@'主机名';
# 禁掉本地TMesh用户对oldboy数据库的所有表的drop权限
revoke drop on TMesh.* from oldboy@'localhost';# 刷新权限
flush privileges; 

mysql 8.0 默认使用 caching_sha2_password 身份验证机制 (即从原来mysql_native_password 更改为 caching_sha2_password。)
从 5.7 升级 8.0 版本的不会改变现有用户的身份验证方法,但新用户会默认使用新的 caching_sha2_password 。 客户端不支持新的加密方式。 修改用户的密码和加密方式。
方案一:
在命令行模式下进入mysql,输入以下命令:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';

或者

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';

方案二:
在配置数据源的时候直接将属性 allowPublicKeyRetrieval 设置为 true 即可

jdbc:mysql://139.224.224.178:23306/tmeshmall_ums?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&allowPublicKeyRetrieval=true

表操作

创建表

create table table_name (column1 datatype [约束],column2 datatype [约束],...
) [约束];

修改字段信息

alter table 表名 modify 字段名 类型[(宽度) 约束];
alter table t2 modify x bigint default 0;  # 模式不同, 涉及精度问题

修改字段名及信息

alter table 表名 change 旧字段名 新字段名 类型[(宽度) 约束];
alter table t2 change y c char(10) not null; # 模式不同, 涉及类型转换问题

添加字段名

末尾添加

alter table 表名 add 字段名 类型[(宽度) 约束], ..., add 字段名 类型[(宽度) 约束];
alter table t2 add age int, add gender enum("male", "female", "wasai") default "wasai";

头部添加

alter table 表名 add 字段名 类型[(宽度) 约束] first;

指定位添加:指定字段后

alter table 表名 add 字段名 类型[(宽度) 约束] after 旧字段名;
alter table t2 add y int after x;

删除字段名

alter table 表名 drop 字段名;
alter table t2 drop y;

导出数据库:

需要使用 /

mysqldump -u用户名 -p密码 -d 数据库名 表名 脚本名;

1、导出数据库为 dbname 的表结构(其中用户名为 root,密码为 dbpasswd,生成的脚本名为 db.sql)

mysqldump -uroot -pdbpasswd -d dbname >db.sql;

2、导出数据库 dbname 某张表(test)结构

mysqldump -uroot -pdbpasswd -d dbname test>db.sql;

3、导出数据库为 dbname 所有表结构及表数据(不加-d)

mysqldump -uroot -pdbpasswd dbname >db.sql;

4、导出数据库为 dbname 某张表(test)结构及表数据(不加-d)

mysqldump -uroot -pdbpasswd dbname test>db.sql;

5、导出指定表的数据

mysqldump -uroot -pdbpasswd -t database --tables table1 table2>table.sql

6、指定格式导出表数据

select * from table_name Into OutFile '文件路径' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n';select * from tb_user_1 Into OutFile 'G:\Desktop\user1.sql' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n';-- FIELDS 指定字段的参数 
--    FIELDS TERMINATED BY 字段之间的分割符,默认是/t,这里改成逗号 
--     ESCAPED BY 对特殊字符的转义,默认是使用右斜杠/, 这里改成双引号,这样的话一个双引号就会被转义成2个双引号了 
--  LINES 指定行的参数 
--    STARTING BY 行最开始附加的内容,我们不需要加,所以设置为空即可 
--    TERMINATED BY 指定行结束附加的内容,我们加上换行符,这也是默认的配置

导出查询结果:

select 语句 into outfile '文件路径';

导入数据库

太慢需设置

set sql_log_bin=0;
set GLOBAL innodb_flush_log_at_trx_commit = 0;
set global max_allowed_packet=4000000;
set global net_buffer_length=12000;// 导入完成后
set global innodb_flush_log_at_trx_commit = 1;
set global sync_binlog = 1;

需要使用 /

方法一:
(1)选择数据库

use database_name;

(2)设置数据库编码

set names utf8;

(3)导入数据(注意 sql 文件的路径)

source path/file_name.sql;

方法二

load 语法

LOAD DATA[LOW_PRIORITY | CONCURRENT] [LOCAL]INFILE 'file_name'[REPLACE | IGNORE]INTO TABLE tbl_name[PARTITION (partition_name [, partition_name] ...)][CHARACTER SET charset_name][{FIELDS | COLUMNS}[TERMINATED BY 'string'][[OPTIONALLY] ENCLOSED BY 'char'][ESCAPED BY 'char']][LINES[STARTING BY 'string'][TERMINATED BY 'string']][IGNORE number {LINES | ROWS}][(col_name_or_user_var[, col_name_or_user_var] ...)][SET col_name={expr | DEFAULT},[, col_name={expr | DEFAULT}] ...]

例子

# 换行符采用 \n ,每行代表对应表的一行记录,其中 || 作为字段分隔符,而 \N 表示对应字段为空值 null
3||张三||22||北京||2012-09-19 00:00:00
4||李明||32||\N||2017-05-12 00:00:00
5||孙权||12||广州||\Nload data local infile 'D:/my_user_info.txt' into table user_info
CHARACTER SET utf8 -- 可选,避免中文乱码问题
FIELDS TERMINATED BY '||' -- 字段分隔符,每个字段(列)以什么字符分隔,默认是 \tOPTIONALLY ENCLOSED BY '' -- 文本限定符,每个字段被什么字符包围,默认是空字符ESCAPED BY '\\' -- 转义符,默认是 \
LINES TERMINATED BY '\n' -- 记录分隔符,如字段本身也含\n,那么应先去除,否则load data 会误将其视作另一行记录进行导入
(id, name, age, address, create_date) -- 每一行文本按顺序对应的表字段,建议不要省略
  • 字段中的空值 null 需要使用 \N 表示,如果用空字符串表示,那么根据不同的数据类型,MySQL 处理也各异

    • 数据库字段如果是varchar/char,插入空时,load data 默认导入 空字符串
    • 数据库字段如果是decimal,插入空时,load data 默认导入 0.00000000
    • 数据库字段如果是datetime,插入空时,load data 默认导入 0000-00-00 00:00:00
  • 字段类型如果是datetime,应该严格把控相应文本数据的格式,建议采用类似这种 yyyy-MM-dd HH:mm:ss 同时有日期、时间的格式,否则难以保证数据导入的正确性

    • 数据库字段如果是datetime,插入yyyy-MM-dd时,load data 默认导入 yyyy-MM-dd 00:00:00,数据正确性能够保证
    • 数据库字段如果是datetime,插入HH:mm:ss时,load data 默认导入 0000-00-00 00:00:00,数据正确性不能够保证
  • local关键字

    如果 load data 使用时指定了 local 关键字,则表示文件放在客户端主机上,从客户端读取文本文件;如果没指定,则表示从服务器主机读取文本文件

  • replaceignore 关键字

    • replaceignore 关键字用于控制与唯一键重复的记录的处理
    • 如果指定 replace ,与唯一键重复的行将被覆盖更新。对于任意记录覆盖更新时,如果唯一键外的各个字段其实都没有变化,那么执行操作时受影响行数为1;如果除唯一键外的任意字段有变化,那么执行操作时受影响行数为2
    • 如果指定 ignore ,与唯一键重复的行将被忽略,默认指定 ignore

方法三:

mysql -u用户名 -p密码 数据库名 < 数据库名.sql# mysql -uabc_f -p abc < abc.sql* 

导入查询结果:

load data local infile ' /opt/selectData.sql ' into table 表名 character set utf8;

查看性能语句

查看 MySQL 服务器配置信息 show variables;

show variables;

查看 MySQL 服务器运行的各种状态值

show global status;  

查看进程

查询进程使用情况

show global status like ‘Thread%’;+——————-+———-+
| Variable_name | Value |
+——————-+———-+
| Threads_cached | 26 |
| Threads_connected | 510 |
| Threads_created | 35168165 |
| Threads_running | 459 |

查询服务器 thread_cache_size配置

show variables like ‘thread_cache_size’;
+——————-+——-+
| Variable_name | Value |
+——————-+——-+
| thread_cache_size | 32 |
+——————-+——-+

查看线程

查看全部的线程

如果有 SUPER 权限,则可以看到全部的线程,否则,只能看到自己发起的线程(这是指,当前对应的 MySQL 帐户运行的线程)。

show processlist // 只能查前100条show full processlist // 能查所有select * from information_schema.processlist
select * from information_schema.processlist where db = 'db_name'; // 按db名查询
select * from information_schema.processlist where host like '%host_name%'; // 按host名模糊查询
select * from information_schema.processlist where state = 'Locked'; // 查询被锁住的线程

id列: 一个标识,你要 kill 一个语句的时候很有用。

user列: 显示当前用户,如果不是 root,这个命令就只显示你权限范围内的 sql 语句。

host列: 显示这个语句是从哪个 ip 的哪个端口上发出的。可用来追踪出问题语句的用户。

db列: 显示这个进程目前连接的是哪个数据库。

command列: 显示当前连接的执行的命令,一般就是休眠(sleep),查询(query),连接(connect)。

通常代表资源未释放,如果是通过连接池,sleep状态应该恒定在一定数量范围内

因前端数据输出时(特别是输出到用户终端)未及时关闭数据库连接,导致因网络连接速度产生大量sleep连接,在网速出现异常时,数据库too many connections挂死。

简单解读,数据查询和执行通常只需要不到0.01秒,而网络输出通常需要1秒左右甚至更长,原本数据连接在0.01秒即可释放,但是因为前端程序未执行close操作,直接输出结果,那么在结果未展现在用户桌面前,该数据库连接一直维持在sleep状态!

time列: 此这个状态持续的时间,单位是秒。

state列: 显示使用当前连接的sql语句的状态,很重要的列,后续会有所有的状态的描述,请注意,state 只是语句执行中的某一个状态,一个 sql 语句,已查询为例,可能需要经过copying to tmp table,Sorting result,Sending data 等状态才可以完成。

info列: 显示这个 sql 语句,因为长度有限,所以长的 sql 语句就显示不全,但是一个判断问题语句的重要依据。

这个命令中最关键的就是 state 列,mysql 列出的状态主要有以下几种:

Checking table

正在检查数据表(这是自动的)。

Closing tables

正在将表中修改的数据刷新到磁盘中,同时正在关闭已经用完的表。这是一个很快的操作,如果不是这样的话,就应该确认磁盘空间是否已经满了或者磁盘是否正处于重负中。

Connect Out

复制从服务器正在连接主服务器。

Copying to tmp table on disk

由于临时结果集大于 tmp_table_size,正在将临时表从内存存储转为磁盘存储以此节省内存。

索引及现有结构无法涵盖查询条件,才会建立一个临时表来满足查询要求,产生巨大的恐怖的i/o压力。

很可怕的搜索语句会导致这样的情况,如果是数据分析,或者半夜的周期数据清理任务,偶尔出现,可以允许。频繁出现务必优化之。

Copy to tmp table通常与连表查询有关,建议逐渐习惯不使用连表查询。

某社区数据库阻塞,求救,经查,其服务器存在多个数据库应用和网站,其中一个不常用的小网站数据库产生了一个恐怖的copy to tmp table操作,导致整个硬盘i/o和cpu压力超载。Kill掉该操作一切恢复。

Creating tmp table

正在创建临时表以存放部分查询结果。

deleting from main table

服务器正在执行多表删除中的第一部分,刚删除第一个表。

deleting from reference tables

服务器正在执行多表删除中的第二部分,正在删除其他表的记录。

Flushing tables

正在执行 FLUSH TABLES,等待其他线程关闭数据表。

Killed

发送了一个 kill 请求给某线程,那么这个线程将会检查kill标志位,同时会放弃下一个 kill 请求。MySQL 会在每次的主循环中检查 kill 标志位,不过有些情况下该线程可能会过一小段才能死掉。如果该线程程被其他线程锁住了,那么 kill 请求会在锁释放时马上生效。

Locked

被其他查询锁住了。

有更新操作锁定
通常使用 innodb(支持行锁定)可以很好的减少 locked 状态的产生,但是切记,更新操作要正确使用索引,即便是低频次更新操作也不能疏忽。如上影响结果集范例所示。

在 myisam 的时代,locked 是很多高并发应用的噩梦。所以mysql官方也开始倾向于推荐 innodb。

Sending data

正在处理 SELECT 查询的记录,同时正在把结果发送给客户端。

Sending data 并不是发送数据,别被这个名字所欺骗,这是从物理磁盘获取数据的进程,如果你的影响结果集较多,那么就需要从不同的磁盘碎片去抽取数据,

偶尔出现该状态连接无碍。

回到上面影响结果集的问题,一般而言,如果 sending data 连接过多,通常是某查询的影响结果集过大,也就是查询的索引项不够优化。

如果出现大量相似的 SQL 语句出现在 show proesslist 列表中,并且都处于 sending data 状态,优化查询索引,记住用影响结果集的思路去思考。

Sorting for group

正在为 GROUP BY 做排序。

Sorting for order

正在为 ORDER BY 做排序。

​和Sending data类似,结果集过大,排序条件没有索引化,需要在内存里排序,甚至需要创建临时结构排序

Opening tables

这个过程应该会很快,除非受到其他因素的干扰。例如,在执 ALTER TABLE 或 LOCK TABLE 语句行完以前,数据表无法被其他线程打开。 正尝试打开一个表。

Removing duplicates

正在执行一个 SELECT DISTINCT 方式的查询,但是 MySQL 无法在前一个阶段优化掉那些重复的记录。因此,MySQL 需要再次去掉重复的记录,然后再把结果发送给客户端。

Reopen table

获得了对一个表的锁,但是必须在表结构修改之后才能获得这个锁。已经释放锁,关闭数据表,正尝试重新打开数据表。

Repair by sorting

修复指令正在排序以创建索引。

Repair with keycache

修复指令正在利用索引缓存一个一个地创建新索引。它会比 Repair by sorting 慢些。

Searching rows for update

正在讲符合条件的记录找出来以备更新。它必须在 UPDATE 要修改相关的记录之前就完成了。

Sleeping

正在等待客户端发送新请求.

System lock

正在等待取得一个外部的系统锁。如果当前没有运行多个 mysqld 服务器同时请求同一个表,那么可以通过增加 –skip-external-locking参数来禁止外部系统锁。

Upgrading lock

INSERT DELAYED 正在尝试取得一个锁表以插入新记录。

Updating

正在搜索匹配的记录,并且修改它们。

User Lock

正在等待 GET_LOCK()。

Waiting for tables

该线程得到通知,数据表结构已经被修改了,需要重新打开数据表以取得新的结构。然后,为了能的重新打开数据表,必须等到所有其他线程关闭这个表。以下几种情况下会产生这个通知:FLUSH TABLES tbl_name, ALTER TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE, 或 OPTIMIZE TABLE。

waiting for handler insert

INSERT DELAYED 已经处理完了所有待处理的插入操作,正在等待新的请求。

Waiting for net, reading from net, writing to net

偶尔出现无妨

如大量出现,迅速检查数据库到前端的网络连接状态和流量

因外挂程序,内网数据库大量读取,内网使用的百兆交换迅速爆满,导致大量连接阻塞在waiting for net,数据库连接过多崩溃

大部分状态对应很快的操作,只要有一个线程保持同一个状态好几秒钟,那么可能是有问题发生了,需要检查一下。还有其它的状态没在上面中列出来,不过它们大部分只是在查看服务器是否有存在错误是才用得着。

按客户端 IP 分组,看哪个客户端的链接数最多

select client_ip,count(client_ip) as client_num from (select substring_index(host,':' ,1) as client_ip from information_schema.processlist ) as connect_info group by client_ip order by client_num desc;

查看正在执行的线程,并按 Time 倒排序,看看有没有执行时间特别长的线程

select * from information_schema.processlist where Command != 'Sleep' order by Time desc;

查询缓存配置

查看当前的 MySQL 数据库是否支持查询缓存:

SHOW VARIABLES LIKE 'have_query_cache';	 

查看当前 MySQL 是否开启了查询缓存 :

SHOW VARIABLES LIKE 'query_cache_type'; 

查看查询缓存的占用大小 :

SHOW VARIABLES LIKE 'query_cache_size';  	

查看查询缓存的状态变量:

SHOW STATUS LIKE 'Qcache%'; 

各个变量的含义如下:

参数 含义
Qcache_free_blocks 查询缓存中的可用内存块数
Qcache_free_memory 查询缓存的可用内存量
Qcache_hits 查询缓存命中数
Qcache_inserts 添加到查询缓存的查询数
Qcache_lowmen_prunes 由于内存不足而从查询缓存中删除的查询数
Qcache_not_cached 非缓存查询的数量(由于 query_cache_type 设置而无法缓存或未缓存)
Qcache_queries_in_cache 查询缓存中注册的查询数
Qcache_total_blocks 查询缓存中的块总数

查看超时时间

show variables like  '%timeout%';+----------------------------+--------+
| Variable_name              | Value  |
+----------------------------+--------+
| connect_timeout            | 在获取链接时,等待握手的超时时间,只在登录时有效,登录成功这个参数就不管事了。主要是为了防止网络不佳时应用重连导致连接数涨太快,一般默认(10)即可。 |
| delayed_insert_timeout     | 这是为MyISAM INSERT DELAY设计的超时参数,在INSERT DELAY中止前等待INSERT语句的时间。 |
| innodb_lock_wait_timeout   | 描述很长,简而言之,就是事务遇到锁等待时的Query超时时间。跟死锁不一样,InnoDB一旦检测到死锁立刻就会回滚代价小的那个事务,锁等待是没有死锁的情况下一个事务持有另一个事务需要的锁资源,被回滚的肯定是请求锁的那个Query。 |
| innodb_rollback_on_timeout | 这个参数关闭或不存在的话遇到超时只回滚事务最后一个Query,打开的话事务遇到超时就回滚整个事务。 |
| interactive_timeout        | 一个持续SLEEP状态的线程多久被关闭。线程每次被使用都会被唤醒为activity状态,执行完Query后成为interactive状态,重新开始计时。wait_timeout不同在于只作用于TCP/IP和Socket链接的线程,意义是一样的。 |
| net_read_timeout           | 这个参数只对TCP/IP链接有效,分别是数据库等待接收客户端发送网络包和发送网络包给客户端的超时时间,这是在Activity状态下的线程才有效的参数 |
| net_write_timeout          | 这个参数只对TCP/IP链接有效,分别是数据库等待接收客户端发送网络包和发送网络包给客户端的超时时间,这是在Activity状态下的线程才有效的参数 |
| slave_net_timeout          | 这是Slave判断主机是否挂掉的超时设置,在设定时间内依然没有获取到Master的回应就人为Master挂掉了。|
| table_lock_wait_timeout    | 50     | # 这个参数已经没用了
| wait_timeout               | 一个持续SLEEP状态的线程多久被关闭。线程每次被使用都会被唤醒为activity状态,执行完Query后成为interactive状态,重新开始计时。wait_timeout不同在于只作用于TCP/IP和Socket链接的线程,意义是一样的。 |
+----------------------------+--------+

查看 innodb 缓冲池大小

select @@innodb_buffer_pool_size/1024/1024/1024;  # GB
select @@innodb_buffer_pool_size # 字节

查看 server 接受的数据包大小

show global variables like 'max_allowed_packet';

查看字符集

系统变量:
– character_set_server:默认的内部操作字符集
– character_set_client:客户端来源数据使用的字符集
– character_set_connection:连接层字符集
– character_set_results:查询结果字符集
– character_set_database:当前选中数据库的默认字符集
– character_set_system:系统元数据(字段名等)字符集
– 还有以collation_开头的同上面对应的变量,用来描述字符序。show variables like 'character%';

查看所有数据库字符集

select SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME, SQL_PATH from information_schema.SCHEMATA;

查看表的字符集

show table status from database_name like '%table_name%;

查看表字段的字符集

show full columns from database_name.table_name;

查看某个数据库中所有表的数据量

select table_name,table_rows from information_schema.tables where table_schema = 'schema_name' order by table_rows desc;

查询数据库中所有表名

select table_schema, table_name from information_schema.tables;

查询指定数据库中所有表名

select table_schema, table_name from information_schema.tables where table_schema = 'schema_name';

查询指定数据库中指定表的所有字段名 column_name

select table_schema, table_name, column_name from information_schema.columns where table_name = 'table_name';

模糊查询指定数据库中指定表的所有字段名 column_name

select table_schema, table_name, column_name from information_schema.columns where table_name like '%table_name%';

查询指定字段在哪个表中

select * from information_schema.columns where column_name = UPPER('column_name') OR column_name =('column_name')

查找某个表在哪个库

select table_schema, table_name from information_schema.TABLES where table_name = 'table_name';

模糊查找某个表在哪个库

select table_schema, table_name from information_schema.TABLES where table_name like '%table_name%';

并集

去重

select * from table_name
union 
select * from table_name

不去重

select * from table_name
union all
select * from table_name

交集

select table_name1.oname, table_name1.odesc from table_name1 inner join table_name2 on table_name1.oname=table_name2.oname and table_name1.odesc=table_name2.odescselect table_name1.oname, table_name1.odesc from table_name1 inner join table_name2 using(oname,odesc)

差集

select id from table_name1 where id not in (select id from table_name2)select id from table_name 1
left join
(select id as i from table_name2) on table_name1.id=t1.i where table_name2.i is null

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

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

相关文章

legged-robot关于locomotion、Navigation任务主要文章速览

0. 前言 目前legged robot包括locomotion(怎么走)、navigation(往哪走)、人形机器人的whole body control以及基于机械臂的manipulation的任务。 本文章特此记录 一方面便于日后自己的温故学习,另一方面也便于大家的学习和交流。 如有不对之处,欢迎评论区指出错误,你我共…

IT部门管理之IT十二条令.180409

团队越来越大,靠人管几乎有力无心,只能靠制度管理了。 前段时间对部门颁布了12条令,效果明显。 特此Mark。汇报:三条总结:汇报讲究精简,一个事情最多一句话概括。 一页报告:内容精简,报告一页word搞定。 统计分析:尽量用报表或图表说话。用数字说话,比用语言表达更加…

IDEA如何查看类中的方法和属性列表

前言 大家好,我是小徐啊。我们在开发Java应用的时候,一般都是需要写属性和方法的。这些属性和方法构成了我们代码开发的基础。当一个Java类中,有很多属性和方法的时候,如何快速找到这些方法和属性呢?今天,小徐就来介绍下如何在IDEA中查找。 如何查找属性和方法 首先,打开…

MySql 执行计划

目录获取执行计划解读执行计划type 字段Extra 字段访问谓词与过滤谓词完整字段信息格式化参数执行计划中的分区表信息获取额外的执行计划信息获取指定连接的执行计划获取实际运行的执行计划执行计划(execution plan,也叫查询计划或者解释计划)是 MySQL 服务器执行 SQL 语句的…

用css实现倒影的效果

在前端开发中,使用 CSS 来实现倒影效果是一个常见的技巧。这通常可以通过使用 CSS3 的 box-reflect 属性或者通过伪元素和线性渐变来实现。然而,需要注意的是,box-reflect 是一个非标准的 WebKit 属性,主要在 Chrome 和 Safari 中支持,而在 Firefox 和 IE 中不支持。 方法…

Mac电脑如何卸载软件?App Cleaner

Mac电脑如何卸载软件?App Cleaner 垃圾清理 App Cleaner & Uninstaller Pro Mac,是一款Mac卸载工具,残余垃圾清除工具!可以卸载应用程序或只删除不需要的服务文件,甚至可以删除以前删除的应用程序中的文件。使用该应用程序,您可以管理Mac扩展程序并使用一个按钮禁用所…

20 GitHub 仓库帮助你成为 React专家

原文:https://dev.to/martinadamsdev/20-github-repositories-to-become-a-react-master-opl#how-to-become-a-react-master-1推荐的 GitHub 仓库列表:reactjs/reactjs.org:官方 React 文档,提供了详细的学习指南和示例代码。facebook/react:React 的官方仓库,包含了核心…

WebStorm 2024.3.1 前端开发工具

WebStorm 2024.3.1 前端开发工具 JetBrains WebStorm 2024 mac,是一款JavaScript开发工具,WebStorm 非常了解您的项目结构,可以在编码的各个方面提供帮助。它将自动补全代码,检测错误和冗余并提出修正建议,帮助您安全地重构代码。

MySQL数据库开启远程访问权限

1、背景描述 默认情况下,MySQL 只允许本地登录,即只能在安装 MySQL 数据库所在的主机环境中访问。 在实际开发和使用中,一般需要访问远程服务器的数据库,此时就需要开启服务器端 MySQL 的远程访问权限。 2、查看MySQL的用户表如上图所示,Host 列指定了允许用户登录所使用的…

如何高效且安全地进行网站页面模板的修改?

在现代网站建设中,页面模板的修改是提升用户体验、优化SEO排名以及保持网站美观度的重要手段。以下是详细的步骤:备份现有模板:在开始任何修改之前,请确保已经对当前使用的模板进行了完整备份。这可以防止意外错误导致的数据丢失。 选择合适的编辑工具:根据所用的内容管理…

掌握这些技巧,让你轻松应对网站模板修改中的常见挑战

注意事项 解释遵循最佳实践 始终按照官方文档推荐的方式来进行修改,避免直接编辑核心文件,以减少升级时出现问题的风险。考虑SEO影响 模板中的元标签、标题标签等元素直接影响搜索引擎抓取效率,因此在修改时要格外小心,确保不会破坏原有SEO设置。维护一致性 整个网站应该保…