mysql> select `字段1`,`字段2`,`更多字段` from `数据库名`.`数据表名` [ where 条件] [LIMIT n] [OFFSET M] ;
Mysql用户管理
Ubuntu 重置MySQL Root密码
在Linux环境下mysql的root密码忘记解决方法
mysql命令flush privileges
MySQL命令行创建用户与授权
MySQL用户管理:添加用户、授权、删除用户
Oracle中5个核心Sql语句的基本构造:Select、Insert、Update、Delete和Merge
MySQL用户管理
mysql数据表说明
Mysql的每个用户存储在mysql
数据库中的user
数据表中,也就是我们可以从这里快速更改用户名和权限,host,用户密码是以passwd()
加密之后的所以不能直接更改
因此对用户的管理,基本上就是对数据库mysql
的修改
以下内容引用自MySQL用户管理
MySQL授权系统主要通过五个表(user、db、host、tables_priv
和columns_priv
)来实现,其中用于访问数据库的各种用户信息都保存在mysql库
的user表
中。账户权限信息被存储在mysql数据库
的user、db、host、tables_priv、columns_priv
和procs_priv
表中。
user表存储用户的全局权限,如登陆地址,用户名,全局不同权限,密码
等数据分别对应Hosts,User,权限.priv,authentication_string
等字段
db表存储用户对某数据库的权限,如登陆地址,数据库名,用户名,各个权限
等数据分别对应Hosts,Db,User,权限.priv
。包含在db表中的权限适用于这个表标识的数据库。
host表——当您想在db表的范围之内扩展一个条目时,就会用到这个表。举例来说,如果某个db允许通过多个主机访问的话,那么超级用户就可以让db表内将host列为空,然后用必要的主机名填充host表。
tables_priv表——该表与db表相似,不同之处是它存储用户对某表的权限。
columns_priv——该表作用几乎与db和tables_priv表一样,存储的是针对某些表特定列的权限。
权限表的存取过程是:
1) 先从user表中的host、 user、 password
这3个字段中判断连接的IP、用户名、密码是否存在表中,存在则通过身份验证;
2) 通过权限验证,进行权限分配时,按照user、db、tables_priv、columns_priv
的顺序进行分配。即先检查全局权限表 user
,如果user
中对应的权限为Y
,则此用户对所有数据库的权限都为Y
,将不再检查db,tables_priv,columns_priv
;如果为N
,则到db
表中检查此用户对应的具体数据库,并得到db
中为Y
的权限;如果db
中为N
,则检 查tables_priv
中此数据库对应的具体表,取得表中的权限Y
,以此类推。
mysql> create user 用户名@'host地址' identified by '密码';
此时可以通过phpMyAdmin或者mysql> select Host,User from mysql.user;
可查看到以添加的用户
@'host地址'
缺省为@'%'
所有地址,localhost
代表本地地址即127.0.0.1
,具体每个数据库.数据表
的权限由以下决定
给用户权限
mysql> grant 权限 on 数据库.数据表 to 用户名@'host地址' identified by '密码';
mysql> flush privileges
flush privileges
刷新MySQL的系统权限相关表
权限(不分大小写)
SELECT 提取/查看
INSERT 插入
UPDATE 更新/改变
ALL 表示所有权限
数据库/数据表不存在会报错,可以数据库.*
表示整个数据库
用户地址密码
如果不存在该用户,则自动创建用户
@'host地址'
缺省为@'%'
所有地址
一个用户支持不同的访问地址(一个host地址只有一个密码,如果已存在密码不用输入,输入则覆盖),每执行一次命令就在mysql.user
内添加相应Hsot,User,各种权限priv,密码`等字段
例:添加库.表
的权限
添加netstu1.jia_netq
表select
权限为已有用户chen
,地址为%
,密码为chen
默认密码
mysql> grant select on netstu1.jia_netq to chen;
可用phpMyAdmin在mysql.tables_priv
里查看,或命令查看,(以后统一命令查看,不再提及phpMyAdmin,两种方法通用)
mysql> select Host,Db,User,Table_name from mysql.tables_priv where User = 'chen';
例:添加库
的权限
添加netstu1.jia_netq
库权限为已有用户chen
,地址为%
,密码为chen
默认密码
mysql> grant select on netstu1.* to chen;
查看mysql.db
表中
mysql> select Host,Db,User from mysql.db where User = 'chen';
例:添加全局权限
添加所有数据库的select
权限为已有用户chen
,地址为%
,密码为chen
默认密码
mysql> grant select on *.* to chen;
查看mysql.user
表中
mysql> select Host,User,Select_priv from mysql.user where User = 'chen';
创建root级别账户(全局权限+授权权限)
mysql> grant all on *.* to 用户名@'localhost' identified by '密码';
之后发现,创建的用户除了给其他用户授权外有所有的权限
mysql> update `mysql`.`user` set `Grant_priv`='Y' where `mysql`.`user`.`Host`='localhost' AND `mysql`.`user`.`User`='用户名';
flush privileges;
取消/修改权限
可参考修改字段,修改/删除mysql.相关数据表
中的值
修改用户密码
就是更新mysql.user
,修改命令参考下面的修改字段,具体命令
#使用PASSWD()函数生成密码的密文并更新到mysql数据库的密码字段
#MySQL 5.7 以前版本密码字段为Password
mysql> update mysql.user set password = password('密码') where user = '用户名' and host = 'host地址';
#MySQL 5.7 以后版本(Password字段改为了authentication_string)
mysql> update mysql.user set authentication_string=PASSWORD('密码') where user='用户名' and host = 'host地址';
mysql> flush privileges;
drop user zhangsan@'host地址';
drop user命令会删除用户以及对应的权限,执行命令后你会发现mysql.user
表和mysql.db
等表的相应记录都消失了。
mysql 找回root密码
ubuntu 16.04 Mysql 5.7.19
1.首先确认服务器出于安全的状态
也就是没有人能够任意地连接MySQL数据库。 因为在重新设置MySQL的root密码的期间,MySQL数据库完全出于没有密码保护的 状态下,其他的用户也可以任意地登录和修改MySQL的信息。
2.修改mysql登陆设置
修改配置文件,我服务器(ubuntu16.04 Mysql 5.7.19)文件在/etc/mysql/mysql.conf.d/mysqld.cnf
,其他教程都说在/etc/mysql/my.cnf
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
在[mysqld]
下面添加skip-grant-tables
使得:任何的帐号用任何的密码(当然也包括空)都可以登录到mysql数据库
3.重新启动mysqld
sudo /etc/init.d/mysql restart
4. 登陆并修改Mysql root 密码
就是替换mysql.user
中root用户对应的密码字段
按照登陆,修改用户密码修改root密码
mysql -u root
#使用mysql数据表
mysql> use mysql;
#使用PASSWD()函数生成密码的密文并更新到mysql数据库的密码字段
#MySQL 5.7 以前版本密码字段为Password
mysql> update user set Password=PASSWORD('new_password') where user='root';
#MySQL 5.7 以后版本(Password字段改为了authentication_string)
mysql> update user set authentication_string=PASSWORD('new_password') where user='root';
刷新MySQL的系统权限相关表
mysql> flush privileges;
mysql> exit;
5. 修改/etc/mysql/mysql.conf.d/mysqld.cnf
文件为默认内容,重启Mysql
sudo /etc/init.d/mysql restart
1.新建用户时遇到密码不合适
参考解决 MySQL 5.7 中 Your password does not satisfy the current policy requirements. 问题
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
将安全级别降低
set global validate_password_policy=0;
还可以设置长度
set global validate_password_length=4;
数据库管理
MySQL 教程
MySQL 创建数据库
重命名mysql数据库的五个方法
创建数据库
mysql视图中创建
mysql> create database 数据库名;
mysqladmin创建
$mysqladmin -u root -p create 数据库名
Enter password:
php脚本创建
mysqli_query(connection,query,resultmode);
connectio 为建立的mysql连接
query 查询字符串(即mysql命令,创建为create database 数据库名
)
resultmode可选,默认为MYSQLI_STORE_RESULT,如果需要检索大量数据,使用MYSQLI_USE_RESULT
php脚本
$dbhost = 'localhost:3306'; // mysql服务器主机地址
$dbuser = 'root'; // mysql用户名
$dbpass = '123456'; // mysql用户名密码
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
die('连接错误: ' . mysqli_error($conn));
echo '连接成功<br />';
$sql = 'CREATE DATABASE 数据库名';
$retval = mysqli_query($conn,$sql );
if(! $retval )
die('创建数据库失败: ' . mysqli_error($conn));
echo "数据库 数据库名 创建成功\n";
mysqli_close($conn);
删除数据库
mysql命令行中删除
mysql> drop database 数据库名;
mysqladmin删除
$mysqladmin -u root -p drop 数据库名
Enter password:
php脚本删除
mysqli_query(connection,query,resultmode);
connectio 为建立的mysql连接
query 查询字符串(即mysql命令,删除为drop database 数据库名
)
resultmode可选,默认为MYSQLI_STORE_RESULT,如果需要检索大量数据,使用MYSQLI_USE_RESULT
php脚本
$dbhost = 'localhost:3306'; // mysql服务器主机地址
$dbuser = 'root'; // mysql用户名
$dbpass = '123456'; // mysql用户名密码
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
die('连接错误: ' . mysqli_error($conn));
echo '连接成功<br />';
$sql = 'DROP DATABASE 数据库名';
$retval = mysqli_query($conn,$sql );
if(! $retval )
die('删除数据库失败: ' . mysqli_error($conn));
echo "数据库 数据库名 删除成功\n";
mysqli_close($conn);
选择数据库
mysql命令
mysql> use 数据库名;
php脚本
mysqli_select_db(connection,dbname);
connectio 为建立的mysql连接
dbname 为数据库名
$dbhost = 'localhost:3306'; // mysql服务器主机地址
$dbuser = 'root'; // mysql用户名
$dbpass = '123456'; // mysql用户名密码
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
die('连接失败: ' . mysqli_error($conn));
echo '连接成功';
mysqli_select_db($conn, '数据库名' );
mysqli_close($conn);
数据表管理
复习数据库的结构
创建数据表时,要指明数据表中的各个字段,和不同字段的相关属性
创建数据表
mysql视图
mysql> use 数据库名 ;
Database changed
mysql> create table 数据表名(字段1 字段1的相关属性,字段2 字段2的相关属性,字段3 字段3的相关属性,更多字段和属性);
mysql> create table 数据库名.数据表名(字段1 字段1的相关属性,字段2 字段2的相关属性,字段3 字段3的相关属性,更多字段和属性);
如果字段/数据库名/数据表名含有空格,使用重音符括起来即
create table `数据库名`.`数据表名`(`字段1` 字段1的相关属性,`字段2` 字段2的相关属性,`字段3` 字段3的相关属性,更多字段和属性);
推荐以重音符括起来数据库名和数据表名方式创建
以下所有涉及数据库名和数据表名的命令,都可以加重音符
mysql> use cndaqiangdb ;
Database changed
mysql> create table cn_table(字段1 INT);
mysql> create table MyClass(
> id int(4) not null primary key auto_increment,
> name char(20) not null,
> sex int(4) not null default '0',
> degree double(16,2));
php脚本,及下面内容的php脚本,先略
删除数据表
mysql> drop table 数据库名.数据表名;
mysql> use 数据库名;
mysql> drop table 数据表名;
修改数据表名
mysql> alter table `数据库名`.`数据表名` rename to `数据库名`.`数据表名`
alter table `数据库名`.`数据表名` add (`字段3` 属性,`字段4` 属性);
alter table `数据库名`.`数据表名` drop `字段名`;
alter table `数据库名`.`数据表名` change `旧段名` `新字段名` 修改属性;
记录/数据管理
mysql> insert into `数据库名`.`数据表名` (`字段1`,`字段2`,`字段3`,`更多字段`) value (值1,值2,值3,更多值);
如果数据是字符型,必须使用单引号或者双引号,如:”value”。
查询记录/数据
mysql> select `字段1`,`字段2`,`更多字段` from `数据库名`.`数据表名` [ where 条件] [LIMIT n] [OFFSET M] ;
字段1
,字段2
为显示的字段
[ where 条件]
可选,展示符合条件的字段,如where `字段1`=`值`
[LIMIT n]
和[OFFSET M]
配合使用,LIMIT
确定最多显示的记录数,OFFSET
决定从查询到的记录数偏移几个开始显示,默认0,不偏移,从第一个显示
mysql> select `字段1`,`字段2` from `cndaqiangdb`.`table1` where `字段1`=1 limit 2 offset 1;
+-------+-------+
| 字段1 | 字段2 |
+-------+-------+
| 1 | 2 |
| 1 | 2 |
+-------+-------+
2 rows in set (0.00 sec)
删除记录/数据
mysql> delete from `数据库名`.`数据表名` [where 条件];
[where 条件]如果不写,则删除数据表内的所有记录/数据
更新/修改记录
mysql> update `数据库名`.`数据表名` set `字段1`=值1,`字段2`=值2 [where 条件];
[where 条件]如果不写,则替换所有记录的相应字段
mysql> update `数据库名`.`数据表名` set `字段`=replace(`字段`,旧值,新值);
可以替换,数字,字符串等,替换字符串时,注意加引号
mysql> select `1`,`2`,`3`,`4` from `cndaqiangdb`.`table1`;
+-----+-----+-----+-----+
| 1 | 2 | 3 | 4 |
+-----+-----+-----+-----+
| 222 | 222 | 333 | 444 |
| 222 | 222 | 3 | 444 |
+-----+-----+-----+-----+
2 rows in set (0.00 sec)
mysql> update `cndaqiangdb`.`table1` set `1`=replace(`1`,2,222);
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2 Changed: 2 Warnings: 0
mysql> select `1`,`2`,`3`,`4` from `cndaqiangdb`.`table1`;
+-----------+-----+-----+-----+
| 1 | 2 | 3 | 4 |
+-----------+-----+-----+-----+
| 222222222 | 222 | 333 | 444 |
| 222222222 | 222 | 3 | 444 |
+-----------+-----+-----+-----+
2 rows in set (0.00 sec)
所有在mysql>
后面输入的命令,都可以在phpMyAdmin的SQL选项卡中输入
create
mysql> create user 用户名@'host地址' identifide by '密码';
创建数据库
mysql> create database `数据库名`;
创建数据表
mysql> create table `数据库名`.`数据表名` ( `字段1` 属性,`字段2` 属性);
删除数据库,数据表
mysql> drop database `数据库名`;
mysql> drop table `数据库名`.`数据表名`;