MySQL中的DDL(数据定义语言)和DCL(数据控制语言)

SQL语言一共分为4大类:数据定义语言DDL,数据操纵语言DML,数据查询语言DQL,数据控制语言DCL 。

我在这里简单介绍下DDL和DCL。

一、数据定义语言DDL(Data Definition Language)

数据库操作

创建数据库:create database school;

删除数据库:drop database school;

切换数据库:use school;

创建表:create table student(

      id int(4) primary key auto_increment,

      name varchar(20),

      score int(3)

    );

查看数据库里存在的表:show tables;

varchar类型的长度是可变的,创建表时指定了最大长度,定义时,其最大值可以取0-65535之间的任意值,但记录在这个范围内,使用多少分配多少,varchar类型实际占用空间为字符串的实际长度加1。这样,可有效节约系统空间。varchar是mysql的特有的数据类型。

char类型的长度是固定的,在创建表时就指定了,其长度可以是0-255之间的任意值。虽然char占用的空间比较大,但它的处理速度快。

表操作

修改表:alter table student rename (to) teacher;

    alter table student add password varchar(20);

    alter table student change password pwd varchar(20);

    alter table student modify pwd int;

    alter table student drop pwd;

删除表:drop table student;

查看生成表的sql语句:show create table student;

查看表结构:desc student;

复制表:

-- 复制表结构
create table 新表 select * from 旧表 where 1=2;
-- 或
create table 新表 like 旧表;

--复制表结构和数据
create table 新表 select * from 旧表;

删除表:drop table 表名;

清空表:truncate table 表名;

TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。
TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。

TRUNCATE,DELETE,DROP放在一起比较:
TRUNCATE TABLE:删除内容、释放空间但不删除定义。
DELETE TABLE:删除内容不删除定义,不释放空间。
DROP TABLE:删除内容和定义,释放空间。

索引操作

添加主键索引
ALTER TABLE `table_name` ADD PRIMARY KEY (`column`)

添加唯一索引
ALTER TABLE `table_name` ADD UNIQUE (`column`)

添加全文索引
ALTER TABLE `table_name` ADD FULLTEXT (`column`)

添加普通索引
ALTER TABLE `table_name` ADD INDEX index_name (`column` )

添加组合索引
ALTER TABLE `table_name` ADD INDEX index_name (`column1`, `column2`, `column3`)

-- 删除索引

drop index indexname on tablename;

-- 查看索引

show index from tablename;

二、数据控制语言DCL(Data Control Language)  

数据控制语言DCL用来授予或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果,对数据库实行监视等。

DCL 语句主要是DBA 用来管理系统中的对象权限时所使用,一般的开发人员很少使用。

创建用户

需要使用root用户登录之后进行操作。

创建用户的命令为:create user 用户名@xxx identified by 密码;
其中xxx表示创建的用户使用的IP地址,可以设置为localhost(代表本机)或者'%'(代表允许所有IP地址登录)。

给用户授权

创建用户之后,可以使用新用户进行登录,查看数据库只有系统自带的数据库,想要操作自己创建的数据库还需要root用户对新用户进行授权

给用户授权的命令为:grant 权限1,权限2,........,权限n on 数据库名.* to 用户名@IP;
上面命令的含义是将数据库的n个权限授予用户
如果是将操作数据库的所有的权限授予用户,命令为:grant all on 数据库名.* to 用户名@IP;

  • all privileges:表示将所有权限授予给用户。也可指定具体的权限,如:SELECT、CREATE、DROP等。
  • on:表示这些权限对哪些数据库和表生效,格式:数据库名.表名,这里写“*”表示所有数据库,所有表。如果我要指定将权限应用到test库的user表中,可以这么写:test.user。
  • to:将权限授予哪个用户。格式:”用户名”@”登录IP或域名”。%表示没有限制,在任何主机都可以登录。注意:本机时,不要使用127.0.0.1, 否则授权用户登录时会报1045。
  • identified by:指定用户的登录密码。
  • with grant option:在授权语句末尾加上该选项,表示允许用户将自己的权限授权给其它用户。

授权后刷下权限:flush privileges;

撤销授权

当需要限制新用户操作数据库的权限时,root用户可以撤销已授予用户的某些权限。

撤销权限的命令为:revoke 权限1,权限2,........,权限n on 数据库名.* from  用户名@IP;

例:删除linhw这个用户的create权限,该用户将不能创建数据库和表:

revoke create on *.* from 'linhw@localhost';
flush privileges;

查看用户的权限

root用户查看用户权限的命令为:show  grants  for  用户名@IP;

删除用户

root用户删除用户的命令为:drop  user  用户名@IP;

用户重命名

rename user 'test3'@'%' to 'test1'@'%';

修改密码

(1)更新mysql.user表:
-- mysql5.7之前
UPDATE USER SET PASSWORD=password('1234567') WHERE USER='root';
-- mysql5.7之后
UPDATE USER SET authentication_string=password('1234567') WHERE USER='root';

(2)使用set password 命令

-- root 用户名
-- 登录地址
-- 123456为新密码
set password for 'root'@'localhost'=password('123456');

(3)mysqladmin

语法:mysqladmin -u用户名 -p旧的密码 password 新密码

mysqladmin -uroot -p123456 password 1234abcd

注意:mysqladmin位于mysql安装目录的bin目录下

mysql数据库中的3个权限表:user 、db、 host。

 

权限列表说明:

 

posted @ 2020-09-15 13:03  codedot  阅读(397)  评论(0编辑  收藏  举报