MySQL系列(3) 常见语法 & sql & & 问题

1.MySQL查询字段区不区分大小写?

MySQL默认的字符检索策略:utf8_general_ci,表示不区分大小写。

1.1 解决方案一

可以使用utf8_general_cs,表示区分大小写,也可以使用utf8_bin,表示二进制比较,同样也区分大小写 。

#注意:
在Mysql5.6.10版本中,不支持utf8_genral_cs

>> 创建表时,直接设置表的collate属性为utf8_general_cs或者utf8_bin;
- 创建表:
CREATE TABLE testt(
id INT PRIMARY KEY,
name VARCHAR(32) NOT NULL
) ENGINE = INNODB COLLATE =utf8_bin;

>> 如果已经创建表,则直接修改字段的Collation属性为utf8_general_cs或者utf8_bin。
-- 修改表结构的Collation属性
ALTER TABLE TABLENAME MODIFY COLUMN COLUMNNAME VARCHAR(50) BINARY CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL;

1.2 解决方案二

直接修改sql语句,在要查询的字段前面加上binary关键字

-- 在每一个条件前加上binary关键字
select * from user where binary username = 'admin' and binary password = 'admin';

-- 将参数以binary('')包围
select * from user where username like binary('admin') and password like binary('admin');

2. 各种 join 的意思

/*
SQL 脚本
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for score
-- ----------------------------
DROP TABLE IF EXISTS `score`;
CREATE TABLE `score` (
  `score_id` int(11) NOT NULL AUTO_INCREMENT,
  `score` double NOT NULL,
  `stu_id` int(11) NOT NULL,
  `subject` varchar(255) NOT NULL,
  PRIMARY KEY (`score_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4;

-- ----------------------------
-- Records of score
-- ----------------------------
INSERT INTO `score` VALUES ('1', '90', '1', '语文');
INSERT INTO `score` VALUES ('2', '80', '6', '语文');

-- ----------------------------
-- Table structure for stu
-- ----------------------------
DROP TABLE IF EXISTS `stu`;
CREATE TABLE `stu` (
  `stu_id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`stu_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4;

-- ----------------------------
-- Records of stu
-- ----------------------------
INSERT INTO `stu` VALUES ('1', 'tom1');
INSERT INTO `stu` VALUES ('2', 'tom2');
INSERT INTO `stu` VALUES ('3', 'tom3');

2.1 inner join (内连接)

内连接是一种一一映射关系,就是两张表都有的才能显示出来
内连接.png
内连接示例查询.png

2.2 left join (左连接)

左连接是左边表的所有数据都有显示出来,右边的表数据只显示共同有的那部分,没有对应的部分只能补空显示,
所谓的左边表其实就是指放在left join的左边的表
左连接.png
左连接示例查询.png

2.3 right join (右连接)

右连接正好是和左连接相反的,这里的右边也是相对right join来说的,在这个右边的表就是右表
右连接.png
右连接示例查询.png

2.4 外连接或全连接

查询出左表和右表所有数据,但是去除两表的重复数据.
MySQL 没有 FULL JOIN, 用 UNION 替代.
外连接或全连接.png
外连接或全连接示例查询.png

3.一些SQL

3.1 查询连接数

MySQL连接查询语句(注意与各种连接池的关系及在多线程中的影响):
1.查询最大连接数
show variables like '%max_connections%';

2.查询已发生的最大连接数
show global status like '%Max_used_connections%';

3.查询当前连接数
select * from information_schema.processlist order by Time desc;

4.查询某用户下当前连接数
select * from information_schema.processlist WHERE USER='root';

3.2 查询 mysql全局/会话事务隔离级别(默认是可重复读)

select @@global.tx_isolation, @@tx_isolation;

3.3 查询mysql 某个库所有表元信息(含存储引擎类型)

select * from information_schema.tables;

参考资料
https://mp.weixin.qq.com/s/oh__jOBfqt4IWDK7X2xUcg

你可能感兴趣的:(MySQL系列(3) 常见语法 & sql & & 问题)