暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL5.7之DDL和DCL的应用

anyux 2020-02-22
387

大家好,我是anyux。上一节简单介绍了SQL的分类,包含4种分别是DDL(数据定义语言)、DCL(数据控制语言)、DML(数据操作语言)、DQL(数据查询语言)。

本节是对于SQL语句DDL和DCL操作演示。

DDL的应用

数据定义语言,相对于linux命令为创建目录、文件


DDL语句库的定义

库相当于一个目录,使用DDL语句可以创建库,删除库,修改库

 #-----创建数据库
 #-----校对规则可以不加,但字符集一定要设置
 create database zabbix charset utf8mb4 collate utf8mb4_bin;
 #-----查看数据库
 show databases;
 #-----查看建库语句
 show create database zabbix;
 #-----删除数据库(不代表生产操作)
 drop database zabbix;
 #-----修改数据库(修改字符集或校对规则)
 #-----注意,一定是从小向大修改,比如utf8--->utf8mb4
 #-----目标字符集一定是源字符集的严格超集
 alter database test charset utf8mb4;
 
复制

库定义规范

  1. 库名使用小写字符

  2. 库名不能以数字开头

  3. 不能是数据库内部的关键字

  4. 必须要设置字符集


DDL语句表的定义


 #-----建表
 #-----表名、列名、列属性、表属性
 create table `zabbix`.`student` (
 `id` int unsigned not null auto_increment comment '学号',
 `name` varchar(255) not null comment '姓名',
 `age` tinyint unsigned default 99 comment '年龄',
 `gender` enum('m','f','n') not null default 'n' comment '性别',
 `intime` datetime not null default now() comment 'intime',
 primary key (`id`)
 ) engine=innodb charset=utf8mb4 collate=utf8mb4_bin;
 
复制


列属性

列属性
列属性解释
primary key 主键约束,表中只能有一个,非空且唯一
auto_increment增长的列,一般配合主键使用
not null非空约束,必填项,尽量所有的列都非空,数字列尽量为0,字符串列默认为空格或有效字符如(null),避免空值
unique key唯一约束,不允许重复值
default一般配合not null 一起使用,作用是使用默认值
unsigned无符号,一般配合数字列,非负数
comment注释,描述


规范


  1. 表名小写字母,不能数字开头

  2. 不能是保留字符,尽量和业务有关的表名

  3. 选择合适的数据类型及长度

  4. 每个列设置not null + default,对于数字以0填充,对于字符使用空格或有效字符串填充

  5. 每个列必须要加注释

  6. 表必须设置存储引擎类型和字符集

  7. 主键列尽量是无关数字列,自增长,有顺序的列

  8. enum类型,不要保存数字,只能设置为字符串类型


DCL的应用


授权命令

grant 权限 on 作用目标 to 用户 identified by 密码 with grant option;


#-----给root用户所有库的所有权限,可以192.168.255.0/24ip端登录,并且给了用户授权权限

grant all on *.* to root@'192.168.255.%' identified by 'root' with grant option;


#-----给root用户wordpress库下所有表的增、删、改、查权限,并且只能本地登录

grant select,insert,update,delete,create on wordpress.* to root@'localhost' identified by 'root';
复制

作用目标:

通过作用目标的设置,可以灵活地设置用户权限,方便管理

#------第一个*的位置代表数据库,第二个*的位置代表数据表,*表示任意,*.*联起来就表示所有库的所有表,即对所有数据库权限管理

 *.*

#-----wordpress.*,表示wordpress数据库下的所有表

 wordpress.*

#-----wodpress.t1,表示wordpress数据库下的t1表

 wordpress.t1
复制

授权需求

  1. 创建一个管理员用户root,可以通过10网段,管理数据库

 grant all on *.* to root@'192.168.255.%' identified by 'root' with grant option;
复制
  1. 创建一个应用用户wordpress,可以通过192.168.255.0/24网段管理wordpress库下的所有表进行select,insert,update,delete操作

 grant select ,insert,update,delete on wordpress.* to wordpress@'192.168.255.%' identified by '123';
复制

回收权限

查看用户权限

 show grants for wordpress@'192.168.255.%';
复制


回收delete权限

 revoke delete on wordpress.* from wordpress@'192.168.255.%';
复制


回收授权权限

注意此处回收的是grant权限

 revoke grant option on *.* from root@'192.168.255.%';
复制


本节主要是对于SQL语句的DDL(数据定义语言)和DCL(数据控制语言)进行演示。其中如有不足还各位同学指出。下一节将对SQL语句的DML(数据操作语言)和DQL(数据查询语言)进行演示

文章转载自anyux,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论