MySQL数据库基本操作(增删改查)与用户授权

前言

SQL(Structured Query Language,结构化查询语言)是一种用于管理关系数据库系统的语言。SQL的设计目标是提供一种简单、直观的语言,使得用户可以通过编写SQL语句来处理他们想要的数据和操作。

目录

一、结构介绍

1. 查看信息

1.1 查看数据库信息

1.2 查看数据库中的表信息

1.3 显示数据表的结构(字段)

2. 结构字段

3. 常用数据类型

二、SQL语言

1. 分类

2. DDL

2.1 创建数据库

2.2 创建数据表 

2.3 获取表结构

2.4 删除数据库

2.5 删除数据表 

3. DML

3.1 表中插入新数据

3.2 更新修改

3.3 删除表数据

4. DQL

5. 数据表的高级操作

5.1 清空表

5.2 三种删除命令区别 

6. 临时表

7. 克隆表 

8. DCL

8.1 修改表名

8.2 扩展表结构(增加字段)

8.3 修改字段(列)名,添加唯一键

8.4 删除

二、用户授权管理

1. 用户管理

1.1 新建用户

1.2 查看用户信息

1.3 重命名指定

1.4 删除用户

1.5 修改当前密码

1.6 修改其他用户密码

1.7 忘记密码

2. 用户授权

2.1 基本格式介绍

2.2 授权示例

2.3 查看权限

2.4 撤销权限

2.5 all privilege 权限


一、结构介绍

1. 查看信息

1.1 查看数据库信息

mysql> show databases;

1.2 查看数据库中的表信息

mysql> use mysql;     #首先要切换到mysql库内
mysql> show tables;  

#或者
mysql> show tables in mysql;

1.3 显示数据表的结构(字段)

mysql> use mysql;
mysql> describe user;

#或者
mysql> describe mysql.user;   #describe 库名.表名

2. 结构字段

Field:字段名称
type :数据类型
Null :是否允许为空值
key  :主键
Default:默认值
Extra  :扩展属性,例如:AUTO_INCREMENT:这个属性通常用于整数类型的字段,表示这个字段的值是自动递增的。

3. 常用数据类型

int:整型                   #用于定义整数类型的数据
float:单精度浮点4字节32位    #准确表示到小数点后六位		
double:双精度浮点8字节64位   #精确度更高
char:固定长度的字符类型	   #用于定义字符类型数据,如:20字节,只写入4个字符,依然占用20字节
#Char如果存入数据的实际长度比指定长度要小,会补空格至指定长度,如果存入的数据的实际长度大于指定长度,低版本会被截取,高版本会报错
varchar:可变长度的字符类型   #区别于char,如:20字节,只写入4个字符,占用4字节
text:文本
image:图片
decimal(5,2):5个有效长度数字,小数点后面有2位
#指定长度数组 ,如:999.99

二、SQL语言

SQL语句用于维护管理数据库,包括数据查询、数据更新、访问控制、对象管理等功能。在MySQL数据库中SQL语句不区分大小写。

1. 分类

① DDL:数据定义语言(创建、修改、删除数据库对象)

② DML:数据操纵语言(插入、修改、删除、查询数据)

③ DQL:数据查询语言(数据库中查询信息)

④ DCL:数据控制语言(数据库访问权限和安全性)

2. DDL

用于创建数据库对象,如库、表、索引等

2.1 创建数据库

格式为:create database 数据库名;
示例:
mysql> create database school;   #创建数据库school
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |       #information_schema数据库提供了关于数据库对象的元数据信息
| mysql              |       #mysql 是一个系统数据库
| school             |       #新建的数据库
| performance_schema |       #performance_schema数据库则提供了关于数据库服务器性能的详细信息  
| sys                |       #sys是一个用于性能监测和诊断的工具库
+--------------------+
5 rows in set (0.00 sec)

2.2 创建数据表 

格式:create table 数据库名(至少一个字段定义...);
示例:
mysql> use school;
mysql> create table class(id int not null,name char(15) not null,score decimal(5,2),passwd char(45)default'',primary key(id));
Query OK, 0 rows affected (0.03 sec)
# id int not null:这是一个整数类型的列,且不允许为空。这通常用作表的主键,用于唯一标识每一行。
# name char(15) not null:这是一个字符类型的列,长度为 15,且不允许为空。用于存储学生的名字。
# score decimal(5,2):这是一个十进制数类型的列,总共有 5 位数,其中 2 位是小数。用于存储学生的分数。
# passwd char(45) default '':这是一个字符类型的列,长度为 45,且默认值为空字符串。用于存储学生的密码。
# primary key(id):这是一个主键约束,指定 id 列作为主键。主键是用于唯一标识每一行的列,且每一行的主键值都必须唯一。

2.3 获取表结构

格式:desc 表名;
示例:
mysql> desc class;
+--------+--------------+------+-----+---------+-------+
| Field  | Type         | Null | Key | Default | Extra |  #字段
+--------+--------------+------+-----+---------+-------+
| id     | int(11)      | NO   | PRI | NULL    |       |
| name   | char(15)     | NO   |     | NULL    |       |
| score  | decimal(5,2) | YES  |     | NULL    |       |
| passwd | char(45)     | YES  |     |         |       |
+--------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

2.4 删除数据库

格式:drop database 库名; #此方法删除库后,库以及库里的表一并删除,谨慎操作

2.5 删除数据表 

格式:
drop table 表名;  #此方法删除表后,表的结构和内容一并删除,谨慎操作
#一般需要先use进入库中再删除;如果不用use进入库中,删除则需加上数据库名
mysql> drop table 库名.表名;

3. DML

用于对表中的数据进行管理,用来插入、删除和修改数据库中的数据

3.1 表中插入新数据

格式1:
use 库;
insert into 表名(字段1,字段2,...) values(字段1的值,字段2的值,...);
# values()中字符串建议加''
格式2:
insert into 表名 values(字段1的值,[字段2的值,]...);
# values()中部分字段值可以不写
示例:
mysql> insert into class(id,name,score,passwd) values(1,'zs',500.50,password('123456'));
# 向 class 表插入一行数据,id、name、score 和 passwd 是表 "class" 的列名,它们的值分别是 1、zs、500.50 和 123456,密码以密文显示
mysql> insert into class values(2,'lisi',666.00,666666);
# 向 class 表插入一行数据,id、name、score 和 passwd 是表 "class" 的列名,它们的值分别是 2、lisi、666.00 和 666666
mysql> select * from class;    #查看表信息
+----+------+--------+-------------------------------------------+
| id | name | score  | passwd                                    |
+----+------+--------+-------------------------------------------+
|  1 | zs   | 500.50 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
|  2 | lisi | 666.00 | 666666                                    |
+----+------+--------+-------------------------------------------+
2 rows in set (0.00 sec)

3.2 更新修改

格式:
update 表名 set 字段名1=值1[,字段名2=值2] where 条件表达式;
# set 关键字用于指定要更新的列和它们的新值
# where 关键字用于指定更新操作应该应用到哪些行。只有满足 where 子句的行才会被更新
示例:
mysql> update class set name='wang' where name='zs';
# 将表 class 中所有 name 列的值为 zs 的行的 name 列的值更新为 wang
mysql> update class set score='580.00' where id=2;
# 将表 class 中 id 列的值为 2 的行的 score 列的值更新为 580.00
mysql> select * from class;
+----+------+--------+-------------------------------------------+
| id | name | score  | passwd                                    |
+----+------+--------+-------------------------------------------+
|  1 | wang | 500.50 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
|  2 | lisi | 580.00 | 666666                                    |
+----+------+--------+-------------------------------------------+
2 rows in set (0.00 sec)

3.3 删除表数据

格式:
delete from 表名;                 #删整张表,谨慎操作
delete from 表名 where 条件表达式;  #指定删除匹配项
如果不用use进入库中:
delete from 库名.表名;
示例:
mysql> delete from class where id=2;
# 从名为 "class" 的表中删除 id 列的值为 2 的行
mysql> select * from class;
+----+------+--------+-------------------------------------------+
| id | name | score  | passwd                                    |
+----+------+--------+-------------------------------------------+
|  1 | wang | 500.50 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+----+------+--------+-------------------------------------------+
1 row in set (0.00 sec)

4. DQL

用于从数据表中查找符合条件的数据记录

格式:
select 字段名1[,字段名2],... from 表名[where 条件表达式]; #字段没有要求可以写成*
如果不用use进入库中:
select 字段名1[,字段名2],... from 库名.表名;
示例:
mysql> select * from class;
# 查询名为 class 的表中选择所有列和行的信息
mysql> select * from class;
+----+------+--------+-------------------------------------------+
| id | name | score  | passwd                                    |
+----+------+--------+-------------------------------------------+
|  1 | wang | 500.50 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
|  2 | lisi | 580.00 | 666666                                    |
+----+------+--------+-------------------------------------------+
2 rows in set (0.00 sec)

mysql> select name,score from class where name='wang';
# 从名为 class 的表中选择 name 和 score 两列,匹配 name 列的值为 wang 的信息。
+------+--------+
| name | score  |
+------+--------+
| wang | 500.50 |
+------+--------+
1 row in set (0.00 sec)

其他示例:

mysql> select name from class\G;
# 以列表方式竖向显示
*************************** 1. row ***************************
name: wang
*************************** 2. row ***************************
name: lisi

mysql> select * from class limit 1;
# 只显示头1行
+----+------+--------+-------------------------------------------+
| id | name | score  | passwd                                    |
+----+------+--------+-------------------------------------------+
|  1 | wang | 500.50 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+----+------+--------+-------------------------------------------+

mysql> select * from class limit 1,1;
# 显示第1行后的前1行
+----+------+--------+--------+
| id | name | score  | passwd |
+----+------+--------+--------+
|  2 | lisi | 580.00 | 666666 |
+----+------+--------+--------+

5. 数据表的高级操作

5.1 清空表

方法一:

格式:
delect from 表名;
# delete 清空表后,返回的结果内有删除的记录条目
# delete 工作时是逐行的删除数据;如果表中有自增长字段,使用 delete from 删除所有记录后,再次新添加的记录会从原来最大的记录ID后面继续自增写入记录

方法二: 

truncate table 表名;
# truncate 清空表后,没有返回被删除的条目
#TRUNCATE 工作时是将表结构按原样重新建立,因此在速度上 truncate 会比 delete 清空表快;使用truncate table 清空表内数据后,id 会从 1 开始重新记录

5.2 三种删除命令区别 

特性/命令drop table 表名truncate table 表名delete from 表名
语言类属于DDL属于DDL属于DML
回滚恢复不可回滚(无法恢复)不可回滚(无法恢复)可回滚(可恢复)
是否带where不可带where不可带where可带where
删除情况表内容和结构删除表内容删除(结构保留)表结构保留,表内容视where执行情况
删除速度删除速度快删除速度快删除速度慢,需要逐行删

总结:

  • 不再需要一张表的时候,用drop
  • 想删除部分数据行时候,用delete,并且带上where子句
  • 保留表结构而删除所有数据的时候用truncate
  • 删除速度:drop> truncate > delete
  • delete 安全性最好 

6. 临时表

临时表是一种特殊的数据表,在生产环境中,有时候会用临时表做一些性能测试。它只在当前的数据库会话中存在(临时存放内存中),当会话结束时,临时表就会被自动删除。

格式:
create temporary table 表名 (字段1 数据类型[,字段2 数据类型],... [PRIMARY KEY (主键名)]);
# 临时表创建成功之后,使用 show tables 命令是看不到创建的临时表的,临时表会在连接退出后被销毁
# 在退出连接之前,也可以可执行增删改查等操作,比如使用 drop table 语句手动直接删除临时表
示例:
mysql> create temporary table class1 (id int(4) zerofill primary key auto_increment,name varchar(15) not null,cardid int(18) not null unique key,hobby varchar(60),shouji int(11) unique key);
# int(4) zerofill:表示若数值不满4位数,则前面用"0"填充,例0001
# auto_increment:表示此字段为自增长字段,即每条记录自动递增1,默认从1开始递增;自增长字段数据不可以重复;自增长字段必须是主键;如添加的记录数据没有指定此字段的值且添加失败也会自动递增一次
# unique key:表示此字段唯一键约束,此字段数据不可以重复:一张表中只能有一个主键,但是一张表中可以有多个唯一键
# not null:表示此字段不允许为NULL
# primary key(id):这是一个主键约束,指定 id 列作为主键。主键是用于唯一标识每一行的列,且每一行的主键值都必须唯一。
mysql> insert into class1 values(1,'hong',111111,'sing',138); 
mysql> insert into class1 values(2,'ming',111111,'dance',139);
ERROR 1062 (23000): Duplicate entry '111111' for key 'cardid'
# cardid唯一键约束,无法创建相同的值
mysql> insert into class1 values(2,'ming',222222,'dance',139);
mysql> insert into class1 (name,cardid,hobby,shouji) values('yang',333333,'rap',181);
mysql> select * from class1;
+------+------+--------+-------+--------+
| id   | name | cardid | hobby | shouji |
+------+------+--------+-------+--------+
| 0001 | hong | 111111 | sing  |    138 |
| 0002 | ming | 222222 | dance |    139 |
| 0003 | yang | 333333 | rap   |    181 |
+------+------+--------+-------+--------+
3 rows in set (0.00 sec)

mysql> exit
mysql> use school;
mysql> select * from class1;
ERROR 1146 (42S02): Table 'school.class1' doesn't exist
# 退出即失效

7. 克隆表 

克隆表是指在数据库中创建一个已存在表的副本。克隆表包含了原表的结构和数据,但是它们是独立的,对克隆表的修改不会影响原表。克隆表通常用于备份数据,或者在进行复杂的数据处理时进行实验,以避免对原表的影响。

方法1:like 方法
create table 新表名 like 旧表名;    
#复制格式,通过like方法,复制旧表结构生成新表
insert into 新表名 select * from 旧表名;     
#备份内容
方法2:show create table 方法
create table 新表名 (select * from 旧表名);   
#复制旧表数据到新表中,即将旧数据表的数据记录生成到新的表中
示例:方法1
mysql> use school;
mysql> create table class1 like class;
mysql> desc class1;            
+--------+--------------+------+-----+---------+-------+
| Field  | Type         | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+-------+
| id     | int(11)      | NO   | PRI | NULL    |       |
| name   | char(15)     | NO   |     | NULL    |       |
| score  | decimal(5,2) | YES  |     | NULL    |       |
| passwd | char(45)     | YES  |     |         |       |
+--------+--------------+------+-----+---------+-------+
# 查看表结构,可见格式字段包括主键都存在
mysql> insert into class1 select * from class;
mysql> select * from class1;
+----+------+--------+-------------------------------------------+
| id | name | score  | passwd                                    |
+----+------+--------+-------------------------------------------+
|  1 | wang | 500.50 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
|  2 | lisi | 580.00 | 666666                                    |
+----+------+--------+-------------------------------------------+
# 查看表内容都存在

示例:方法2
mysql> create table class2 (select * from class);
mysql> select * from class2;
+----+------+--------+-------------------------------------------+
| id | name | score  | passwd                                    |
+----+------+--------+-------------------------------------------+
|  1 | wang | 500.50 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
|  2 | lisi | 580.00 | 666666                                    |
+----+------+--------+-------------------------------------------+
# 查看表内容都存在
mysql> desc class2;
+--------+--------------+------+-----+---------+-------+
| Field  | Type         | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+-------+
| id     | int(11)      | NO   |     | NULL    |       |
| name   | char(15)     | NO   |     | NULL    |       |
| score  | decimal(5,2) | YES  |     | NULL    |       |
| passwd | char(45)     | YES  |     |         |       |
+--------+--------------+------+-----+---------+-------+
# 查看表结构,格式字段存在,缺少主键
mysql> show create table class2\G     #获取数据表的表结构、索引等信息
*************************** 1. row ***************************
       Table: class2
Create Table: CREATE TABLE "class2" (
  "id" int(11) NOT NULL,
  "name" char(15) NOT NULL,
  "score" decimal(5,2) DEFAULT NULL,
  "passwd" char(45) DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8

总结:克隆表有两种

① 迁移表:表的结构、属性、约束、数据等

② 备份数据:表的属性、内容(数据)

8. DCL

修改表名和表结构

8.1 修改表名

格式:
alter table 旧表名 rename 新表名;
示例:
mysql> alter table class2 rename class5;
# 将数据表 class2 修改名称为 class5
mysql> select * from class5;
+----+------+--------+-------------------------------------------+
| id | name | score  | passwd                                    |
+----+------+--------+-------------------------------------------+
|  1 | wang | 500.50 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
|  2 | lisi | 580.00 | 666666                                    |
+----+------+--------+-------------------------------------------+

8.2 扩展表结构(增加字段)

格式:
alter table 表名 add 字段名 数据类型;
示例:
mysql> alter table class5 add address varchar(100) default 'dizhiweizhi';
# 给数据表 class5 新增字段命名 address,定义数据类型为可变长度型,最大100字节,默认值为 dizhiweizhi
mysql> desc class5;
+---------+--------------+------+-----+-------------+-------+
| Field   | Type         | Null | Key | Default     | Extra |
+---------+--------------+------+-----+-------------+-------+
| id      | int(11)      | NO   |     | NULL        |       |
| name    | char(15)     | NO   |     | NULL        |       |
| score   | decimal(5,2) | YES  |     | NULL        |       |
| passwd  | char(45)     | YES  |     |             |       |
| address | varchar(100) | YES  |     | dizhiweizhi |       |
+---------+--------------+------+-----+-------------+-------+
mysql> select * from class5;
+----+------+--------+-------------------------------------------+-------------+
| id | name | score  | passwd                                    | address     |
+----+------+--------+-------------------------------------------+-------------+
|  1 | wang | 500.50 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | dizhiweizhi |
|  2 | lisi | 580.00 | 666666                                    | dizhiweizhi |
+----+------+--------+-------------------------------------------+-------------+
# default 'dizhiweizhi':表示此字段设置默认值为dizhiweizhi,可与 ot null 配合使用

8.3 修改字段(列)名,添加唯一键

格式:
alter table 表名 change 旧字段名 新字段名 数据类型 [unique key];
示例:
mysql> alter table class5 change name mingzi varchar(15) unique key;
# 将数据表 class5 的 name 字段名改成 mingzi ,定义数据类型为可变长度类型,最大 15 个字节,并定义唯一键约束
mysql> desc class5;
+---------+--------------+------+-----+-------------+-------+
| Field   | Type         | Null | Key | Default     | Extra |
+---------+--------------+------+-----+-------------+-------+
| id      | int(11)      | NO   |     | NULL        |       |
| mingzi  | varchar(15)  | YES  | UNI | NULL        |       |
| score   | decimal(5,2) | YES  |     | NULL        |       |
| passwd  | char(45)     | YES  |     |             |       |
| address | varchar(100) | YES  |     | dizhiweizhi |       |
+---------+--------------+------+-----+-------------+-------+

8.4 删除

格式:
alter table 表名 drop 字段名;
示例:
mysql> alter table class5 drop address;
# 删除数据表 class5 的 address 字段
mysql> desc class5;
+--------+--------------+------+-----+---------+-------+
| Field  | Type         | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+-------+
| id     | int(11)      | NO   |     | NULL    |       |
| mingzi | varchar(15)  | YES  | UNI | NULL    |       |
| score  | decimal(5,2) | YES  |     | NULL    |       |
| passwd | char(45)     | YES  |     |         |       |
+--------+--------------+------+-----+---------+-------+

二、用户授权管理

1. 用户管理

1.1 新建用户

格式:
create user '用户名'@'来源地址' [identified by [password]'密码'];
# '用户名':指定将创建的用户名.
# '来源地址':指定新创建的用户可在哪些主机上登录,可使用IP地址、网段、主机名的形式,本地用户可用localhost,允许任意主机登录可用通配符%
# '密码':若使用明文密码,直接输入'密码',插入到数据库时由Mysql自动加密;
# 若使用加密密码,需要先使用 select password ('密码');获取密文,再在语句中添加 password '密文';
# 若省略"identified by"部分,则用户的密码将为空(不建议使用)

示例:
mysql> create user 'fql'@'localhost' identified by '123123';
# 创建用户 fql 允许本地登录,密码 123123(插入数据后 mysql 自动加密)
mysql> select password('666666');
+-------------------------------------------+
| password('666666')                        |
+-------------------------------------------+
| *B2B366CA5C4697F31D4C55D61F0B17E70E5664EC |
+-------------------------------------------+
mysql> create user 'wang'@'192.168.190.%' identified by password '*B2B366CA5C4697F31D4C55D61F0B17E70E5664EC';
# 创建用户 王 允许 192.168.190.段登录,密文密码

1.2 查看用户信息

mysql> use mysql;
格式:
select 字段1,字段2,... from user;
示例:
mysql> select User,authentication_string,Host from user;
# 查看 user 表中用户、密码、来源地址的信息
+-----------+-------------------------------------------+---------------+
| User      | authentication_string                     | Host          |
+-----------+-------------------------------------------+---------------+
| root      | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | localhost     |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | localhost     |
| fql       | *E56A114692FE0DE073F9A1DD68A00EEB9703F3F1 | localhost     |
| wang      | *B2B366CA5C4697F31D4C55D61F0B17E70E5664EC | 192.168.190.% |
+-----------+-------------------------------------------+---------------+

1.3 重命名指定

mysql> use mysql;
mysql> rename user 'wang'@'192.168.190.%' to 'lisi'@'192.168.190.%';
mysql> select User,authentication_string,Host from user where User='lisi';
+------+-------------------------------------------+---------------+
| User | authentication_string                     | Host          |
+------+-------------------------------------------+---------------+
| lisi | *B2B366CA5C4697F31D4C55D61F0B17E70E5664EC | 192.168.190.% |
+------+-------------------------------------------+---------------+

1.4 删除用户

mysql> drop user 'lisi'@'192.168.190.%';
# 删除用户 lisi
mysql> select User,authentication_string,Host from user;
+-----------+-------------------------------------------+-----------+
| User      | authentication_string                     | Host      |
+-----------+-------------------------------------------+-----------+
| root      | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | localhost |
| fql       | *E56A114692FE0DE073F9A1DD68A00EEB9703F3F1 | localhost |
+-----------+-------------------------------------------+-----------+

1.5 修改当前密码

mysql> set password = password('abc123');
# 修改当前用户密码为 abc123

1.6 修改其他用户密码

mysql> set password for 'fql'@'localhost' = password('123456');
# 修改用户 fql 密码为 123456

1.7 忘记密码

① 修改/etc/my.cnf 配置文件,免密登陆mysql

[root@localhost ~]# vim /etc/my.cnf
[mysqld]
skip-grant-tables    #添加此条内容,使登录 mysql 不使用授权表

② 重启服务(生产环境谨慎操作),直接登录mysql修改密码

[root@localhost ~]# systemctl restart mysqld
[root@localhost ~]# mysql
mysql> update mysql.user set authentication_string = password('666666') where user='root';
# 更新 mysql 库 user 表中 user 列的值为 root 的行的 authentication_string(密码)列的值为 '666666' 
mysql> flush privileges;
mysql> exit
[root@localhost ~]# mysql -u root -p'666666'
mysql>      # 成功登录

或者免密登录进来后先刷新 MySQL 的权限表,在执行修改当前用户密码:
mysql> flush privileges;
mysql> set password for 'root'@'localhost'=password('新密码');

 ③ 还原/etc/my.cnf 配置,重启服务

2. 用户授权

在 MySQL 中,用户提权是指将用户的权限从一个级别提升到另一个更高的级别。或者根据需求给予合理的权限。

2.1 基本格式介绍

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

2.2 授权示例

① 允许用户 fql 在本地连接 mysql,并拥有 school 库查询的权限

mysql> grant select on school.* to 'fql'@'localhost' identified by '123456';
mysql> flush privileges;

[root@localhost ~]# mysql -u fql -p'123456'
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| school             |    # 只能看到 school 库
+--------------------+
mysql> use school;
mysql> show tables;
+------------------+
| Tables_in_school |
+------------------+
| class            |
| class1           |
| class5           |
+------------------+
mysql> select * from class;
+----+------+--------+-------------------------------------------+
| id | name | score  | passwd                                    |
+----+------+--------+-------------------------------------------+
|  1 | wang | 500.50 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
|  2 | lisi | 580.00 | 666666                                    |
+----+------+--------+-------------------------------------------+
mysql> delete from class;
ERROR 1142 (42000): DELETE command denied to user 'fql'@'localhost' for table 'class'
# 权限拒绝

尝试远程连接:被拒绝访问

② 授权 root 用户在 school 库所有权限,允许192.168.190段远程访问 

mysql> grant all privileges on school.* to 'root'@'192.168.190.%' identified by '666666';  

尝试远程连接:访问成功

2.3 查看权限

mysql> show grants for 'fql'@'localhost';
+-------------------------------------------------+
| Grants for fql@localhost                        |
+-------------------------------------------------+
| GRANT USAGE ON *.* TO 'fql'@'localhost'         |
| GRANT SELECT ON "school".* TO 'fql'@'localhost' |
+-------------------------------------------------+

2.4 撤销权限

格式:
revoke 权限列表 on 数据库名.表名 from 用户名@来源地址;
示例:撤销 fql 权限对于库 school 的权限
mysql> revoke all on "school".* from 'fql'@'localhost';
mysql> show grants for 'fql'@'localhost';
+-----------------------------------------+
| Grants for fql@localhost                |
+-----------------------------------------+
| GRANT USAGE ON *.* TO 'fql'@'localhost' |
+-----------------------------------------+

2.5 all privilege 权限

权限说明
insert插入数据
select查询数据
update更新表的数据
delete删除表中数据
create创建库,表
drop删除库,表
refernces外键约束
index建立索引
alter更改表属性
create temp orary tableslock tables锁表
execute对存储过程或函数的执行权限
create view创建视图
show view显示视图
create routine创建存储过程
alter routine修改存储过程
event事件
trigger on创建触发器

  • 18
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQl语句 show databases; 打开数据库 create database 数据库名; 新建数据库 use 数据库名; 使用数据库 show tables; 打开所有表 desc 表名 查看表结构 常用Mysql语句 1.插入字段 insert into 表名(表里字段,不加括号表示插入所有字段) values (对应的字段值); 2.查看表记录 select *(或字段名) from 表名; 3.更新记录 update 表名 set 字段名 = 字段值 where 要判断的字段名 = 要判断的字段值; 如果你要进行判断的字段值为null 要写 update 表名 set 字段名 = 字段值 where 要判断的字段名 is null; 4.删除记录 delete from 表名 where 要删除的字段名 = 要删除的字段值; 1.加载驱动 Class.ForName(com.mysql.jdbc.Driver); 2.建立连接 /* String url = "jdbc:mysql://localhost:3306/student"; //3306指你当前数据库的端口号,student指你指定的哪个数据库名字 String user = "root"; //root是你的用户名 String password = "esoft"; //esoft你的数据库密码 */ connection conn = DriverManager.getconnection(url,user,password); 3.创建对象 //create object Statement ste = conn.createStatement(); 4.执行语句 // 对数据库进行插入,更新,删除等操作时用executeUpdate()返回int型。 int i = ste.executeUpdate(); // 对数据库进行查看操作时用executeQuery()返回ResultSet结果集。 ResultSet res = ste.executeQuery(); 5.处理结果 当是返回int型时 if(i > 0){ System.out.println("操作成功!"); } 当返回ResultSet型结果集时 while(res.next()){ Student stu = new Student(); stu.setSno(res.getString("Sno")); stu.setSname(res.getString("Sname")); stu.setId(res.getInt("id")); stu.setSage(res.getInt("Sage")); list.add(stu); } return list; 6.关闭连接 当是返回int型时只需关闭 ste.close(); conn.close(); 当是返回ResultSet型结果集时需关闭 res.close(); ste.close(); conn.close(); Oracle数据库 数据库4种语言 1. DCL:数据控制语言。授权 2. DDL:数据定义语言。创建、修改数据库对象 3. DML:数据操纵语言。对数据库的增、删、改、查。 4.数据库事物处理语言 常用sql语句 1.插入字段 insert into 表名(表里字段,不加括号表示插入所有字段) values (对应的字段值); 2.查看表记录 select *(或字段名) from 表名; 3.更新记录 update 表名 set 字段名 = 字段值 where 要判断的字段名 = 要判断的字段值; 如果你要进行判断的字段值为null 要写 update 表名 set 字段名 = 字段值 where 要判断的字段名 is null; 4.删除记录 delete from 表名 where 要删除的字段名 = 要删除的字段值; 5.连接运算符 (||) select 字段名||'名字' from 表名; 6.去除重复行 (distinct) select distinct 字段名 from 表名; 7.升序排序 select 字段名 from 表名 order by ; 8.降序排序 select 字段名 from 表名 order by desc; 9.在……和……之间 (between and) select 字段名 from 表名 where 要判断的字段名 between 数值 and 数值; 10.in (相当于or) not in(相当于and) select 字段名 from 表名 where 字段名 in(数值,数值); select 字段名 from 表名 where 字段名 not in(数值,数值); 11.模糊查询 like %:0个或多个任意字符 _:1个任意字符 select 字段名 from 表名 where 要判断的字段 like '%字符%'; 12.null的处理 select 字段名 from 表名 where 要判断的字段名 is null(is not null); 13.dual表是用来计算的表 可以用来round:四舍五入,trunc:截断小数位,mod取余,ceil:求大于等于某数的最小整数。例:ceil(2.35) 3,floor:求小于等于某数的最大整数。例:floor(2.35) 2。 select round(123.123,要保留的位数) from dual; select trunc(213.231,要保留的位数) from dual; 14.字符函数 substr:截取字符串 Oracle当中substrate()函数的截取的索引从0或从1开始都可以。 Initcap:字符的首字母大写 Lpad:向字符串的左侧添加字符 Rpad:向字符串的右侧添加字符 Instr:是否包含某字符,从第几个字符开始,第几次出现的位置。 Replace:用一个字符串替换另一个字符串中的字符 15.日期函数 sysdate:当前日期 months_between(日期值1,日期值2):求出给定日期范围的月数 add_months(日期值,给定的月数):在制定日期上加上指定的月数,求出之后的日期 next_day(日期值,星期):指定日期后的星期对应的新日期 last_day(日期值):返回指定日期所在月份的最后一天 日期进行加减的一些规律: 日期-数字 = 日期 日期+数字 = 日期 日期-日期 = 数字(天数) 16.转换函数 (1).to_char:转换成字符串 a. 日期转换..............................后面文档自己下载
<?php header("content-type:text/html;charset=utf-8"); class DBUtils{     /**      *通用更新方法 insert update delete 操作      *@param sql      *@return bool  true false      */     public function update($sql){         $link = $this->getConn();         mysql_query($sql);         //如果出错显示         if(DEBUG){             echo mysql_error();         }         $rs = mysql_affected_rows($link);         $rs = $rs > 0;         mysql_close($link);         return $rs;     }MySQL 是一个关系型数据库,由瑞典 MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL 所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策(本词条"授权政策"),它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。由于其社区版的性能卓越,搭配 PHP ,Linux和 Apache 可组成良好的开发环境,经过多年的web技术发展,在业内被广泛使用的一种web服务器解决方案之一,称之为LAMP。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值