复制表源表的key键值不会被复制到新表(原表是teadb.user)
复制表:
mysql> create table db4.t1 select * from teadb.user;
复制表结构:
mysql> create table db4.t2 select * from teadb.user where 1=2;
多表查询,也称为连接查询
。将2或2个以上的表,按某个条件连接起来,从中选区需要的数据
。当多个表中存在相同意义的字段(字段名可以不同)时,可以通过改字段连接多个表;
方法:1
1.无条件
mysql> select t4.name,t5.name from t4,t5;
+--------+--------+
| name | name |
+--------+--------+
| root | root |
| bin | root |
| daemon | root |
| root | bin |
| bin | bin |
| daemon | bin |
| root | daemon |
| bin | daemon |
| daemon | daemon |
| root | adm |
| bin | adm |
| daemon | adm |
| root | lp |
| bin | lp |
| daemon | lp |
+--------+--------+
15 rows in set (0.00 sec)
方法:2
2.有条件
mysql> select t4.name,t5.name from t4,t5 where t4.name=t5.name and t4.uid=t5.uid;
+--------+--------+
| name | name |
+--------+--------+
| root | root |
| bin | bin |
| daemon | daemon |
+--------+--------+
mysql> select t4.shell,t5.* from t4,t5 where t4.name=t5.name and t4.uid=t5.uid;
+---------------+--------+------+---------+---------+
| shell | name | uid | comment | homedir |
+---------------+--------+------+---------+---------+
| /bin/bash | root | 1 | root | /root |
| /sbin/nologin | bin | 2 | bin | /bin |
| /sbin/nologin | daemon | 3 | daemon | /sbin |
+---------------+--------+------+---------+---------+
where子查询
同一个表 小于平均值的数据
mysql> update teadb.user set age=19 where id>=10; //先导入数据
mysql> select name ,age from teadb.user where age < (select avg(age) from teadb.user);
//函数不能直接比大小,需要先出结果
mysql> select name from teadb.user where name in (select name from teadb.user);
连接查询
两个有重复的和不重复数据的表,查找
方法3:左连接
select 字段名列表 from 表a lift join 表b on 条件表达式;
mysql> select * from t6 left join t7 on t6.uid=t7.uid;
+--------+------+---------------+--------+------+---------------+
| name | uid | shell | name | uid | shell |
+--------+------+---------------+--------+------+---------------+
| root | 1 | /bin/bash | root | 1 | /bin/bash |
| bin | 2 | /sbin/nologin | bin | 2 | /sbin/nologin |
| daemon | 3 | /sbin/nologin | daemon | 3 | /sbin/nologin |
| adm | 4 | /sbin/nologin | adm | 4 | /sbin/nologin |
+--------+------+---------------+--------+------+---------------+
//左表是t6,右表是t7,条件成立时以左表为查询结果
方法4:右连接
select 字段名列表 from 表a right join 表b on 条件表达式;
mysql> select t6.name,t6.uid,t7.name,t7.uid from t6 right join t7 on t7.uid = t6.uid;
+--------+------+--------+------+
| name | uid | name | uid |
+--------+------+--------+------+
| root | 1 | root | 1 |
| bin | 2 | bin | 2 |
| daemon | 3 | daemon | 3 |
| adm | 4 | adm | 4 |
| NULL | NULL | lp | 5 |
| NULL | NULL | sync | 6 |
+--------+------+--------+------+
//以t7表为准为右表,把重复的和不重复的都查询出来(没有自动填null)
//以哪个表为准就显示主表的行数
//嵌套查询耗资源,cup需要处理
程序员用的普通帐号,管理员用管理员帐户
软件装在数据库服务器上,客户端通过网页显示出来
50服务端 和 客户端
[root@client ~]# yum -y install php php-mysql httpd
[root@client ~]# systemctl restart httpd
[root@client ~]# systemctl enable httpd
[root@client ~]# tar -xf /phpMyAdmin-2.11.11-all-languages.tar.gz -C /var/www/html/
[root@client ~]# cd /var/www/html/
[root@client html]# ls
phpMyAdmin-2.11.11-all-languages
[root@client html]# mv phpMyAdmin-2.11.11-all-languages/ phpmyadmin //再改名
[root@client html]# chown -R apache:apache phpmyadmin/
[root@client html]# cd phpmyadmin/
[root@client phpmyadmin]# cp config.sample.inc.php config.inc.php
[root@client phpmyadmin]# vim config.inc.php
17行 $cfg['blowfish_secret'] = 'han'; //‘’里面一定要加内容
41行 $cfg['Servers'][$i]['host'] = 'localhost'; //‘’写客户端的ip地址
本机再访问
[root@client ~]# firefox 192.168.4.50/phpmyadmin
用户权限和撤销
linux操作系统管理员才能改mysql密码
[root@client ~]# mysqladmin -uroot -p password "654321" //新密码
Enter password: //输入原来旧密码
忘记mysql管理员密码,恢复(需要linux操作系统root用户)
vim /etc/my.cnf
[mysqld]
secure_file_priv=/mydir //默认文件夹
default-storage_engine=myisam //默认
#validate_password_policy=0 //注释
#validate_password_length=6 //注释
skip-grant-tables //跳过密码授权 //改过密码后注释掉,恢复上面的两个
[root@client ~]# systemctl restart mysqld
[root@client ~]# mysql
mysql> select host,user,authentication_string from mysql.user;
+---------------------+----------------------+-------------------------------------------------------------------------------------+
| host | user | authentication_string |
+---------------------+---------------------+--------------------------------------------------------------------------------------+
| localhost | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| localhost | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
+---------------------+---------------------+--------------------------------------------------------------------------------------+
mysql> update mysql.user set authentication_string=password("123456")where host="localhost" and user="root";
mysql> flush privileges; //刷新配置,使密码生效
再修改my.cnf文件(看上注释),重启mysqld
验证
[root@client ~]# mysql -uroot -p123456
客户端自己做连接工具,要装包
本机其他用户连接,其他客户端访问服务端都需要服务端授权
文件存储位置:授权库(存储在库mysql里面)
授权库mysql,主要的几个表
user:存储授权用户的访问权限 //用户
db:存储授权用户对表的访问权限 //库
tables_priv:存储授权用户对表的访问权限 //表
columns_priv:存储授权用户对字段的访问权限 //字段
grant配置授权
基本用法:
grant 权限列表 on 库名.表名 to 用户名@'客户端地址' identified by '密码' [whit grant option];
允许改用户为其他用户授权。
mysql> grant all on *.* to mydba@"%" identified by "123456" with grant option;
//新建用户mydba 。对所有库、表有完全权限,允许从任何地址访问,密码设置为“123456”,允许改用户为其他用户授权
查看权限(查看表记录方式)
。mysql> select * from mysql.user where user="mydba"\G;
。mysql> select host,user from mysql.user;
+-----------+-----------+
| host | user |
+-----------+-----------+
| % | mydba |
| localhost | mysql.sys |
| localhost | root |
+-----------+-----------+
。mysql> show grants for mydba@"%"; //命令的方式查看权限
+---------------------------------------------------------------------------------------------------------------------------+
| Grants for mydba@% |
+---------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'mydba'@'%' WITH GRANT OPTION |
+---------------------------------------------------------------------------------------------------------------------------+
验证:[root@room9pc01 ~]# mysql -h192.168.4.50 -umydba -p123456
MySQL [(none)]> select user(); //查询当前登陆的用户名
+-----------------------------------------+
| user() |
+-----------------------------------------+
+-----------------------------------------+
MySQL [(none)]> select @@hostname; //查看主机名
+-----------------------+
| @@hostname |
+-----------------------+
| client |
+-----------------------+
MySQL [(none)]> show grants; //查看自己权限
+---------------------------------------------------------------------------------------------------------------------------+
| Grants for mydba@% |
+---------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'mydba'@'%' WITH GRANT OPTION |
+---------------------------------------------------------------------------------------------------------------------------+
MySQL [(none)]> set password=password("123abc");
在客户端给自己修改密码
[root@room9pc01 ~]# mysql -h192.168.4.50 -umydba -p123abc
数据库管理员修改授权用户的连接密码
mysql> set password for mydba@"%"=password("123456"); //数据库服务端root管理员修改密码
测试mydba用户授权权限:创建新表 对表记录的增珊改查权限 ,和授权权限(可以创建用户)
客户端:mydba用户创建,
MySQL [(none)]> grant all on gamedb.* to test1@"localhost" identified by "123465";
//只能在服务端的本机用test1用户登陆,只有gamedb库下的表有权限
mysql> show grants for test1@"localhost"; //查看用户的权限策略
+---------------------------------------------------------------------------------------------------------------------+
| Grants for test1@localhost |
+---------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'test1'@'localhost' |
| GRANT ALL PRIVILEGES ON `gamedb`.* TO 'test1'@'localhost' |
+---------------------------------------------------------------------------------------------------------------------+
mysql> show databases;
+---------------------------------------+
| Database |
+---------------------------------------+
| information_schema | //默认的假库,此用户没有权限看其他的库
+---------------------------------------+
撤销mydba的授权权限
root操作
mysql> show grants for mydba@"%";
+---------------------------------------------------------------------------------------------------------------------------+
| Grants for mydba@% |
+---------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'mydba'@'%' WITH GRANT OPTION |
+---------------------------------------------------------------------------------------------------------------------------+
mysql> revoke grant option on *.* from mydba@"%"; //撤销授权
mysql> show grants for mydba@"%";
+---------------------------------------------------------------------------------------+
| Grants for mydba@% |
+---------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'mydba'@'%' |
+---------------------------------------------------------------------------------------+
mysql> revoke delete,drop on *.* from mydba@"%"; //撤销对所有库的删除权限
mysql> revoke all on *.* from mydba@"%"; //撤销所有权限
mysql> show grants for mydba@"%"\G;
*************************** 1. row ***************************
Grants for mydba@%: GRANT USAGE ON *.* TO 'mydba'@'%'
mysql> select * from mysql.db where user="test1"\G;
mysql> drop user mydba@"%"; //删除用户
Query OK, 0 rows affected (0.01 sec)
mysql> select name,host from mysql.user;
ERROR 1054 (42S22): Unknown column 'name' in 'field list'
mysql> select user,host from mysql.user;
+---------------------+---------------------+
| user | host |
+---------------------+---------------------+
| mysql.sys | localhost |
| root | localhost |
| test1 | localhost |
+---------------------+---------------------+
案例: ///授权用户只能创建小于、等于自身用户的权限的帐户,还要保证数据能写入mysql库中
mysql> grant all on db3.* to admin@"%" identified by "123456" with grant option; //创建用户需要把信息登入mysql.* 中,所以要给mysql库的写权限
mysql> grant insert on mysql.* to admin@"%"; //root允许admin用户可以在mysql库的所有表中写入
再进客户端用普通用户admin登入,方可创建用户
MySQL [db3]> grant all on db3.* to admin2@"%" identified by "123456";
撤销权限时,库名的表示方式要和授权时一样。
忘记加授权可以继续加:
mysql> grant all on db3.* to admin@"%" identified my "123456";
mysql> grant all on db3.* to admin@"%" identified by "123456" with grant option;
//加授权