第四节 多表查询
一、多表查询
1.1复制表
作用?备份表和快速建表
命令格式?create table库.表sql查询命令;
例子?
>create table db3.user2 select*from db3.usertab;
>create table db3.user3 select username,uid,shell from db3.usertab limit 5;
>create database db4;
>create table db4.t1 select*from db3.usertab where 1=2;
>create table db4.t2 select id,username,uid,homedir
from db3.usertab where 1=2;
1.2 where嵌套查询
>select username,uid from db3.usertab where uid<(select avg(uid)
from db3.usertab);
>mysql>select username,uid from db3.usertab where uid>
(select avg(uid)from
db3.usertab);
>select username from db3.usertab
where username in
(select user from mysql.user where host="localhost");
1.3多表查询
mysql>create table db4.t3;
->select username,uid,shell,homedir from db3.usertab limit 3;
mysql>create table db4.t4
->select username,uid,gid from db3.usertab limit 5;
3*5=15
1.4 select*from t3,t4;迪卡尔集
mysql>select t3.username,t4.username from t3,t4
->where
->t3.username=t4.username;
mysql>select t3.*,t4.username from t3,t4 where t3.username
=t4.username;
>select*from t3,t4 where t3.uid=t4.uid;
>select t3.*,t4.gid from t3,t4 where t3.uid=t4.uid;
>select t3.username,t4.username from t3,t4 where t3.uid=t4.uid;
>select t3.username,t4.username from t3,t4 where t3.uid=t4.uid
and t3.username is not null
and t4.username is not null;
1.4连接查询
mysql>create table db4.t5
>select username,uid,gid,shell from db3.usertab
where uid>=100 and uid<=500;
mysql>create table db4.t6
>select username,uid,gid,shell from db3.usertab
where uid>=100 and uid<=500 limit 3;
>select * from t6 right join t5 on t6.uid=t5.uid;
>select * from t6 left join t5 on t6.uid=t5.uid;
>select t5.username,t6.username from t6 right join t5 on t6.uid=t5.uid;
>select t5.username,t6.username from t6 left join t5 on t6.uid=t5.uid;
2.2在数据库服务器上安装图形管理工具phpmyadmin
准备软件的运行环境lamp/lnmp
]#rpm-q httpd php php-mysql
]#yum-y install httpd php php-mysql
]#systemctl status httpd
]#systemctl restart httpd
]#systemctl enable httpd测试运行环境
]#vim /var/www/html/test.php
<?php
$x=mysql_connect("localhost","root","123456");
if($x){echo"ok";}else{echo"no";};
?>
]#yum -y install elinks
]#elinks --dump http://localhost/test.php
ok
安装图形数据库
2.3安装软件phpMyAdmin-2.11.11-all-languages.tar.gz
]#tar -zxf phpMyAdmin-2.11.11-all-languages.tar.gz-C/var/www/html/
]#cd /var/www/html/
]#mv phpMyAdmin-2.11.11-all-languages phpmyadmin
2.4 修改软件的配置文件定义管理的数据库服务器
]#cd phpmyadmin
]#cp config.sample.inc.php config.inc.php
]#vim config.inc.php
17$cfg['blowfish_secret']='plj123';
31$cfg['Servers'][$i]['host']='localhost';
在客户端访问软件管理数据库服务器
打开浏览器输入url地址访问软件
http://192.168.4.51/phpmyadmin
用户名root
密码123456
一、用户授权与权限撤销
3.0 管理员密码管理(root密码)
恢复数据库管理员本机登录密码
]#systemctl stop mysqld
]#vim /etc/my.cnf
[mysqld]
skip-grant-tables
#validate_password_policy=0
#validate_password_length=6
:wq
]#systemctl start mysqld
]#mysql
mysql>select host,user,authentication_string from mysql.user;
mysql>update mysql.user
set authentication_string=password("123456")
where
host="localhost"and user="root";
mysql>flush privileges;
mysql>quit
]#vim/etc/my.cnf
[mysqld]
#skip-grant-tables
validate_password_policy=0
validate_password_length=6
:wq
]#systemctl restart mysqld
]#mysql -uroot -p123456
mysql>
操作系统管理员修改数据库管理员root本机登录的密码
[root@mysql51~]#mysqladmin -hlocalhost -uroot -p password"654321"
Enter password:当前登录密码
3.1 什么是用户授权:在数据库服务器上添加连接用户,添加时可以设置用户的访问权限和连接的密码。默认只允许数据库管理员root用户在本机登录。默认只有数据库管理员root用户在本机登录才有
授权权限。
3.2 用户授权命令的语法格式
mysql>grant权限列表on数库名to用户名@"客户端地址"
identified by"密码"[with grant option];
例子1:允许客户端254主机可以使用root连接,连接密码是123456,连接后的访问权限是多所有库
所有表有完全访问权限,且有授权权限。
192.168.4.51mysql>
grant all on*.* to root@"192.168.4.254" //db3.*db3库有所有权限
->identified by"123456"
->with grant option;
3.3 在客户端使用授权用户连接数据库服务器
]#ping -c 2 192.168.4.51
]#which mysql
]#yum -y install mariadb
]#mysql-h数据库服务器ip地址-u用户名-p密码
192.168.4.254]#mysql -h192.168.4.51 -uroot -p123456
mysql>
>grant select,update(name) on studb.t8 to yaya3@"%" identified by "123456";
>grant select,insert,update on studb.dogperson to yaya@"localhost" identified by "123456";
>grant all on studb.* to admin@"%" identified by "123456";
3.4 数据库服务器使用授权库存储授权信息
mysql库授权库存储授权信息
user存储授权用户的名及访问权限
db存储授权用户对库的访问权限
tables_priv储授权用户对表的访问权限
columns_priv存储授权用户对字段的访问权限
information_schema虚拟库不占用物理存储空间数据存储在物理内存里
存储已有库和表的信息
² 工作中如何授权:
给管理者授权给完全权限且有授权权限
给使用者授权只给select和insert权限
3.5 撤销用户权限命令的语法格式
mysql>revoke权限列表on数库名from用户名@"客户端地址";
例子1:撤销254主机使用root用户连接时,授权权限。
mysql>revoke grant option on*.*from'root'@'192.168.4.254';
例子2:通过修改表记录的方式撤销用户的访问权限
mysql>update mysql.user
set Select_priv="N"
where user='root'and host='192.168.4.254';
mysql>flush privileges;
例子3:撤销254主机使用root用户连接时所有权限
mysql>revoke all on *.* from 'root'@'192.168.4.254';
例子4:删除授权用户'root'@'192.168.4.254';
drop user 'root'@'192.168.4.254';
3.5工作中如何授权
管理者给完全权限且有授权权限
使用者只给对存储数据的库有select
在主机50上运行mysql数据库服务
装包(软件包来源封包类型开源商业跨平台)
修改配置文件
启动服务systemctl start mysqld
查看服务信息netstat -utnlp | grep :3306
使用初始密码访问服务(命令行图形访问web页面程序访问)
#grep password /var/log/mysqld.log
#mysql -hlocalhost -uroot -p'3E(saw/YTfYr'
二、重置本机登录密码
mysql>set global validate_password_policy=0;
mysql>set global validate_password_length=6;
mysql>alter user root@"localhost" identified by "123456";
mysql>quit
#mysql -hlocalhost -uroot-p123456
mysql>show databases;
三、配置密码设置永久生效
#vim/etc/my.cnf
[mysqld]
validate_password_policy=0
validate_password_length=6
:wq
#systemctl stop mysqld
#systemctl start mysqld
四、相关概念
库文件夹
表文件
记录行
字段列
gamedb.usertab name password time
yaya 123456 2018-05-23 11:29:58
使用SQL命令操作数据库服务器上的数据
结构化查询语言
SQL命令的类型?
SQL命令语法规则?
********************************************************************
五、客户端把数据存储到数据库服务器上的过程?
Mysql>create database studb;
use studb;
>create table stuinfo(name char(15),address char(30));
>desc stuinfo;
>insert into stuinfo values("zhangshu","beijing");
>insert into stuinfo values("wangwu","beijing"),("lisi","hebei");
>select*from stuinfo;
>select name from stuinfo;
>update stuinfo set address="shanghai";
>select * from stuinfo;
>delete from stuinfo;
>select * from stuinfo;
>show tables;
>drop table stuinfo;
>select database();
>show databases;
>drop database studb;
>show databases;
六,添加中文
create table表名(字段名列表)DEFAULT CHARSET=UTF8;
alter table学生表DEFAULT CHARSET=UTF8;
整数位.小数位总位数
217.99 5
xxx.xx
999.99
0.00
-999.99
pay double(7,2)
999.00
mysql>create table学生表7(
姓名char(10),
地址varchar(30)
)DEFAULT CHARSET=utf8;
insert into学生表7 values("张三丰","武当山");
insert into学生表7 values("bob","abc");
*************************************************************************
1)使用时间函数给日期时间类型赋值?
insert into t14 values
("tom",23,date(now()),083000,year(19901220),now());
select now();
select year(20181231);
select month(now());
select date(now());
select day(now());
select time(now());
日期时间类型:
year年YYYY 2018
date日期YYYYMMDD 20180524
time时间HHMMSS 090518
日期时间YYYYMMDDHHMMSS
datetime
timestamp
2)使用2位数字给year类型自动赋值?
日期时间类型datetime和timestamp区别?
约束条件的作用:限制如何给字段赋值
Mysql>create table t1(
name char(3)约束条件,
);
mysql>create table t23(
name char(15)not null default"",
age tinyint(2)unsigned default 16,
class char(7)default"nsd1802",
sex enum("b","g")
);
>insert into t23(name,sex)values("bob","g");
>select*from t23;
>insert into t23(name,sex)values(null,"g");报错
3)修改表结构命令格式?
alter table dogperson rename qrinfo;
Alter table qrinfo add email varchar(30);
alter table qrinfo add ipone char(11)after class;
alter table qrinfo add qq varchar(11)first;
Alter table qrinfo
add likes set("eat","buy","game")default"eat",
add sex2 enum("boy","girl","no")default"no" after name;
mysql>alter table qrinfo
->drop class,
->drop sex;
mysql>alter table qrinfo
change
sex2 sex enum('boy','girl','no')default"no";
mysql>alter table qrinfo modify qq char(20);
desc qrinfo;
mysql>alter table qrinfo
modify
likes set('eat','buy','game',"book")default"eat,game";
mysql>desc qrinfo;
4)mysql键值
普通索引index(使用规则查看创建删除)
主键*
外键(难点)*
唯一索引
全文索引
写insert update delete
mysql>create index bbb on qrinfo(sex);
mysql>create index aaa on qrinfo(name);
>desc qrinfo;
>show index from qrinfoG;
>drop index bbb on qrinfo;
>show index from qrinfoG;
>insert into qrinfo(name)values("lucy");
>insert into qrinfo(name)values("lucy");
Mysql>create table t26(
name char(10),
age int(2),
address varchar(30),
email char(50),
index(name),
index(address)
);
>select*from t26 where name="zhangsan";
++++++++++++++++++++++++++++++++++++++
第四节课总结
******************************************
内容:
1)快速通过建表:
create table学生表12 select*from学生表1;
create table学生表11 select*from学生表1 where 1=2;
create table学生表13 select地址from学生表1;
create table学生表14 select地址,姓名from学生表1;
create table学生表15 select地址,姓名from学生表1 limit 2;
2)多表查询:(会显示三个轮回)
•多表查询(又称连接查询)
–将2个或2个以上的表按某个条件连接起来,从中选
取需要的数据
–当多个表中存在相同意义的字段(字段名可以不同)
时,可以通过该字段连接多个表
mysql>select * from学生表11,学生表2;
mysql>select学生表11.*,学生表2.姓名 from学生表11,学生表2;
mysql>select学生表11.姓名,学生表2.姓名 from学生表11,学生表2;
mysql>select学生表11.姓名,学生表2.姓名 from学生表11,学生表2 where学生表11.uit=学生表2.uit and学生表11.姓名=学生表2.姓名;
3)近道查询:
使用where子查询
–把内层查询结果作为外层查询的查询条件
select avg(uit) from学生表2;
select avg(uit) from学生表2 where uit>(select avg(uit)from学生表2);
select姓名from学生表2 where姓名in(select姓名from学生表11 where uit=256);
4)显示左连接右连接
mysql>select * from学生表11 left join学生表2 on学生表11.uit=学生表2.uit;
mysql>select * from学生表11 right join学生表2 on学生表11.uit=学生表2.uit;
****************************
图形工具 初始化数据库
*****************************
PhpMyAdmin(续1)
#yum -y install httpd php php-mysql
#tar -zxf phpMyAdmin-2.11.11-all-languages.tar.gz -C /var/www/html/
#cd /var/www/html/
#mv phpMyAdmin-2.11.11-all-languages /phpmyadmin
#chown -R apache:apache phpmyadmin/
#cp phpmyadmin/config.sample.inc.php phpmyadmin/config.inc.php
#sed -n '17p;31p' /var/www/html/phpmyadmin/config.inc.php
$cfg['blowfish_secret']='plj123';
$cfg['Servers'][$i]['host']='localhost';
mysql>create database bbsdb;
mysql>grant all on bbsdb.*to admin@”localhost” identified by“123456”;
]#systemctl start httpd;
]#firefox http://localhost/phpmyadmin