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 (内连接)
内连接是一种一一映射关系,就是两张表都有的才能显示出来
2.2 left join (左连接)
左连接是左边表的所有数据都有显示出来,右边的表数据只显示共同有的那部分,没有对应的部分只能补空显示,
所谓的左边表其实就是指放在left join的左边的表
2.3 right join (右连接)
右连接正好是和左连接相反的,这里的右边也是相对right join来说的,在这个右边的表就是右表
2.4 外连接或全连接
查询出左表和右表所有数据,但是去除两表的重复数据.
MySQL 没有 FULL JOIN, 用 UNION 替代.
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