MySQL数据库的增删改查与用户授权

286 阅读6分钟

一、数据库的基本概念

1、数据(Data)

  • 描述事物的的符号记录
  • 包括数字、文字、图形、图像、声音、档案记录等
  • 以"记录"形式按统一的格式进行存储

2、表

  • 将不同的记录组织在一起
  • 用来存储具体数据

3、数据库

  • 表的集合,存储数据的仓库
  • 以一定的组织方式存储的相互有关的数据集合
  • 是按照数据结构来组织、存储和管理数据的仓库

4、数据库管理系统 (DBMS)

  • 是实现对数据库资源有效组织、管理和存取的系统软件
  • 数据库的建立和维护功能、数据定义功能、数据操纵功能、数据库的运行管理功能、通信功能

5、数据库系统

  • 是一个人机系统,由硬件、OS、数据库、DBMS、应用软件和数据库用户组成
  • 用户可以通过DBMS或应用程序操作数据库

二、认识关系型数据库

1、关系型数据库概述

  • 关系数据库系统是基于关系模型的数据库系统
  • 数据结构使用简单易懂的二维数据表
  • 可用简单的"实体-关系" (E-R)图来表示
  • E-R图中包含了实体(数据对象)、关系和属性三个要素

2、关系型数据库的结构

  • 关系型数据库的存储结构是:二维表格
  • 每一行称为:一条记录,用来描述一个对象的信息
  • 每一列称为:一个字段,用来描述对象的一个属性

三、关系型数据库代表:MySQL数据库

1、Mysql 概述

  • 一款深受欢迎的开源关系型数据库
  • Oracle旗下的产品
  • 遵守GPL协议、可以免费使用和修改
  • 特点:
  1. 性能卓越、服务稳定
  2. 开源、无版权限制、成本低
  3. 多线程、多用户
  4. 基于C/S(客户端/服务器)架构
  5. 安全可靠

2、常用的数据类型

  • int :整数型
  • float:单精度浮点型 4字节 32位
  • double:双精度浮点型 8字节 64位
  • char:固定长度的字符类型
  • varchar:可变长度的字符类型
  • text:文本
  • image:图片

四、SQL语句的使用

1、查看数据库结构

1.1、查看当前服务器中的数据库

show databases

1.2、查看某数据库中的所有表

use 数据库名;
show tables;

1.3、查看表的结构(字段)

1describe 数据库名.表名;

2、use 数据库名;              ### describe 可缩写成:desc
   describe 表名;
   
3show create table 表名\G;  ### 以列表方式竖向显示字段(包括键名)

2、创建、删除数据库和库中的表

2.1、创建的新数据库

create database 数据库名;

2.2、创建新的表

create table 表名(字段1 数据类型 [属性],字段2 数据类型 [属性]...);

2.3、删除数据库

drop database 数据库名;

2.4、删除表

drop table 数据库名.表名;

3、表中数据记录的 增删改查

3.1、向表中插入新的数据记录

1):insert into 表名(字段1,字段2,...)values(字段1的值,字段2的值...);

2):insert into 表名 values(字段1的值,字段2的值...);   ##values前面字段省略时,注意后面字段的值要跟表中字段一一对应

3.2、查询表中数据记录

 1):select * from 表名;                    ## 查看表中所有数据记录
 2):select 字段1,字段2... from 表名;       ## 根据给出的字段名查询记录
 3):select * from 表名 [where 条件表达式]; ## 根据条件查询记录
 4):select * from 表名\G;                  ## 以列表方式竖向显示数据
 5):select * from 表名 limit [数字n];      ## 查询前n行记录
 6):select * from 表名 limit [数字n],[数字m]; ## 查询第n行后的前m行记录

4、修改、更新表中记录

update 表名 set 字段名1=字段1的值,字段名2=字段2的值.. [where 条件表达式];

5、删除表中数据

delete from 表名 [where 条件表达式];

6、修改表名和表的结构

6.1、修改表名

alter table 旧表名 rename 新表名;

6.2、增加新的字段

alter table 表名 add 字段1 数据类型 [属性];

6.3、修改字段属性

alter table 表名 CHANGE 旧字段名 新字段名 数据类型 [键名];

6.4、删除字段

alter table 表名 drop 字段名;

6.5、添加字段的 键名

1):create table 表名 (字段1,字段2,键名(字段名) );  ## 创建表的时候添加

2):alter table 表名 ADD 键名(字段名);

6.6、删除键名

alter table 表名 DROP 键名;

五、数据库的高级操作

5.1、复制表的结构和数据(克隆表)

1create1 like2;  ##复制表的结构

2insert into1 select * from2; #将表2查询的数据导入表13create table2 (select * from1); ##创建表2的时候,从表1中复制其字段属性和数据

5.2、清空表的内容

 1):delete from 表名;   ##自增列不会被重置
 2):truncate table 表名;  ## 自增列会被重置为1

六、数据库用户管理

6.1、新建用户

create user '用户名' @ '来源地址' [identified by '密码'];

6.2、查看用户信息

select User,authentication_string,Host from 表名;

6.3、重命名用户

rename user '旧用户名'@'localhost' to '新用户名'@'localhost';

6.4、删除用户

drop user '用户名'@'localhost';

6.5、修改密码

set password = password('新密码'); ##修改当前登录用户的密码

set password for '用户名'@'localhost'=password(新密码);  ## 修改其他用户密码

6.6、忘记 root 密码的解决方法

1、修改/etc/my.cnf 配置文件,不使用密码直接登录MySQL
vim /etc/my.cnf
[mysqld]                   ### 在mysql块添加
skip-grant-tables          ### 登录mysql不使用授权

systemctl restart mysqld

mysql                      ### 使用mysql直接登录

##  修改root密码
update mysql.user set authentication_string = password('新密码') where user='root';

plush privileges;   ## 刷新权限

quit                ## 退出mysql
## 注意把/etc/my.cnf 配置文件里的skip-grant-tables一行删除。

## 使用新密码登录mysql 


七、数据库用户的授权

7.1、授予权限

Grant语句:用来设置数据库用户的访问权限。当指定的用户名不存在时,GRANT语句将会创建新的用户:当指定的用户名存在时,GRANT语句用于修改用户信息。

GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'来源地址' [IDENTIFIED by '密码'];

  • 权限列表:用于列出授权使用的各种数据库操作,以逗号进行分隔,如"select,insert,update"使用"all"表示所有权限,可授权执行任何操作。
  • 数据库名.表名:用于指定授权操作的数据库和表的名称,其中可以使用通配符"*" 例如:使用"kgc.*"表示授权操作的对象为kgc数据库中的所有表
  • '用户名@来源地址':用于指定用户名称和允许访问的客户机地址,即谁能连接、能从哪里连接。来源地址可以是域名、ip地址,还可以使用"%"通配符,表示某个区域或网段内的所有地址
  • IDENTIFIED by:用于设置用户连接数据库时所使用的密码字符串。在新建用户时,若省略"IDENTIFIED by"部分,则用户密码为空。
示例:允许zhangsan 用户在本地查询kgc数据库中所有表的数据记录,但禁止查询其他数据库中的表记录
GRANT select ON kgc.* TO 'zhangsan'@'localhost' IDENTIFIED by 'abc123';

示例:允许用户lisi 在所有终端远程连接 mysql,并拥有所有权限
GRANT ALL [PRIVILEGES] ON *.* TO 'lisi'@'%' IDENTIFIED by 'abc123';

7.2、查看权限

show grant for '用户名'@'来源地址';

例:
show grant for 'lisi'@'%';

7.3、撤销权限

revoke 权限列表 ON 数据库名.表名 from '用户名'@'来源地址';

例:
revoke all ON *.* from 'zhangsan'@'%';