MySQL数据库的权限问题操作及基本增删改查操作
  前⾯我们讲了mysql的基本内容,现在我们详细的了解⼀下 MySQL 中的具体操作。
what's the SQL
  SQL(Structured Query Language 即结构化查询语⾔)
  SQL 语⾔主要⽤于存储数据、更新数据和管理关系数据系统,由 IBM 开发。
SQL语句分为三种:
DDL 语句数据库定义语⾔:数据库、表、视图、索引、存储过程,例如create、alter
DML 语句数据库操纵语⾔:插⼊数据 insert、删除数据 delete、更新数据 update、查询 select
DCL 语句数据库控制语⾔:例如控制⽤户的访问权限grant、revoke
系统数据库nextsibling属性
  MySQL 刚创建完成的时候会⽣成四个系统数据库:information_schema、performance_schema、mysql、test、
information_schema:虚拟库,不占⽤磁盘内存,存储的是数据库启动后的参数
performance_schema:⽤于收集数据库服务器性能的参数,记录处理查询请求时发⽣的各种事件、锁等现象
mysql:授权库,存储系统⽤户的权限信息
test:MySQL数据库系统⾃动创建的测试数据库
创建⽤户
  ⾸先数据库需要有创建⽤户才可以登陆,这⾥创建⽤户共有三种形式:
# 创建新⽤户
create user 'gggg'@'hostlocal' identified by '123';
#在本机上创建⼀个密码为123的⽤户,只可在本机进⾏操作
create user 'alex'@'%' identified by '123';
#创建⼀个密码为123的alex⽤户,%表⽰所有⼈都可在任何机器上登陆
create user 'eva'@'192.168.20.%' identified by '123';
#创建⼀个密码为123的eva⽤户,只有在该局域⽹下的机器可登陆
#此时的⽤户若想登陆,必须输⼊创建⽤户的计算机的ip
mysql -h192.168.20.97 -ueva -p123;
  为了使新创建的⽤户有权限对数据库进⾏操作(增删改查,insert  delete  alter  select),我们需要对该⽤户进⾏授权。如⼀般⽤户只可查看数据库⾥的库中的内容或者只让其查看某个表的内容,或者赋予某个⽤户可以修改数据的权利,就得赋予其⼀定的权限。注意,权限是你创建时给予的,你可以为了防⽌数据被篡改或者防⽌数据泄露只赋予其很少的权限。
  这⾥我们需要了解⼀个关于数据库内容的知识点。数据库管理系统,即软件(如mysql,oracle等)管理数据库(即⽂件夹),数据库整理表(即⽂件夹中有⽂件),表⼜是存放记录的(即⽂件中有⽂件内容),所以赋予权限时也需要进⾏分层。
级别1:若你赋予其对数据库的某项操作权限,意味着该⽤户就可以对数据库中所有的库,以及每个库中所有的表,每个表中所有的记录进⾏该项操作;
级别2:若你只赋予其对某个指定的库的某项操作权限,那就意味着该⽤户只可对该指定的库,以及该库中所有的表,该库中的表中所有的记录进⾏该项操作;
级别3:若你只赋予其对某个指定的库中指定的表进⾏某项操作权限,那就意味着该⽤户只可对该指定的库中的指定的表,以及该表中的所有记录进⾏该项操作;
级别4:若你只赋予其对某个指定的库中的指定的表中的指定的某项记录进⾏某项操作的权限,那就意味着该⽤户只仅仅可对该记录进⾏该项操作
#创建对不同级别拥有操作权限的⽤户,下⾯⽤查看操作select举例
#级别1:对所有库拥有权限
grant select on *.* to 'gggg1'@'localhost' identified by '123';
#级别2:对指定库db1拥有权限
grant select on db1.* to 'gggg2'@'localhost' identified' by '123';
#级别3:对指定库下的指定表拥有权限db1.t1
grant select on db1.t1 to 'gggg3'@'localhost' identified by '123';
#级别4:仅对某字段拥有权限
grant select  (id,name) on db1.ti to 'gggg4'@'localhost' identified by '123';#赋予查看id和name的权限
index与match函数
grant select (id,name),update (name) on db1.t1 to 'gggg5'@'localhost' identified by '123';
#赋予查看id和name的权限,并赋予修改name的权限
#删除权限
revoke select on db1.* to 'gggg5'@'%';
#修改完权限后记得⼿动刷新
flush privileges;
上述的 select 可根据需要换成以下任何权限:
权限指定符允许的操作
alter修改表和索引
源代码维生create创建数据库和表
delete删除表中已有记录
drop删除数据库和表
index创建或删除索引
insert插⼊数据
mysql workbench连接使用的详细图解reference
select查询表记录
update更新表记录
file读写服务器上的⽂件
process查看、杀死线程
reload重新授权表或清空⽇志、主机缓存、表
缓存
shutdown关机
all
privileges所有权限
usage⽆权限
基本增删改查操作
  以上是创建拥有相应权限的⽤户的操作。那么在拥有权限后,登陆该⽤户就可以对数据库进⾏操作了,对数据库的操作⼜分为对库(⽂件夹)的操作、对表(⽂件)的操作和对记录(⽂件内容)的操作。操作即增删改查。
#对库进⾏操作(⽂件夹)
mysql查看所有存储过程#增:
create database db1 charset utf8;#在data⽬录下新增⼀个db1库(db1⽂件夹)
#查:
show databases;#查看data⽬录下所有的库(所有的⽂件夹)
show create database db1;#查看新创建的db1库
#改:
alter database db1 charset gbk;#将db1的字符编码改为gbk
#删:
drop database db1;#删除data⽬录下的db1库
#对表进⾏操作(⽂件)
#⾸先要切换到指定⽂件夹下:use db1;
#增:
create table t1(id int,name char(10));#新建⼀个表,表中的字段必须表上数据类型,char表⽰字符串
create table t1(id int,name char(10))engine=innodb,default charset gbk;
#新建⼀个表,可以指定引擎,不指定的话默认的引擎就是innodb,default是指定其字符编码,若不指定默认为该库的字符编码
#查:
show tables;#查看所有表
show create table t1;#查看创建的表
desc t1;#查看表结构,⽐show好⽤
#改:
alter table t1 add age int;#给t1表加⼀个字段age,仍需指定数据类型
alter table t1 modify name char(12);#修改name数据类型的字节数
#删:
drop table t1;
#对记录进⾏操作(⽂件内容)
#增:
insert into db1.t1 values(1,'gggg1'),(2,'gggg2');#按位置传参
insert into db1.t1 (name) values('gggg'),('alex');#指定只传name,id默认为null
#查:
select * from t1;#查看t1中全部记录
select name,id from t1;#查看表中指定字段
#改:
update t1 set name='SB' where id=4;#将id为4的字段的name修改为SB
update t1 set name='SB' where name='alex';#将name为alex的字段的name修改为SB
update t1 set name='';#将name的值都修改为空,即清空所有name的内容
linux基本命令并配图#删:
delete from t1 where id=4;#删除指定字段
#清空:
delete from t1;将记录全部删掉,也可认为是清空
truncate t1;#真正意义上的清空,当数据量较⼤时,这个的速度⽐delete快,推荐使⽤这个清空⽅式
  这⾥补充⼀个内容,当我们要向表中新增记录时,每次都要输⼊id和name,⽽id是顺序增加的,每次⾃⼰⼿动加⼊会显得疲劳,这⾥我们就可以⽤到⾃增id的⽅式
#⾃增id(就是增加⼀个约束,该约束可以使系统⾃⼰添加id)
create table t1 (id int primary key auto_increment,name char(10));
#primary key的意思为主键,主键不为空且唯⼀
#在⼀个字段中只能哟⼀个主键,通常是id
create table t1 (id int not full unique,name char(10));
#not full unique的意思就是不为空且独⼀⽆⼆,所以该命令与上⾯作⽤⼀样,但推荐使⽤上者
#设定⾃增id后,增加字段就⽆需指定id
insert into t1(name) values ('gggg1'),('gggg2');#此时id会⾃动按序⽣成
最后说⼀下拷贝表结构的操作
#拷贝表结构
create table t2 select * from t1 where 1=2;#只拷贝表结构,不拷贝表内容
alter table t2 modify id int primary key auto_increment;#将表修改成⾃增id
表操作
  在MySQL中我们⽤到最多的是对表的操作,表中数据的查询操作尤其是重中之重。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。