MySQL 主键和索引区别

主键:

所谓主键就是能够唯一标识表中某一行的属性或属性组,一个表只能有一个主键,是唯一性索引。书大家都看过吧,每页有个页码,我们的数据表主键就相当于是这个页码。

索引:

索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。索引相当于书的目录,有了目录我们可以很快的知道这本书的基本内容和结构,数据索引也一样,它可以加快数据表的查询速度。

主键是索引的一种,唯一性索引。

mysql 忘记root密码解决办法

当前版本:mysql5.7

找到my.cnf 一般在/etc/my.cnf 或 macos /usr/local/etc/my.cnf

在[mysqld] 下加入以下语句:skip-grant-tables

执行mysql -uroot -p ,如果提示输入密码,按回车。然后登入mysql

修改密码

use mysql;
update user set password=PASSWORD('你的密码') where user='root';
###  5.7执行以下语句
### update user set authentication_string=PASSWORD('你的密码')  where user='root';
flush priveleges;

再修改my.cnf 将刚添加的语句去掉。成功!!

关于Mariadb启动报错Job for mariadb.service failed because the control process exited

MariaDB重启后,执行 systemctl start mariadb 启动报错

Job for mariadb.service failed because the control process exited with error code. See "systemctl status mariadb.service" and "journalctl -xe" for details.

根据官方提示执行 systemctl status mariadb.service 或者 journalctl -xe 并不能看出真正原因,此时可以查看mariadb的日志文件,查看错误原因。

cd /var/log/mariadb/

tail -n 100 mariadb.log

发现 Fatal error: cannot allocate memory for the buffer pool。

内存不够了

vim /etc/my.cnf将 innodb_buffer_pool_size = 专用的DB服务器,改为内存的50%,非专用改为内存的15-20%。

重启即可

mysql 实现首字母A-Z排序

两种方案:

  1. 语句
select * from user ORDER BY CONVERT(name USING GBK) ASC;

// 这样可以实现中文排序,但是有个问题,英文字母没有排序,而且在中文上边

2. 自定义函数

“`mysql

DELIMITER $$    
CREATE FUNCTION `fristPinyin`(P_NAME VARCHAR(255)) RETURNS varchar(255) CHARSET utf8
DETERMINISTIC
BEGIN
DECLARE V_RETURN VARCHAR(255);
DECLARE V_BOOL INT DEFAULT 0;
DECLARE FIRST_VARCHAR VARCHAR(1);
SET FIRST_VARCHAR = left(CONVERT(P_NAME USING gbk),1); SELECT FIRST_VARCHAR REGEXP '[a-zA-Z]' INTO V_BOOL;
IF V_BOOL = 1 THEN
SET V_RETURN = FIRST_VARCHAR;
ELSE
SET V_RETURN = ELT(INTERVAL(CONV(HEX(left(CONVERT(P_NAME USING gbk),1)),16,10),0xB0A1,0xB0C5,0xB2C1,0xB4EE,0xB6EA,0xB7A2,0xB8C1,0xB9FE,0xBBF7, 0xBFA6,0xC0AC,0xC2E8,0xC4C3,0xC5B6,0xC5BE,0xC6DA,0xC8BB,0xC8F6, 0xCBFA,0xCDDA,0xCEF4,0xD1B9,0xD4D1), 'A','B','C','D','E','F','G','H','J','K','L','M','N','O','P','Q','R','S','T','W','X','Y','Z');
END IF;
RETURN V_RETURN;
END$$
DELIMITER;



select * from app_user ORDER BY fristPinyin(name) ASC ;
// 即可实现英文也按中文排序