查询MySQL版本

  1. show variables like '%version%';

image.png

mysql> show variables like '%version%';
+-------------------------+------------------------------+
| Variable_name           | Value                        |
+-------------------------+------------------------------+
| innodb_version          | 5.7.27                       |
| protocol_version        | 10                           |
| slave_type_conversions  |                              |
| tls_version             | TLSv1,TLSv1.1                |
| version                 | 5.7.27                       |
| version_comment         | MySQL Community Server (GPL) |
| version_compile_machine | x86_64                       |
| version_compile_os      | macos10.14                   |
+-------------------------+------------------------------+

mysql的utf8mb4编码的collation

SHOW COLLATION WHERE charset = 'utf8mb4';

查询结果

一般是utf8mb4_general_ci和utf8mb4_bin,前者排序时不区分大小写。

collation charset id default compiled sortlen
utf8mb4_general_ci utf8mb4 45 Yes Yes 1
utf8mb4_bin utf8mb4 46 Yes 1
utf8mb4_unicode_ci utf8mb4 224 Yes 8
utf8mb4_icelandic_ci utf8mb4 225 Yes 8
utf8mb4_latvian_ci utf8mb4 226 Yes 8
utf8mb4_romanian_ci utf8mb4 227 Yes 8
utf8mb4_slovenian_ci utf8mb4 228 Yes 8
utf8mb4_polish_ci utf8mb4 229 Yes 8
utf8mb4_estonian_ci utf8mb4 230 Yes 8
utf8mb4_spanish_ci utf8mb4 231 Yes 8
utf8mb4_swedish_ci utf8mb4 232 Yes 8
utf8mb4_turkish_ci utf8mb4 233 Yes 8
utf8mb4_czech_ci utf8mb4 234 Yes 8
utf8mb4_danish_ci utf8mb4 235 Yes 8
utf8mb4_lithuanian_ci utf8mb4 236 Yes 8
utf8mb4_slovak_ci utf8mb4 237 Yes 8
utf8mb4_spanish2_ci utf8mb4 238 Yes 8
utf8mb4_roman_ci utf8mb4 239 Yes 8
utf8mb4_persian_ci utf8mb4 240 Yes 8
utf8mb4_esperanto_ci utf8mb4 241 Yes 8
utf8mb4_hungarian_ci utf8mb4 242 Yes 8
utf8mb4_sinhala_ci utf8mb4 243 Yes 8
utf8mb4_german2_ci utf8mb4 244 Yes 8
utf8mb4_croatian_ci utf8mb4 245 Yes 8
utf8mb4_unicode_520_ci utf8mb4 246 Yes 8
utf8mb4_vietnamese_ci utf8mb4 247 Yes 8

一、sql_safe_updates 限制修改及删除语句

sql_safe_updates这个MySQL自带的参数就可以解决我们的问题,并且该参数是可以在线变更。当该参数开启的情况下,你必须要在UPDATE和DELETE语句后携带WHERE条件,否则就会报出ERROR!

  • sql_safe_updates=0,即未开启
  • sql_safe_updates=1,表示开启

数值和关键字都可以使用:0=OFF,1=ON。

5.0,5.1都是session级别的,5.6及以后是global&session级别。

低版本的数据库只能在创建session连接时设置带上set sql_safe_updates=on; 高版本的数据库可以直接SET GLOBAL sql_safe_updates = 1,设置完成后需要重新连接生效。 重启后,即使全局设置的限制也会失效,一般恢复到默认无限制,需要重新设置

1. 级别

当前连接级别

set sql_safe_updates=1;

全局级别

SET GLOBAL sql_safe_updates = 1;

注意⚠️

  • 设置之后要求重新连接才可生效
  • 数据库重启后要及时执行否则恢复默认的限制状态

2. 查看当前限制开启状态

show variables like 'sql_safe_updates';

+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| sql_safe_updates | ON    |
+------------------+-------+

ON表示开启。

3. 异常信息

当sql_safe_updates=1时,即开启安全更新执行不加WHERE条件的SQL时报错信息如下

mysql> UPDATE safe_table SET futility_row=0;
1175 - You are using safe update mode and you tried to update a table 
    without a WHERE that uses a KEY column.

4. 测试数据表

CREATE TABLE `iot`.`safe_table`  (
  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
  `futility_row` int(11) NOT NULL DEFAULT 0 COMMENT '无用的列,安全更新使用',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci 
    COMMENT = '安全更新、删除测试表' ROW_FORMAT = Dynamic;

5. 条件限制

⚠️:key表示索引,const表示常量。YES可以执行,NO不能执行。

操作条件 delete update
no where NO NO
where key YES YES
where no key NO NO
limit NO YES
where no key+limit YES YES
where key+limit YES YES
where const NO NO
where const+limit NO YES

常用命令

查看当前连接的IP地址列表及连接个数

SELECT SUBSTRING_INDEX( HOST, ':', 1 ) AS ip, count(*) 
FROM information_schema.PROCESSLIST 
GROUP BY ip;
DESC `user`;-- 表信息,DESCRIBE的缩写

SHOW CREATE TABLE `user`;-- 表创建语句
SHOW CREATE DATABASE iot;-- 数据库简单信息,创建语句

SHOW TABLE STATUS FROM iot; /* 显示当前使用或者指定的database中的每个表的信息。
信息包括表类型和表的最新更新时间*/
SHOW TABLES FROM iot;-- 显示数据库所有表的名称,没有from默认数据库
SHOW DATABASES [LIKE "i%"];-- 显示mysql中所有数据库的名称,模糊查询i开头的

SHOW PROCESSLIST;/* 显示系统中正在运行的所有进程,也就是当前正在执行的查询。
大多数用户可以查看他们自己的进程,但是如果他们拥有process权限,就可以查看所有人的进程,包括密码。*/

SHOW COLUMNS FROM `user` FROM iot;-- 显示表中列名称
SHOW GRANTS FOR root@localhost;-- 显示一个用户的权限,显示结果类似于grant命令

SHOW INDEX FROM `user`;-- 显示表的索引 
SHOW STATUS; -- 显示一些系统特定资源的信息300+,例如,正在运行的线程数量
SHOW VARIABLES;-- 显示系统变量的名称和值
show privileges;-- 显示服务器所支持的不同权限

SHOW ENGINES;-- 显示安装以后可用的存储引擎和默认引擎。
SHOW ERRORS;-- 只显示最后一个执行语句所产生的错误
SHOW ENGINE INNODB STATUS;-- 查看到死锁信息

SHOW INNODB STATUS;-- 显示innoDB存储引擎的状态
SHOW LOGS;-- 显示最后一个执行的语句所产生的错误、警告和通知

查询数据表的表结构

SELECT
    column_name columnName,
    data_type dataType,
    column_comment columnComment,
    column_key columnKey,
    extra 
FROM
    information_schema.COLUMNS 
WHERE
    table_name = "sys_user"
    AND table_schema = ( SELECT DATABASE ( ) ) 
ORDER BY
    ordinal_position

列名、类型、备注、键类型、自增
image.png