Mysql不常见的插入/更新SQL语句

本文章主要讲解INSERT ... SELECTINSERT ... ON DUPLICATE KEY UPDATE这种比较特殊的数据操作(data manipulation)的SQL。

INSERT … SELECT语句
使用该语句可以通过将select语句得到的结果快速插入到一个表中,该select语句可以查询一个或者多个表,比如:

INSERT INTO tbl_temp2 (fld_id)
  SELECT tbl_temp1.fld_order_id
  FROM tbl_temp1 WHERE tbl_temp1.fld_order_id > 100;

继续阅读“Mysql不常见的插入/更新SQL语句”

MySQL索引的一些见解

索引的两种

索引的类型:索引分为聚簇索引和非聚簇索引两种,聚簇索引是按照数据存放的物理位置为顺序的,而非聚簇索引就不一样了;聚簇索引能提高多行检索的速度,而非聚簇索引对于单行的检索很快。

索引的类型

创建索引时字段的length是指索引的长度,可以不指定,length只对字符串类型的字段有效。

继续阅读“MySQL索引的一些见解”

brew安装的mysql忘记密码

cp /usr/local/Cellar/mysql/5.7.17/homebrew.mxcl.mysql.plist /usr/local/Cellar/mysql/5.7.17/homebrew.mxcl.mysql.plist.bak
vi /usr/local/Cellar/mysql/5.7.17/homebrew.mxcl.mysql.plist

添加下面这个参数

<string>--defaults-file=/etc/my.cnf</string>
echo 'skip-grant-tables' >> /etc/my.cnf

结果如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>KeepAlive</key>
  <true/>
  <key>Label</key>
  <string>homebrew.mxcl.mysql</string>
  <key>ProgramArguments</key>
  <array>
    <string>/usr/local/opt/mysql/bin/mysqld_safe</string>
    <string>--defaults-file=/etc/my.cnf</string>
    <string>--bind-address=127.0.0.1</string>
    <string>--datadir=/usr/local/var/mysql</string>
    <string>--general_log=1</string>
    <string>--general_log_file=/usr/local/var/mysql/query.log</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
  <key>WorkingDirectory</key>
  <string>/usr/local/var/mysql</string>
</dict>
</plist>

重启:

brew services restart mysql

无密码进入:

mysql -u -h localhost -p

不输入任何密码,直接回车。

执行如下命令,重新给root赋值权限:

grant all on *.* to root@'localhost' identified by '';

可能会有如下错误:

ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement

解决办法:

flush privileges;

再次执行:

grant all on *.* to root@'localhost' identified by '';
flush privileges;

最后,去除 /etc/my.cnf里的skip-grant-tables后,重启:

brew services restart mysql

OK.

安装MysQL并修改默认密码

1、官方安装文档

http://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/

2、下载 Mysql yum包

http://dev.mysql.com/downloads/repo/yum/

下载到本地再上传到服务器,或者使用wget 直接下载

wget http://repo.mysql.com/mysql57-community-release-el7-10.noarch.rpm

3、安转软件源

platform-and-version-specific-package-name 替换为你下载的rpm名

sudo rpm -Uvh platform-and-version-specific-package-name.rpm

例如:

rpm -Uvh mysql57-community-release-el7-10.noarch.rpm

4、安装mysql服务端

 yum install -y mysql-community-server

如果网络环境不是很好,执行完命令就可以去泡杯茶或者荣耀杀一局

5、启动mysql

service mysqld start
systemctl start mysqld.service

6、检查mysql 的运行状态

service mysqld status
systemctl status mysqld.service

7、修改临时密码

Mysql5.7默认安装之后root是有密码的。

7.1 获取MySQL的临时密码

为了加强安全性,MySQL5.7为root用户随机生成了一个密码,在error log中,关于error log的位置,如果安装的是RPM包,则默认是/var/log/mysqld.log。
只有启动过一次mysql才可以查看临时密码

grep 'temporary password' /var/log/mysqld.log

这里的密码是YdsGaxOq>2n!

7.2 登陆并修改密码

使用默认的密码登陆

mysql -uroot -p

用该密码登录到服务端后,必须马上修改密码,不然会报如下错误:

mysql> select @@log_error;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
mysql>

修改密码

ALTER USER 'root'@'localhost' IDENTIFIED BY 'root123';

如果密码设置太简单出现以下的提示

如何解决ERROR 1819 (HY000): Your password does not satisfy the current policy requirements呢? 这里直接提供解决方案文末有详细的说明

必须修改两个全局参数:
首先,修改validate_password_policy参数的值

mysql> set global validate_password_policy=0; 

再修改密码的长度

set global validate_password_length=1;

再次执行修改密码就可以了

ALTER USER 'root'@'localhost' IDENTIFIED BY 'root123';

8、授权其他机器登陆

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;

FLUSH  PRIVILEGES;

9、关于密码设置的详细说明

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

参考:https://blog.csdn.net/zyw_java/article/details/70949596

数据库存储引擎

本文非原创,原文地址见文章底部。

对于初学者来说我们通常不关注存储引擎,但是 MySQL 提供了多个存储引擎,包括处理事务安全表的引擎和处理非事务安全表的引擎。在 MySQL 中,不需要在整个服务器中使用同一种存储引擎,针对具体的要求,可以对每一个表使用不同的存储引擎。

继续阅读“数据库存储引擎”

MySQL: Starting MySQL….. ERROR! The server quit without updating PID file解决办法

这个错误从字面上面看不出来到底是哪里出问题了,我是按照下面这么做解决问题的:

首先定位到自己的my.cnf,我发现我的系统里面有两个my.cnf,于是删掉了一个,在另外一个my.cnf的[mysqld_safe]里面加入了
log-error=/var/lib/mysql/mysqld.log

再次service mysqld start ,ok,查看/var/lib/mysqld.log,看到有如下错误:

Can’t find file: ‘./mysql/user.frm’ (errno: 13 – Permission denied)

如果看过mysql/data目录的人都知道这个是mysql用户的表目录,使用ll /usr/mysql/data看一下,发现所有者竟然是root,于是

sudo chown -R mysql.mysql /usr/mysql/data

然后再次 service mysqld start 就可以启动mysql了。