mysql 入门第二天 涉及连表查询

xiaoxiao2021-02-27  235

8月29日上课内容(MySQL第二天)

(一)课前回顾(30分钟)

前言:
特别提示:mariadb默认的字符集不是utf8, 因此,在数据库中插入中文的时候显示的是????的乱码
解决方法:在my.cnf配置文件中添加如下几个指令
[client] default-character-set=utf8 [mysqld] character-set-server=utf8 init_connect='SET NAMES utf8' [mysql] default-character-set=utf8 重启mariadb,在重新创建数据库,但是之前乱码的数据库无法修复了
如何修改表名:rename table yhy1 to yhy2;

总结昨天的知识点

(二)安装phpMyAdmin

前言:phpMyAdmin是一款实用PHP开发的web图形化MySQL数据操作工具。开发者必备

在centos 7上安装phpMyAdmin图形化工具 第一步: 安装服务: yum install -y httpd php php-mysql mariadb-server yum install -y php-mbstring php-mcrypt 编辑httpd的主配置文件, 在DirectoryIndex 后面加上 index.php,为了让php页面作为首要文件被访问 DirectoryIndex index.php index.html 第二步: 启动mariadb 运行 mysql_secure_installation 给root设置密码 第三步: cd /var/www/html unzip phpMyAdmin-4.0.10.20-all-languages.zip ln -sv phpMyAdmin-4.0.10.20-all-languages admin cd admin mv config.sample.inc.php config.inc.php vi config.inc.php, 修改如下配置 $cfg['blowfish_secret'] = 'a8b7c6d'; /* User used to manipulate with storage */ $cfg['Servers'][$i]['controlhost'] = 'localhost'; $cfg['Servers'][$i]['controluser'] = 'root'; $cfg['Servers'][$i]['controlpass'] = '123456'; 第四步: 启动服务 systemctl restart mariadb systemctl restart httpd.service 第五步: 在浏览器访问 http://192.168.7.90/admin

(三)PHP以daemon方式独立运行

前言:上个星期上课已经说过,php以两种方式与httpd结合
第一种yum安装,php以嵌入的方式与httpd结合
第二种安装php-fpm,php以守护进程的方式独立运行,通过fastCGI与httpd结合

yum安装httpd和php-fpm yum install -y httpd php-fpm php-mysql 确保在/etc/httpd/conf.modules.d/00-proxy.conf中httpd已经编译安装了proxy_fcgi_module模块如果httpd使用中心主机,编辑/etc/httpd/conf.d/fastcgi.conf # 指定默认的主页面为index.php DirectoryIndex index.php #关闭正向代理请求 ProxyRequests OFF # 通过fcgi协议将客户端的url 转发给php-fpm进程,$1为域名后面的存放在文件系统的php资源路径,这里使用127.0.0.1:9000表明httpd和php-fpm必须安装在同一台主机上。 ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1 如果httpd使用虚拟主机,先删除/etc/httpd/conf.d/fastcgi.conf文件,再编辑/etc/httpd/conf.d/virtual_host.conf DirectoryIndex index.php <VirtualHost *:80> ServerName www.a.com DocumentRoot /app/www ProxyRequests Off ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/app/www/$1 <Directory "/app/www"> Options FollowSymLinks AllowOverride None Require all granted </Directory> </VirtualHost> 注释中心主机 # DocumentRoot "/var/www/html" 创建虚拟主机的站点目录,在创建一个php的首页文件 mkdir -pv /app/www vi index.php 如果是httpd和php-fpm不在同一台主机的话,那么需要修改 /etc/php-fpm.d/www.conf文件 # 修改监听的IP为本机的所有的IP listen = 0.0.0.0:9000 # 注释允许的客户端 ;listen.allowed_clients = 127.0.0.1

(四)编译安装LAMP架构(httpd、php、MySQL发布在三台不同的主机独立运行)

前言:编译安装:httpd-2.4、php-5.4,二进制安装Mariadb-5.5
如果是PHP作为httpd的模块编译安装,那么需要先安装httpd,再安装php。那么这就必须要求httpd和PHP安装在同一台主机上,这样系统资源争用较大,因此不考虑这种情况
如果httpd、php、MySQL 都不在同一台主机上,那么就没有安装顺序而言了,只是编译安装PHP的时候编译参数不同而已
那么接下来,我们将httpd、php、MySQL 编译在不同主机上,看看是如何操作的
编译安装httpd(192.168.23.8) # 1:安装包组 yum groupinstall -y "Development tools" "Server Platform Development" # 2:安装依赖开发包 yum install pcre-devel apr-devel apr-util-devel openssl-devel # 3:解压本地的httpd-2.4.25.tar tar xf httpd-2.4.25.tar cd httpd-2.4.25 # 4:配置安装信息,生成make file, yum 安装的RPM包一般都是在/usr目录下 ./configure --prefix=/usr/local/apache-2.4 --sysconfdir=/etc/httpd-2.4 --enable-so --enable-ssl --enable-rewrite --enable-modules=most --enable-mpms-shared=all --with-zlib --with-pcre --with-apr=/usr --with-apr-util=/usr --with-mpm=prefork # 5:编译安装 make -j 4 && make install # 6:制作软连接,便于版本管控 ln -sv /usr/local/apache-2.4 /usr/local/apache # 7:因为自带的Apache服务控制脚本:apachectl脚本在/usr/local/apache-2.4/bin/目录下,可以将这个目录添加到环境变量中,编辑 vi /etc/profile.d/httpd.sh , 添加export PATH=/usr/local/apache/bin/:$PATH,那么启动的时候,就可以直接使用apachectl start vi /etc/profile.d/httpd.sh文件,添加如下代码 export PATH=/usr/local/apache/bin/:$PATH . /etc/profile.d/httpd.sh # 8:将头文件和库文件输出到默认的 ln -sv /usr/local/apache/include /usr/include/httpd # 9:启动httpd2.4 apachectl start # 10:编写服务脚本实现 service httpd start 启动httpd vi /etc/rc.d/init.d/httpd-2.4 添加 #! /bin/bash # # network Bring up/down networking # # chkconfig: 2345 10 90 # description: Activates/Deactivates all network interfaces configured to \ # start at boot time. # ### BEGIN INIT INFO # Provides: $network # Should-Start: iptables ip6tables NetworkManager-wait-online NetworkManager # Short-Description: Bring up/down networking # Description: Bring up/down networking ### END INIT INFO . /etc/rc.d/init.d/functions if [ -f /etc/sysconfig/httpd ]; then . /etc/sysconfig/httpd fi HTTPD_LANG=${HTTPD_LANG-"C"} INITLOG_ARGS="" apachectl=/usr/local/apache/bin/apachectl httpd=${HTTPD-/usr/local/apache/bin/httpd} prog=httpd pidfile=${PIDFILE-/usr/local/apache/logs/httpd.pid} lockfile=${LOCKFILE-/var/lock/subsys/httpd} RETVAL=0 STOP_TIMEOUT=${STOP_TIMEOUT-10} start() { echo -n $"Starting $prog: " LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS RETVAL=$? echo [ $RETVAL = 0 ] && touch ${lockfile} return $RETVAL } stop() { status -p ${pidfile} $httpd > /dev/null if [[ $? = 0 ]]; then echo -n $"Stopping $prog: " killproc -p ${pidfile} -d ${STOP_TIMEOUT} $httpd else echo -n $"Stopping $prog: " success fi RETVAL=$? echo [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile} } reload() { echo -n $"Reloading $prog: " if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then RETVAL=6 echo $"not reloading due to configuration syntax error" failure $"not reloading $httpd due to configuration syntax error" else # Force LSB behaviour from killproc LSB=1 killproc -p ${pidfile} $httpd -HUP RETVAL=$? if [ $RETVAL -eq 7 ]; then failure $"httpd shutdown" fi fi echo } case "$1" in start) start ;; stop) stop ;; status) status -p ${pidfile} $httpd RETVAL=$? ;; restart) stop start ;; condrestart|try-restart) if status -p ${pidfile} $httpd >&/dev/null; then stop start fi ;; force-reload|reload) reload ;; graceful|help|configtest|fullstatus) $apachectl $@ RETVAL=$? ;; *) echo $"Usage: $prog {start|stop|restart|condrestart|try-restart|force-reload|reload|status|fullstatus|graceful|help|configtest}" RETVAL=2 esac exit $RETVAL # 11:让脚本可以被chkconfig管控 chmod +x /etc/rc.d/init.d/httpd-2.4 chkconfig --add /etc/rc.d/init.d/httpd-2.4 # 12:使用service重启服务 service httpd-2.4 start # 13:编辑配置文件,配置虚拟主机,取消下面这个指令前面的注释 Include /etc/httpd-2.4/extra/httpd-vhosts.conf # 14:编辑虚拟机配置文件 vi /etc/httpd-2.4/extra/httpd-vhosts.conf 添加如下内容 ServerName www.a.com DocumentRoot /app/www ProxyRequests Off ProxyPassMatch ^/(.*\.php)$ fcgi://192.168.23.9:9000/app/www/$1 <directory <="" span="" style="box-sizing: border-box; outline: none !important;">"/app/www"> Options FollowSymLinks AllowOverride None Require all granted # 15:检测静态请求是否能够被httpd处理 mkdir -pv /app/www vi /app/www/index.html 添加如下内容

"color: red">hello, i am static page

# 16:编辑主配置文件/etc/httpd-2.4/httpd.conf, 将下面两个模块启用,使得httpd可以转发动态请求给后端的php守护进程 LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so # 17:检查下配置文件的语法是否错误 httpd -t # 18:重启httpd服务 service httpd-2.4 restart 编译安装PHP-5.4.26(192.168.23.9) # 1:安装包组 yum groupinstall -y "Development tools" "Server Platform Development" # 2:安装依赖开发包 yum install -y libxml2-devel libmcrypt-devel bzip2-devel curl-devel openssl-devel pcre-devel # 3:解压php-5.4.26.tar.bz2 tar xf php-5.4.26.tar.bz2 cd php-5.4.26 # 4:生成makefile文件 ./configure --prefix=/usr/local/php5.4 --with-mysql=mysqlnd --with-openssl --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --enable-mbstring --with-png-dir --with-jpeg-dir --with-freetype-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --enable-fpm --with-bz2 --with-curl --with-fpm-user=apache --with-fpm-group=apache # 5:编译安装 make -j 4 make install # 6:拷贝php.ini引擎到php的安装包 ln -vs /usr/local/php5.4 /usr/local/php vi /etc/profile.d/php.sh export PATH=/usr/local/php/sbin:$PATH . /etc/profile.d/php.sh cp php.ini-production /usr/local/php/etc/php.ini cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf # 7:编辑php-fpm.conf vi /usr/local/php/etc/php-fpm.conf 修改配置如下 listen = 0.0.0.0:9000 ;listen.allowed_clients = 127.0.0.1 # 这里要注意,可能需要让php进程有一个固定的pid文件,因此这里取消注释 pid = run/php-fpm.pid # 8:在本地文件系统新建php站点目录 mkdir -pv /app/www vi /app/www/index.php 添加php检查代码 # 9:对于重启和停止php-fpm服务 (1)信号模式: 停止:kill -INT cat /usr/local/php/var/run/php-fpm.pid 重启:kill -USR2 cat /usr/local/php/var/run/php-fpm.pid (2)服务脚本模式(必须先确保在/usr/local/php/var/run/php-fpm.pid 中存在pid号) cd /root/php-5.4.26 cp ./sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm chmod +x /etc/init.d/php-fpm chkconfig --add php-fpm service php-fpm {start|stop|restart|reload} # 10:启动php-fpm service php-fpm start 使用二进制程序包安装Mariadb(192.168.23.10) 第一步:准备数据库目录 mkdir -pv /mydata/data # 所有的MySQL数据保存在这个目录下 useradd -r mysql # 如果mysql用户存在就不要创建了 chown -R mysql.mysql /mydata/data # 为了mysql能够向目录里面写数据,因此让mysql用户对数据目录具有读写权限 第二步:安装二进制程序包 tar xf mariadb-5.5.54-linux-x86_64.tar -C /usr/local # 解压 cd /usr/local # 切入当前/usr/local ln -sv mariadb-5.5.54-linux-x86_64 mysql # 制作软连接 cd /usr/local/mysql # 切入mysql二进制程序 chown -R root:mysql ./* # 修改属主和属组 cp support-files/my-large.cnf /etc/my.cnf # 拷贝配置文件 vi /etc/my.cnf 在mysqld下面添加如下指令 # 编辑配置文件 datadir = /mydata/data innodb_file_per_table = ON skip_name_resolve = ON scripts/mysql_install_db --user=mysql --datadir=/mydata/data # 初始化数据库 ll /mydata/data # 查看数据目录是否有数据 cp support-files/mysql.server /etc/rc.d/init.d/mysqld # 拷贝服务启动文件 chkconfig --add mysqld # 使mysqld服务被chkconfig管控 第三步:启动服务 service mysqld start 第四步:将程序路径添加到环境变量 vi /etc/profile.d/mysqld.sh export PATH=/usr/local/mysql/bin:$PATH . /etc/profile.d/mysqld.sh # 运行脚本 第五步:让root用户可以远程登入 mysql_secure_installation # 运行安全程序 第六步:给root用户授权远程可以登入 mysql -p123456 update mysql.user set host = '192.168.23.%' where host = '::1'; flush privileges; 全部编译安装完毕之后,将php服务器上的index.php代码修改为 <?php $conn = mysql_connect('192.168.23.10','root','123456'); if ($conn) echo "ok"; else echo "false"; ?>

(五)xcache(php加速器)

前言:

xcache 只能编译安装,rpm包安装没有效果  在epel源中,程序包为php-xcache编译安装xcache的方法  yum install php-devel -y下载xcache到/usr/local目录下,解压cd xcache-3.2.0phpize./configure --enable-xcache --with-php-config=/usr/bin/php-configmake && make installcp xcache.ini /etc/php.d/重启php-fpm 先通过php测试页面看看是否php-xcache作为扩展编译到了php程序,如果显示编译进去了,那么就通过ab工具测试,测试效果为原来的3倍多

(六)MySQL 编译安装

MySQL也可以编译安装哦
https://downloads.mariadb.org/

CentOS 7编译安装MariaDB  1:先定义语言环境  localectl list-locales 列出当前可以使用的语言环境localectl set-locale LANG=en_US.UTF-8 定义语言环境退出,重新登入一次 2:准备开发环境  yum groupinstall 'development tools' 'Server Platform Development'yum install -y ncurses-devel openssl-devel libevent-devel jemalloc-devel cmake 3:下载mariadb的源码包,解压之后 # 编译 cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mariadb-5.5.44 -DMYSQL_DATADIR=/data/mysql -DSYSCONFDIR=/etc -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DWITH_SSL=system -DWITH_ZLIB=system -DWITH_LIBWRAP=0 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci # 安装 make -j 4 && make install # 创建连接文件 ln -sv /usr/local/mariadb-5.5.44 /usr/local/mysql 4:创建unit file 文件 /usr/lib/systemd/system/mariadb.service # Don't forget to reload systemd daemon after you change unit configuration: # root> systemctl --system daemon-reload [Unit] Description=MariaDB database server After=syslog.target After=network.target [Service] Type=simple User=mysql Group=mysql # 下面这一项是指明启动mariadb服务之前的配置阶段(不知道是干什么的) # ExecStartPre=/usr/libexec/mariadb-prepare-db-dir %n # Note: we set --basedir to prevent probes that might trigger SELinux alarms, # per bug #547485 # 下面这一项是指明启动mariadb的程序路径,且指明安装路径,因此需要将RPM包的默认安装路径修改为源码包的指定安装路径 # 需要注意的是这里的/usr/local/mysql是连接文件的连接,因此编译安装mariadb之后需要把安装路径连接至/usr/local/mysql # ExecStart=/usr/bin/mysqld_safe --basedir=/usr ExecStart=/usr/local/mysql/bin/mysqld_safe --basedir=/usr/local/mysql # 下面这一项是指明启动mariadb服务之后的配置阶段(不知道是干什么的) #ExecStartPost=/usr/libexec/mariadb-wait-ready $MAINPID # Give a reasonable amount of time for the server to start up/shut down # 指定mariadb启动的超时时长 TimeoutSec=300 # Place temp files in a secure directory, not /tmp # 下面这项是说,是否启用公共的临时目录,由于编译的时候定义sock文件保存的位置在/tmp目录下面,因此,我们需要将true改为false # 因为RPM包安装的Mariadb的sock文件默认保存在/var/lib/mysql/mysql.sock,数据库保存在/var/lib/mysql目录下,因此这里需要改为false PrivateTmp=false # 下面这一项表示当我们使用systemctl enable mariadb.service 的时候,就会在/etc/systemd/system/multi-user.target.wants/mariadb.service创建一个链接文件,实现开机自启动 [Install] WantedBy=multi-user.target 5:并且重新让系统读取unit file文件 systemctl daemon-reload 6:创建数据库文件目录,并且修改其属主和属组,拷贝配置文件到/etc/my.cnf, 在配置文件中添加datadir = /data/mysql ,初始化数据库文件目录 mkdir -pv /data/mysql chown -R mysql.mysql /data/mysql/ cp /usr/local/mysql/support-files/my-large.cnf /etc/my.cnf 编辑 /etc/my.cnf 文件,加入 datadir = /data/mysql skip_name_resolve = ON innodb_file_per_table = ON cd /usr/local/mysql chown -R root.mysql ./* scripts/mysql_install_db --user=mysql --datadir=/data/mysql systemctl start mariadb.service

(七)主键、唯一键、外键 以及 一对一查询,一对多查询(非常重要)

前言:

1: 什么叫键 数据库中的键(key)又称为关键字,是关系模型中的一个重要概念,它是逻辑结构,不是数据库的物理部分。 2:唯一键 唯一键,即一个或者一组列,其中没有重复的记录。可以唯一标示一条记录。 3:主键 属于唯一键,是一个比较特殊的唯一键。区别在于主键不可为空。 4:外键 一张表外键的值一般来说是另一张表主键的值。因此,外键的存在使得表与表之间可以联系起来 1:如何创建主键、唯一键 第一种方式: reate table yhy (id int not null primary key ,name varchar(250) unique key, age int); 第二种方式:这里同时也给大家演示了如何将多个字段合并起来创建一个键 create table yhy (id int, name varchar(250), age int, primary key(id), unique key(name, age)); 2:如何创建外键(一定要搞懂)

先搞清楚几个概念,如果概念不搞清楚,请先不要动手 1)给一张表创建外键的时候,必须要保证外键的值已经存在了。也就是说,一张表如果拥有外键,通常将其称为从表,而外键引用的那种表通常称为主表。 2)那么,现在我们就搞清楚了什么是主表,什么是从表了。就像上图所示,person表叫做从表,part表叫做主表。因为person表中的part_id字段的值来自于part表中的nid字段的值。 3)从表面上来看,有foreign key的表就叫从表,有primary key的表就叫主表。 4)那么在创建表的时候,必须先创建主表,再创建从表 5)那么在删除表的时候,必须先删除从表,再删除主表 (1)创建主表和从表 create table part (nid int, caption varchar(250), primary key(nid)); create table person (nid int, name varchar(250), email varchar(250), extra varchar(250), part_id int, foreign key(part_id) references part (nid)); (2)删除主表和从表 drop table person; drop table part; 3:在搞懂了如何创建主表和从表之后,我们再来搞一搞如何创建多张主表,一张从表的模型(超级重要,一定要搞懂)

思路:先创建主表,再创建从表 create table woman (id int, name varchar(250), primary key(id)); create table man (id int, name varchar(250), primary key(id)); create table man_to_woman (nid int, man_id int, woman_id int, foreign key(man_id) references man (id), foreign key(woman_id) references woman (id)); 4:在搞懂如何创建主从表的基础上,现在我们试着开始给已经创建的表插入数据 思路:先给主表插入数据,再给从表插入数据, 1:如何给part表、person表插入数据 insert into part values (1, '运维开发'), (2, 'HTML5全栈'), (3, 'python全栈'), (4, 'IOS移动端开发'); insert into person values (1, 'nike', '', '', 2), (2, 'jason', '', '', 1), (3, 'robbie', '', '', 2), (1, 'marry', '', '', 3), (1, 'jack', '', '', 1); part表、person表内容如下

给woman表、man表、man_to_woman表插入数据,数据内容如下

insert into man values (1, '白子画'), (2, '檀梵'), (3, '太子'); insert into woman values (1, '花千骨'), (2, '紫熏'), (3, '秋水'); insert into man_to_woman values (1, 1, 1),(2, 2, 2),(3, 3, 1),(4, 3, 3),(5,1,2); 效果展示

5:连表查询 一对一连接查询:找到部门为HTML5全栈的所有人的姓名 select person.name, part.caption from person left join part on person.part_id=part.nid where part.caption='HTML5全栈'; 一对多连接查询:找到与太子有关系的所有的女人 select woman.name from man_to_woman left join man on man.id=man_to_woman.man_id left join woman on woman.id=man_to_woman.woman_id where man.name='太子';

(八)实战作业

前言: 以后这种实战作业会经常有,请务必认真对待

实战作业1 准备四台服务器,一台服务器作为脚本分发服务器,其余的三台分别是httpd,php,Mariadb,请写一个脚本,在脚本分发服务器上一键执行这个脚本,等待你的qq邮箱接受一个主题为"LAMP部署完毕"的邮件。此时,你在“全球开发者必备的浏览器”上,输入你的httpd服务器的IP,浏览器上即可显示WordPress程序的安装界面 硬性要求: 脚本里面请大量使用函数,将冗余代码进行封装 温馨提示: 所有的php测试代码可以先写好 实战作业2 1:结合LAMP架构心得,请写出大概400800字的http请求原理,越详细越好 2:写好了之后,打字不过关的同志,每天中午把自己写的http请求原理作为打字练习,每天打半个小时。 温馨提示:可以将DNS的解析原理和LAMP的请求原理作为一次http请求的原理
转载请注明原文地址: https://www.6miu.com/read-10926.html

最新回复(0)