<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>MySQL on 菜鸟程序员</title><link>https://www.azhw.com.cn/%E5%BC%80%E6%BA%90%E5%B7%A5%E5%85%B7%E5%92%8C%E4%B8%AD%E9%97%B4%E4%BB%B6%E6%9C%8D%E5%8A%A1/mysql/</link><description>Recent content in MySQL on 菜鸟程序员</description><generator>Hugo</generator><language>zh-cn</language><atom:link href="https://www.azhw.com.cn/%E5%BC%80%E6%BA%90%E5%B7%A5%E5%85%B7%E5%92%8C%E4%B8%AD%E9%97%B4%E4%BB%B6%E6%9C%8D%E5%8A%A1/mysql/index.xml" rel="self" type="application/rss+xml"/><item><title/><link>https://www.azhw.com.cn/%E5%BC%80%E6%BA%90%E5%B7%A5%E5%85%B7%E5%92%8C%E4%B8%AD%E9%97%B4%E4%BB%B6%E6%9C%8D%E5%8A%A1/mysql/mysql5.6.17%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.azhw.com.cn/%E5%BC%80%E6%BA%90%E5%B7%A5%E5%85%B7%E5%92%8C%E4%B8%AD%E9%97%B4%E4%BB%B6%E6%9C%8D%E5%8A%A1/mysql/mysql5.6.17%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85/</guid><description>&lt;h1 id="mysql5617编译安装">MySQL5.6.17编译安装&lt;a class="td-heading-self-link" href="#mysql5617%e7%bc%96%e8%af%91%e5%ae%89%e8%a3%85" aria-label="Heading self-link">&lt;/a>&lt;/h1>
&lt;blockquote>
&lt;p>现在MySQL已经是8.x了， 这么老的版本应该不会再有人编译安装了。
再说单机版这个时代的背景下还是docker启动吧。
本文仅用于个人纪念&lt;/p>&lt;/blockquote>
&lt;ol>
&lt;li>
&lt;p>yum install -y gcc*&lt;/p>
&lt;/li>
&lt;li>
&lt;p>安装cmake&lt;/p>
&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># mysql5.5之后需要cmake编译安装，因此，先下载cmake2.8.8&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> tar -zxvf cmake-2.8.8.tar.gz -C /usr/local/src
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>./configure --prefix&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>/usr/local/cmake
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>make
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>make install
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="3">
&lt;li>安装mysql5.6.17&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>tar -zxvf mysql-5.6.17.tar.gz -C /usr/local/src
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>cmake &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span>&lt;span style="color:#8f5902;font-style:italic">#安装路径&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>-DCMAKE_INSTALL_PREFIX&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>/usr/local/mysql &lt;span style="color:#4e9a06">\ &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">#数据文件存放位置 &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>-DMYSQL_DATADIR&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>/usr/local/mysql/data &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span>&lt;span style="color:#8f5902;font-style:italic">#my.cnf路径&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>-DSYSCONFDIR&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>/etc &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span>&lt;span style="color:#8f5902;font-style:italic">#支持MyIASM引擎 &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>-DWITH_MYISAM_STORAGE_ENGINE&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">1&lt;/span> &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span>&lt;span style="color:#8f5902;font-style:italic">#支持InnoDB引擎&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>-DWITH_INNOBASE_STORAGE_ENGINE&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">1&lt;/span> &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span>&lt;span style="color:#8f5902;font-style:italic">#支持Memory引擎 &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>-DWITH_MEMORY_STORAGE_ENGINE&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">1&lt;/span> &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span>&lt;span style="color:#8f5902;font-style:italic">#快捷键功能(我没用过) &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>-DWITH_READLINE&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">1&lt;/span> &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span>&lt;span style="color:#8f5902;font-style:italic">#连接数据库socket路径 &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>-DMYSQL_UNIX_ADDR&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>/tmp/mysqld.sock &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span>&lt;span style="color:#8f5902;font-style:italic">#端口&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>-DMYSQL_TCP_PORT&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">3306&lt;/span> &lt;span style="color:#4e9a06">\ &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">#允许从本地导入数据 &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>-DENABLED_LOCAL_INFILE&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">1&lt;/span> &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span>&lt;span style="color:#8f5902;font-style:italic">#安装支持数据库分区&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>-DWITH_PARTITION_STORAGE_ENGINE&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#0000cf;font-weight:bold">1&lt;/span> &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span>&lt;span style="color:#8f5902;font-style:italic">#安装所有的字符集&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>-DEXTRA_CHARSETS&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>all &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span>&lt;span style="color:#8f5902;font-style:italic">#默认字符&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>-DDEFAULT_CHARSET&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>utf8 &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span>-DDEFAULT_COLLATION&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>utf8_general_ci
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>make
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>make install 
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="4">
&lt;li>：配置MySQL&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 使用下面的命令查看是否有mysql用户及用户组 &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>cat /etc/passwd 查看用户列表
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>cat /etc/group 查看用户组列表 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">#如果没有就创建 &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>groupadd mysql
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>useradd -g mysql mysql 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">#修改/usr/local/mysql权限 &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>chown -R mysql:mysql /usr/local/mysql 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">#修改/usr/local/mysql权限&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">#初始化配置&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic">#进入安装路径，执行初始化配置脚本，创建系统自带的数据库和表 &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87">cd&lt;/span> /usr/local/mysql 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>scripts/mysql_install_db --basedir&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>/usr/local/mysql --datadir&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>/usr/local/mysql/data --user&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>mysql
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>注：在启动MySQL服务时，会按照一定次序搜索my.cnf，先在/etc目录下找，找不到则会搜索&amp;quot;$basedir/my.cnf&amp;quot;，在本例中就是 /usr/local/mysql/my.cnf，这是新版MySQL的配置文件的默认位置！注意：在CentOS 6.4版操作系统的最小安装完成后，在/etc目录下会存在一个my.cnf，需要将此文件更名为其他的名字，如：/etc/my.cnf.bak，否则，该文件会干扰源码安装的MySQL的正确配置，造成无法启动。
启动MySQL&lt;/p></description></item><item><title/><link>https://www.azhw.com.cn/%E5%BC%80%E6%BA%90%E5%B7%A5%E5%85%B7%E5%92%8C%E4%B8%AD%E9%97%B4%E4%BB%B6%E6%9C%8D%E5%8A%A1/mysql/mysql5.6%E5%92%8C5.7%E7%9A%84%E4%BA%8C%E8%BF%9B%E5%88%B6%E5%AE%89%E8%A3%85/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.azhw.com.cn/%E5%BC%80%E6%BA%90%E5%B7%A5%E5%85%B7%E5%92%8C%E4%B8%AD%E9%97%B4%E4%BB%B6%E6%9C%8D%E5%8A%A1/mysql/mysql5.6%E5%92%8C5.7%E7%9A%84%E4%BA%8C%E8%BF%9B%E5%88%B6%E5%AE%89%E8%A3%85/</guid><description>&lt;h1 id="mysql56和57的二进制安装">MySQL5.6和5.7的二进制安装&lt;a class="td-heading-self-link" href="#mysql56%e5%92%8c57%e7%9a%84%e4%ba%8c%e8%bf%9b%e5%88%b6%e5%ae%89%e8%a3%85" aria-label="Heading self-link">&lt;/a>&lt;/h1>
&lt;blockquote>
&lt;p>5.6和5.7有略微的不同在 5步和7步请注意&lt;/p>&lt;/blockquote>
&lt;ol>
&lt;li>获得二进制文件&lt;/li>
&lt;/ol>
&lt;pre tabindex="0">&lt;code># 5.6
wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.28-linux-glibc2.5-x86_64.tar.gz

#
wget http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-5.7.10-linux-glibc2.5-x86_64.tar.gz
&lt;/code>&lt;/pre>&lt;ol start="2">
&lt;li>加压到 /usr/local/mysql 目录(或者解压到当前目录然后做软链接到/usr/local/mysql)&lt;/li>
&lt;/ol>
&lt;pre tabindex="0">&lt;code>mkdir /usr/local/mysql
tar -xvf mysql-5.6.28-linux-glibc2.5-x86_64.tar.gz
mv mysql-5.6.28-linux-glibc2.5-x86_64/* /usr/local/mysql/

mkdir /usr/local/mysql
tar -xvf mysql-5.7.10-linux-glibc2.5-x86_64.tar.gz
mv mysql-5.7.10-linux-glibc2.5-x86_64/* /usr/local/mysql/
&lt;/code>&lt;/pre>&lt;ol start="3">
&lt;li>创建 /usr/local/mysql/data 目录&lt;/li>
&lt;/ol>
&lt;pre tabindex="0">&lt;code># 5.6.28版本不需要
mkdir /usr/local/mysql/data
&lt;/code>&lt;/pre>&lt;ol start="4">
&lt;li>创建mysql用户和修改软件的权限&lt;/li>
&lt;/ol>
&lt;pre tabindex="0">&lt;code>groupadd mysql
useradd -r -g mysql mysql -s /sbin/nologin (创建mysql用户并设置不可登录)
chown -R mysql.mysql /usr/local/mysql/
&lt;/code>&lt;/pre>&lt;ol start="5">
&lt;li>初始化数据(切换当前目录到/usr/local/mysql,在5.7中是bin目录下的mysql_install_db)&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 5.6&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>./scripts/mysql_install_db --user&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>mysql --basedir&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>/usr/local/mysql/ --datadir&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>/usr/local/mysql/data/
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>....此处省略一万字
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8f5902;font-style:italic"># 5.7&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>bin/mysql_install_db --user&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>mysql --basedir&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>/usr/local/mysql/ --datadir&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>/usr/local/mysql/data/
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>2016-01-20 02:47:35 &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>WARNING&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span> mysql_install_db is deprecated. Please consider switching to mysqld --initialize
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>2016-01-20 02:47:45 &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>WARNING&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span> The bootstrap log isn&lt;span style="color:#a40000">&amp;#39;&lt;/span>t empty:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>2016-01-20 02:47:45 &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>WARNING&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span> 2016-01-19T18:47:36.732678Z &lt;span style="color:#0000cf;font-weight:bold">0&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>Warning&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span> --bootstrap is deprecated. Please consider using --initialize instead
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>2016-01-19T18:47:36.750527Z &lt;span style="color:#0000cf;font-weight:bold">0&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>Warning&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span> Changed limits: max_open_files: &lt;span style="color:#0000cf;font-weight:bold">1024&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>requested 5000&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>2016-01-19T18:47:36.750560Z &lt;span style="color:#0000cf;font-weight:bold">0&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">[&lt;/span>Warning&lt;span style="color:#ce5c00;font-weight:bold">]&lt;/span> Changed limits: table_open_cache: &lt;span style="color:#0000cf;font-weight:bold">431&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">(&lt;/span>requested 2000&lt;span style="color:#ce5c00;font-weight:bold">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="6">
&lt;li>复制配置文件到 /etc/my.cnf&lt;/li>
&lt;/ol>
&lt;pre tabindex="0">&lt;code>cp -a ./support-files/my-default.cnf /etc/my.cnf (如果问是否替换选择Y)
&lt;/code>&lt;/pre>&lt;ol start="7">
&lt;li>mysql的服务脚本放到系统服务中&lt;/li>
&lt;/ol>
&lt;pre tabindex="0">&lt;code># 5.6
cp -a ./support-files/mysql.server /etc/init.d/mysqld
service mysqld start 
./bin/mysql -uroot -p(空密码)

# 5.7 版本开始系统会默认初始化一个root密码
cp -a ./support-files/mysql.server /etc/init.d/mysqld
service mysqld start 
cat /root/.mysql_secret
# Password set for user &amp;#39;root@localhost&amp;#39; at 2016-01-20 03:22:59 
Tl:iRfEhRlQ6
bin/mysql -uroot -p(输入Tl:iRfEhRlQ6)
[root@c12 mysql57]# ./bin/mysqladmin -u root -p password
Enter password: 
New password: 
Confirm new password: 
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.
mysql&amp;gt; select version();
+-----------+
| version() |
+-----------+
| 5.7.8-rc |
+-----------+
1 row in set (0.00 sec)
&lt;/code>&lt;/pre></description></item><item><title>MySQL通用</title><link>https://www.azhw.com.cn/%E5%BC%80%E6%BA%90%E5%B7%A5%E5%85%B7%E5%92%8C%E4%B8%AD%E9%97%B4%E4%BB%B6%E6%9C%8D%E5%8A%A1/mysql/mysql%E9%80%9A%E7%94%A8/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.azhw.com.cn/%E5%BC%80%E6%BA%90%E5%B7%A5%E5%85%B7%E5%92%8C%E4%B8%AD%E9%97%B4%E4%BB%B6%E6%9C%8D%E5%8A%A1/mysql/mysql%E9%80%9A%E7%94%A8/</guid><description>&lt;h2 id="mysql基础">MySQL基础&lt;a class="td-heading-self-link" href="#mysql%e5%9f%ba%e7%a1%80" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;pre tabindex="0">&lt;code>字段名称，数据类型，类型修饰（限制）
 字符
 CHAR(n)
 VARCHAR(n)
 BINARY(n)
 VARBINARY(n)
 TEXT(n)
 BLOB(n)
 数值
 精确数值
 整型
 TINYINT
 SMALLINT
 MEDIUMINT
 INT
 BIGINT
 
 修饰符：UNSIGNED，无符号
 NOT NULL
 十进制
 DECIMAL
 近似数值
 浮点型
 FLOAT
 DOUBLE
 日期时间
 DATE
 TIME
 DATETIME
 STAMP
 布尔
 内置：ENUM， SET

字段约束：限制
primary key 主键约束
foreign key 外键约束
not null 非空约束
null 空约束
check 检查约束
unique 唯一约束
default 默认值约束
auto_increment 自增长约束

drop、delete区别：
drop：删除库、删除表、删除字段
delete：

alter、update区别：
alter：修改表
update：修改记录

存储引擎(表的类型)
存储引擎分类
1、ISAM：查询速度快、支持全文索引、
 不支持事务、不支持外键、不支持check约束
2、MyISAM：ISAM升级版
3、HEAP：速度快、数据驻留在内存
 数据管理不稳定、计算机断电后所有数据全部丢失
4、InnoDB：速度较慢、支持事务、支持check约束、支持外键
 不支持全文索引

常用的存储引擎：InnoDB、MyISAM
网站必须使用全文索引：MyISAM(大型网站)
不用非得使用全文索引：InnoDB(中小型网站)

数据库优化：修改数据库、表提高数据库运行效率
1、选择最合适的字段类型
 char、varchar区别
 字段的数据类型能用数字，就不用字符串
2、尽可能不使用子查询
 1)用内连接代替子查询
 2)子查询充当字段、delete语句出现子查询。只能用子查询
3、like查询尽可能用右侧%
 1) like &amp;#39;a%&amp;#39;
4、事务、保持数据的完整
 1)避免数据库中出现大量的垃圾数据
5、尽可能的使用InnoDB引擎
 1)事务：保持数据的完整性
 2)外键：在业务层保证外键
6、给字段适当的添加索引
 1)提高表的查询速度
7、每个表最好都有主键、而且主键还是数字类型
 1)主键本身就是一个主键索引
8、避免数据库中出现NULL值
 1)数据库对NULL值做了特殊处理
9、尽可能让相同类型的字段做比较
 1)避免出现数据类型的转换
10、数据库设计是否合理
11、拆分表
12、主从数据库
13、负载均衡
14、服务器的硬件对数据库的影响
&lt;/code>&lt;/pre>&lt;h2 id="基础配置myini配置文件etcmycnf">基础配置my.ini配置文件(/etc/my.cnf)&lt;a class="td-heading-self-link" href="#%e5%9f%ba%e7%a1%80%e9%85%8d%e7%bd%aemyini%e9%85%8d%e7%bd%ae%e6%96%87%e4%bb%b6etcmycnf" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;pre tabindex="0">&lt;code>1、设置mysql端口号
 port=3306
2、设置mysql编码
 default-character-set=utf8
3、设置mysql的存储引擎
 default-storage-engine=INNODB
4、设置mysql最大连接数
 max_connections=100
5、设置数据库默认的存储引擎
default-storage-engine=MyISAM
&lt;/code>&lt;/pre>&lt;h2 id="控制台基础命令">控制台基础命令&lt;a class="td-heading-self-link" href="#%e6%8e%a7%e5%88%b6%e5%8f%b0%e5%9f%ba%e7%a1%80%e5%91%bd%e4%bb%a4" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;pre tabindex="0">&lt;code># 登录 （在shell中执行）
mysql -h 主机地址 -u 用户名 -p密码

# 显示当前mysql版本和当前日期 
select version(),current_date; 

# 导出数据 （在shell中执行）
mysqldump -u 用户名 -p 数据库名 &amp;gt; FILE.sql
mysqldump -u 用户名 -p 数据库名 表名&amp;gt; 导出的文件名

导出一个数据库结构 
　　mysqldump -u wcnc -p -d -add-drop-table smgp_apps_wcnc &amp;gt;d:wcnc_db.sql 
　　-d 没有数据 -add-drop-table 在每个create语句之前增加一个drop table 
导出多个数据库
[root@localhost ~]# mysqldump -uroot -p -P3306 --databases course test &amp;gt; course.sql

导出所有数据库
[root@localhost ~]# mysqldump -uroot -p -P3306 --all-databases &amp;gt; all.sql

仅导出course数据库的数据，不包括表结构
[root@localhost ~]# mysqldump -uroot -p -P3306 --no-create-info course &amp;gt; course.sql

仅导出course数据库中的students和students_myisam两个表
[root@localhost ~]# mysqldump -uroot -p -P3306 --no-create-info course students students_myisam &amp;gt; students.sql

仅导出course数据库的表结构
[root@localhost ~]# mysqldump -uroot -p -P3306 --no-data course &amp;gt; course.sql

导出course数据库中除了teacher和score两个表的其他表结构和数据
[root@localhost ~]# mysqldump -uroot -p -P3306 --ignore-table=course.teacher --ignore-table=course.score course &amp;gt; course.sql

导出course数据库的表和存储过程和触发器
[root@localhost ~]# mysqldump -uroot -p -P3306 --routines --triggers course &amp;gt; course.sql

导出course数据库中符合条件的数据
[root@localhost ~]# mysqldump -uroot -p -P3306 --where=&amp;#34;sid in (1,2)&amp;#34; course students students_myisam &amp;gt; course.sql


在主库备份
[root@codis-178 ~]# mysqldump -uroot -p -P3306 --master-data=2 --single-transctions course &amp;gt; course.sql
（在备份开始之初，在所有表上加一个只读锁（flush table with read lock），当成功获取该锁并开始备份之后，此锁就会立即释放，后续dump过程不会影响其他的读写操作）

在从库备份
[root@codis-178 ~]# mysqldump -uroot -p -P3306 --dump-slave --single-transctions test &amp;gt; test.sql

# 导入数据 （在shell中执行） 
mysqldump -uUSER -p DATABASE &amp;lt; FILE.sql
mysql -u username -p -D dbname &amp;lt; filename.sql 
mysql&amp;gt;source wcnc_db.sql 

# 显示所有库 
show databases;

查看当前使用的数据库 
mysql&amp;gt; select database(); 

# 使用库 
use 库名;

# 查看当前库中所有表 
show tables;

# 查看表结构
desc 表名;
describe tablename;

# 显示当前mysql数据库所有的编码信息
show variables like &amp;#39;character%&amp;#39;;

# 查看表的存储引擎
use information_schema;
select table_schema,table_name,engine from tables;
select table_schema,table_name,engine from tables
 where table_name=&amp;#39;表名&amp;#39;;
show create table 表名;

# mysql 新设置用户或更改密码后需用`flush privileges;`刷新MySQL的系统权限相关表，否则会出现拒绝访问，还有一种方法，就是重新启动mysql服务器，来使新设置生效。


# 命令行交互模式的一些控制命令 尤其是用windows的命令行连接数据库时很有用。不过说实话现在谁还用命令行连数据库呢
# mysql客户端窗口的编码
character_set_client utf8
# 连接数据库的编码
character_set_connection utf8
# 数据库的编码
character_set_database utf8
# 数据库的文件是哪种类型
character_set_filesystem binary
# 结果集的编码
character_set_results utf8
# mysql服务编码
character_set_server utf8
# mysql系统编码
character_set_system utf8
# mysql编码文件存储位置
character_sets_dir C:\Program Files\MySQL\MySQL Server 5.0\sharets
# 设置客户端编码
set names gbk;
&lt;/code>&lt;/pre>&lt;h2 id="数据库操作">数据库操作&lt;a class="td-heading-self-link" href="#%e6%95%b0%e6%8d%ae%e5%ba%93%e6%93%8d%e4%bd%9c" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;pre tabindex="0">&lt;code>create database name; 创建数据库 



drop database name 直接删除数据库，不提醒 
mysqladmin drop databasename 删除数据库前，有提示。
&lt;/code>&lt;/pre>&lt;h2 id="表操作和字段操作">表操作和字段操作&lt;a class="td-heading-self-link" href="#%e8%a1%a8%e6%93%8d%e4%bd%9c%e5%92%8c%e5%ad%97%e6%ae%b5%e6%93%8d%e4%bd%9c" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;pre tabindex="0">&lt;code>create table 表名
(
 字段名 数据类型 约束,
 字段名 数据类型 约束,
 字段名 数据类型 约束
)engine=存储引擎名;

修改表结构
1、修改表名
alter table 原名 rename to 新名;
2、添加字段
alter table 表名 add column 字段名 数据类型 约束;
alter table 表名 add 字段名 数据类型 约束;//使用这个即可
3、删除字段
alter table 表名 drop column 字段名;
alter table 表名 drop 字段名;//用这个即可
4、修改字段
alter table 表名 change 原字段名 新字段名 数据类型 约束;
alter table 表名 change userName userName varchar(20) not null;

切换clumon 顺序到最前 
ALTER TABLE INFO MODIFY STAT TINYINT(4) FIRST;

切换到某clumon 后面 
ALTER TABLE 表名 MODIFY clumonname AFTER clumonname;

复制表
1、整表复制(表结构、数据)
create table 新表 select * from 原表;
create table bbsInfo2 select * from bbsInfo;
create table bbsInfo2 select bbsId,clickTimes,bbsTime from bbsInfo;
2、复制表结构(表结构)
create table 新表 like 原表;
create table bbsInfo2 like bbsInfo;
&lt;/code>&lt;/pre>&lt;h2 id="索引操作">索引操作&lt;a class="td-heading-self-link" href="#%e7%b4%a2%e5%bc%95%e6%93%8d%e4%bd%9c" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;pre tabindex="0">&lt;code>索引index
作用：提升数据库查询语句的速度
适合添加索引的字段：经常充当where条件的字段

索引的分类
1、主键索引：字段必须是主键、一张表最多只能有一个主键索引
2、普通索引：对字段没限制
3、唯一索引：字段里不能出现重复值
4、全文索引：对字段也没限制(建议：添加到中文字段)


各种索引适合添加到什么样字段
主键索引：主键
唯一索引：该字段没有重复值
全文索引：中文字段
普通索引：任意字段


创建索引的语法格式
1、主键索引
建表的同时指定主键
2、普通索引
create index 索引名 on 表名(字段名);
3、唯一索引
建表的同时指定唯一约束
create unique index 索引名 on 表名(字段名);
4、全文索引
create fulltext index 索引名 on 表名(字段名);

删除索引
drop index 索引名 on 表名;

索引的例子
1、普通索引
create index bbs_index on bbsInfo(title);
drop index bbs_index on bbsInfo;
2、唯一索引
create unique index bbs_index on bbsInfo(title);
drop index bbs_index on bbsInfo;
3、全文索引
create fulltext index bbs_index on bbsInfo(title);
drop index bbs_index on bbsInfo;

全文索引的例子
create table helloInfo
(
 helloId int auto_increment primary key,
 title varchar(100) not null,
 content text not null,
 helloTime timestamp default current_timestamp
)engine=MyISAM;

create fulltext index hello_index on helloInfo(title);
create fulltext index hello_c_index on helloInfo(content);
drop index hello_c_index on helloInfo;

索引注意：
1、经常充当where条件的字段必须要添加索引
2、全文索引对表的类型的限制
3、什么样的字段适合添加什么类型的索引
4、提升表的查询语句的速度
5、索引不是由用户来调用，而是执行查询时，自动提升查询速度
6、一个字段最多只能有一个索引
 一张表可以有多个索引，但是索引不能同名

索引总结：
1、作用
2、分类
3、索引对字段的限制
4、什么样的字段适合添加什么样的索引
5、创建
6、删除索引
&lt;/code>&lt;/pre>&lt;h2 id="视图操作">视图操作&lt;a class="td-heading-self-link" href="#%e8%a7%86%e5%9b%be%e6%93%8d%e4%bd%9c" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;pre tabindex="0">&lt;code>创建视图语法格式
create view 视图名
as
select查询语句;
例子
create view myview
as
select claId,claName,schName from classInfo,schoolInfo;

create view bbsInfoView
as
select * from bbsInfo;


查看现存的所有视图
1、利用查看表的语句
show tables;
2、通过information_schema库---&amp;gt;views表 查看
select table_schema,table_name from views;
select table_schema,table_name from information_schema.views;

删除视图
1、删除库(视图所在的库)
drop database 库名;
2、删除视图
drop view 视图名;


修改视图
alter view 视图名
as
select语句;
例子
alter view myview
as
select claId,claName,schName from classInfo a,schoolInfo b
 where a.schId=b.schId;


使用视图：把视图当表用
select * from 视图名;
例子
select * from myview;
select * from myview where claId=3;
select * from myview limit 0,2;
select * from myview order by claId;


使用视图的场合
1、一个多表查询语句在网站开发中使用的次数超3次
2、一个多表查询语句，添加分页功能

视图注意：
1、视图中只能存放select查询语句
2、把视图当表用
3、视图可以执行insert、update、delete操作
 建议不要对视图执行insert、update、delete操作

视图总结：
1、视图作用
2、创建视图
3、查看视图
4、修改视图
5、使用视图
6、使用视图的场合
&lt;/code>&lt;/pre>&lt;h2 id="数据操作">数据操作&lt;a class="td-heading-self-link" href="#%e6%95%b0%e6%8d%ae%e6%93%8d%e4%bd%9c" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;h3 id="增">增&lt;a class="td-heading-self-link" href="#%e5%a2%9e" aria-label="Heading self-link">&lt;/a>&lt;/h3>
&lt;pre tabindex="0">&lt;code>
添加记录
insert into 表名(字段,字段,字段...)values(值,值,值...);
insert into 表名 values(值,值,值...);//所有字段都要添加

复制数据到新表
1、假设两个表的表结构完全一样
insert into 新表 select * from 原表;
insert into bbsInfo2 select * from bbsInfo;
2、假设两个表的表结构不一样
insert into 新表(字段,字段...) select 字段,字段... from 原表;
insert into bbsInfo2 select bbsId,clickTimes,bbsTime from bbsInfo;
&lt;/code>&lt;/pre>&lt;h3 id="删">删&lt;a class="td-heading-self-link" href="#%e5%88%a0" aria-label="Heading self-link">&lt;/a>&lt;/h3>
&lt;pre tabindex="0">&lt;code>delete from 表名 where 条件;

# delete： 慢 可恢复 支持事务 不恢复id
# truncate： 快 不可恢复 不支持事务 恢复id
# 清空表
delete from 表名;//支持事务,进入日志文件

# 截段表
truncate table 表名;//不支持事务
&lt;/code>&lt;/pre>&lt;h3 id="改">改&lt;a class="td-heading-self-link" href="#%e6%94%b9" aria-label="Heading self-link">&lt;/a>&lt;/h3>
&lt;pre tabindex="0">&lt;code>update 表名 set 字段=值,字段=值... where 条件;
update 表名 set 字段=值,字段=值...;
&lt;/code>&lt;/pre>&lt;h3 id="查">查&lt;a class="td-heading-self-link" href="#%e6%9f%a5" aria-label="Heading self-link">&lt;/a>&lt;/h3>
&lt;pre tabindex="0">&lt;code>运算符
逻辑运算符：and or not
比较运算符：&amp;lt; &amp;lt;= &amp;gt; &amp;gt;= = != &amp;lt;&amp;gt;

普通查询
select * from 表名;
select 字段,字段... from 表名;
//查询语句查询出来的结果：结果集、临时表


去掉重复值的查询
select distinct 字段,字段 from 表名;

条件查询
select * from 表名 where 条件;
select 字段... from 表名 where 条件;

排序
select * from 表名 order by 字段; #升序
select * from 表名 order by 字段 desc; #降序
select * from 表名 order by 字段,字段;
select * from 表名 order by 字段 desc,字段 desc;
select * from 表名 where 条件 order by 字段;

聚合函数(聚合查询)：统计查询
聚集函数 意义 
　　SUM ( ) 求和 
　　AVG ( ) 平均值 
　　COUNT ( ) 表达式中记录的数目 
　　COUNT (* ) 计算记录的数目 
　　MAX 最大值 
　　MIN 最小值 
　　VAR 方差 
　　STDEV 标准误差 
　　FIRST 第一个值 
　　LAST 最后一个值 
个数统计
select count(*) from 表名;
select count(字段) from 表名;
总和统计
select sum(字段) from 表名;
平均数统计
select avg(字段) from 表名;
最大值统计
select max(字段) from 表名;
最小值统计
select min(字段) from 表名;
一个语句包含多个聚合函数
select sum(字段),max(字段) from 表名;
注意：除了count以外,所有的聚合函数中的字段必须为数字类型

给字段起别名
select 字段 as 别名 from 表名;
select 字段,字段 as 别名,字段 from 表名;
select 聚合函数(字段) as 别名 from 表名;

给表起别名
select * from 表 as 别名;
select * from 表 别名;

分组
1、查看某一字段有多少个不同的值
select 字段1 from 表名 group by 字段1;
select 聚合函数(字段1) from 表名 group by 字段2;

分页
select * from 表名 limit 起始值,条数;
select * from 表名 where 条件 order by 字段 limit 起始值,条数;


模糊查询(站内搜索)
%：任意长度的任意字符串
_：任意一个字符
使用 \_ 代表 _ (如果要查询的字符是下划线的话) 除了可以转移_ 还可以转义 \0 \&amp;#39; \&amp;#34; \b(退格) \n(换行) \r(回车) \t(tab) \\ \%
select * from 表名 where 字段 like &amp;#39;%_内容&amp;#39;;
select * from 表名 where 字段 like &amp;#39;%_内容&amp;#39; and|or 条件;
select * from 表名 where 字段 like &amp;#39;%_内容&amp;#39; order by 字段;
select * from 表名 where 字段 like &amp;#39;%_内容&amp;#39; limit 起始值,条数;

select * from 表名 where userName like &amp;#39;张%&amp;#39;;
select * from 表名 where userName like &amp;#39;张_&amp;#39;;
select * from 表名 where userName like &amp;#39;%三%&amp;#39;;


多表查询
1、内连接：将多张表的字段合为一张表
查询两张表
select * from 表1 inner join 表2 on 关联的字段相等;
查询多张表
select * from 表1 inner join 表2 on 关联的字段相等
 inner join 表3 on 关联的字段相等
 inner join 表4 on 关联的字段相等
内连接另一种使用方式
select * from 表1,表2,表3... where 关联的字段相等;//使用这个比较方便

2、外连接：将多张表的字段合为一张表
左外连接：左表为主、右表为副//以left|right outer join为分界线分左表右表
select * from 表1 left outer join 表2 on 关联的字段相等;
右外连接：右表为主、左表为副
select * from 表1 right outer join 表2 on 关联的字段相等;

3、子查询(嵌套查询)：在一个sql语句中包含另一个查询语句
在查询语句的条件中出现了另一个查询语句
select * from 表1
 where 字段 in (select 字段 from 表2 where 条件);
在删除语句的条件中出现了另一个查询语句
delete from 表1
 where 字段 in (select 字段 from 表2 where 条件);
在修改语句的条件中出现了另一个查询语句
update 表1 set 字段=值,字段=值...
 where 字段 in (select 字段 from 表2 where 条件);
在查询语句的*位置出现了另一个查询语句
select 字段,字段,(select 字段 from 表2 where 条件) as 别名 from 表1;

4、联合查询union：将多张表的记录合为一张表//短期内用不到大型网站使用
将多张表的记录合为一张表，去掉了重复记录
select * from 表1 union select * from 表2;
将多张表的记录合为一张表，不去掉重复记录
select * from 表1 union all select * from 表2;

例：在&amp;#39;WA&amp;#39;地区的雇员表中按头衔分组后，找出具有同等头衔的雇员数目大于1人 group by Title having Count(Title)&amp;gt;1
　　的所有头衔。 
　　Select Title ,Count(Title) as Total 
　　FROM Employees 
　　Where Region = &amp;#39;WA&amp;#39; 
　　GROUP BY Title 
　　HAVING Count(Title)&amp;gt;1 
&lt;/code>&lt;/pre>&lt;h2 id="做例子要用">//做例子要用&lt;a class="td-heading-self-link" href="#%e5%81%9a%e4%be%8b%e5%ad%90%e8%a6%81%e7%94%a8" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;pre tabindex="0">&lt;code>学院表
create table schoolInfo
(
 schId int auto_increment primary key,
 schName varchar(100) not null
);
insert into schoolInfo(schName)values(&amp;#39;理工学院&amp;#39;);
insert into schoolInfo(schName)values(&amp;#39;自动化学院&amp;#39;);
insert into schoolInfo(schName)values(&amp;#39;网络学院&amp;#39;);
#班级表
create table classInfo
(
 claId int auto_increment primary key,
 schId int,
 claName varchar(100) not null,
 foreign key (schId) references schoolInfo(schId)
);
insert into classInfo(schId,claName)values(1,&amp;#39;php1401&amp;#39;);
insert into classInfo(schId,claName)values(3,&amp;#39;php1402&amp;#39;);
insert into classInfo(schId,claName)values(2,&amp;#39;php1403&amp;#39;);
insert into classInfo(schId,claName)values(3,&amp;#39;php1404&amp;#39;);
#学生表
create table student
(
 stuId int auto_increment primary key,
 claId int,
 stuName varchar(20) not null,
 foreign key (claId) references classInfo(claId)
);
insert into student(claId,stuName)values(1,&amp;#39;张三&amp;#39;);
insert into student(claId,stuName)values(2,&amp;#39;李四&amp;#39;);
insert into student(claId,stuName)values(3,&amp;#39;王五&amp;#39;);
insert into student(claId,stuName)values(4,&amp;#39;赵六&amp;#39;);
insert into student(claId,stuName)values(3,&amp;#39;田七&amp;#39;);
insert into student(claId,stuName)values(3,&amp;#39;张大三&amp;#39;);
insert into student(claId,stuName)values(2,&amp;#39;李小五&amp;#39;);
&lt;/code>&lt;/pre>&lt;h2 id="触发器trigger数据库中的事件">触发器Trigger：数据库中的事件&lt;a class="td-heading-self-link" href="#%e8%a7%a6%e5%8f%91%e5%99%a8trigger%e6%95%b0%e6%8d%ae%e5%ba%93%e4%b8%ad%e7%9a%84%e4%ba%8b%e4%bb%b6" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;pre tabindex="0">&lt;code>触发器Trigger：数据库里的事件
作用：当用户对表进行insert、update、delete同时，是否要执行其他的操作

触发器的调用：
当用户对表进行insert、update、delete操作时，由系统自动调用

触发器的类型：insert、update、delete

触发器执行的时间：before、after

创建触发器
delimiter // #修改mysql定界符
drop trigger if exists 触发器名// #如果该触发器己经存，删除
create trigger 触发器名
before|after insert|update|delete
on 表名
for each row
begin
 sql语句; #注意：begin和end之间，不能出现无意义的查询语句
 sql语句;
 sql语句;
end //
delimiter ;//将mysql定界符改回系统默认

删除触发器
1、删除触发器所在的库
drop database 库名;
2、删除触发器所在的表
drop table 表名;
3、删除触发器
drop trigger 触发器名;

触发器注意：
1、触发器是由系统自动调用
2、触发器中不能出现无意义的查询语句
3、触发器没有参数

触发器总结
1、触发器作用
2、触发器的执行时间
3、触发器的类型
4、一张表最多能添加三个触发器
5、创建
6、删除
7、查看现存的所有触发器

查看现存的所有触发器
information_schema库---&amp;gt;triggers表
trigger_schema：库名
trigger_name：触发器名
EVENT_MANIPULATION：触发器类型
event_object_table：表名
select trigger_schema,trigger_name,EVENT_MANIPULATION,event_object_table from triggers;
select trigger_schema,trigger_name,EVENT_MANIPULATION,event_object_table from information_schema.triggers;

触发器例子
create table userInfo
(
 userName varchar(20) primary key,
 password varchar(20) not null,
 sex char(3) check(sex=&amp;#39;男&amp;#39; or sex=&amp;#39;女&amp;#39;)
);
create table newsInfo
(
 newsId int auto_increment primary key,
 title varchar(100) not null,
 newsTime timestamp default current_timestamp
);
#统计信息表
create table msgInfo
(
 userCount int default 0,
 newsCount int default 0
);
insert into msgInfo values(0,0);

#给userInfo表添加一个insert触发器
delimiter //
drop trigger if exists addUserTrigger//
create trigger addUserTrigger
after insert
on userInfo
for each row
begin
 #将msgInfo表的userCount字段值加一
 update msgInfo set userCount=userCount+1;
end //
delimiter ;

#给userInfo添加一个delete触发器
delimiter //
drop trigger if exists delUserTrigger//
create trigger delUserTrigger
after delete
on userInfo
for each row
begin
 update msgInfo set userCount=userCount-1;
end //
delimiter ;


insert into userInfo values(&amp;#39;张三&amp;#39;,&amp;#39;123456&amp;#39;,&amp;#39;男&amp;#39;);
insert into userInfo values(&amp;#39;李四&amp;#39;,&amp;#39;123456&amp;#39;,&amp;#39;女&amp;#39;);
delete from userInfo where userName=&amp;#39;张三&amp;#39;;

触发器注意：
1、触发器依赖于表
2、触发器类型：insert、update、delete
3、在触发器中不能出现无意义的查询语句
4、一个触发器只能监听一个表的一个操作
5、触发器由系统自动调用
6、触发器不能传参


触发器总结：
1、触发器作用、原理
2、触发器类型
3、触发器的执行时间
4、创建触发器
5、删除触发器
6、查看现存的所有触发器
7、触发器使用场合
&lt;/code>&lt;/pre>&lt;h2 id="存储过程procedure数据库中的自定义函数">存储过程Procedure：数据库中的自定义函数&lt;a class="td-heading-self-link" href="#%e5%ad%98%e5%82%a8%e8%bf%87%e7%a8%8bprocedure%e6%95%b0%e6%8d%ae%e5%ba%93%e4%b8%ad%e7%9a%84%e8%87%aa%e5%ae%9a%e4%b9%89%e5%87%bd%e6%95%b0" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;pre tabindex="0">&lt;code>创建存储过程
delimiter //
drop procedure if exists 存储过程名//
create procedure 存储过程名()
begin
 sql语句;
 sql语句;
 sql语句;
end //
delimiter ;

删除存储过程
1、删除库
drop database 存储过程所在的库名;
2、删除存储过程
drop procedure 存储过程名;

查看现存的所有存储过程
mysql库---&amp;gt;proc表
select db,name from proc;
select db,name from mysql.proc;

调用存储过程
call 存储过程名();
call 存储过程名(值,值,值...);
call 存储过程名(值,值,@变量名,@变量名,@变量名);
select @变量名,@变量名...;

使用存储过程的场合: 操纵数据库时要执行多个sql语句

存储过程注意：
1、一次编写多次调用
2、参数：输入参数、输出参数
3、调用存储过程

存储过程总结：
1、作用
2、创建
3、删除
4、调用
5、参数

类拟于数据库中的输出语句
select &amp;#39;你好&amp;#39; as msg;
select 30 as age;
select current_timestamp as time;

例子：
delimiter //
drop procedure if exists hello//
create procedure hello()
begin
 select current_timestamp as time;
end //
delimiter ;

call hello();
&lt;/code>&lt;/pre>&lt;h2 id="触发器trigger与存储过程procedure的区别">触发器(Trigger)与存储过程(Procedure)的区别&lt;a class="td-heading-self-link" href="#%e8%a7%a6%e5%8f%91%e5%99%a8trigger%e4%b8%8e%e5%ad%98%e5%82%a8%e8%bf%87%e7%a8%8bprocedure%e7%9a%84%e5%8c%ba%e5%88%ab" aria-label="Heading self-link">&lt;/a>&lt;/h2>
&lt;p>不同点
1、触发器由系统自动调用，存储过程必须由用户通过call来调用
2、触发器没有参数、存储过程可以有参数(输入、输出)
3、触发器依赖表、存储过程依赖于库
相同点
1、一次编写多次调用
2、都可以实现T-SQL编程&lt;/p></description></item></channel></rss>