• 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。

    权限列表说明:

    时刻与技术进步,每天一点滴,日久一大步!!! 本博客只为记录,用于学习,如有冒犯,请私信于我。
  • 相关阅读:
    MVC HTTP 错误 403.14
    web.config connectionStrings 数据库连接字符串的解释(转载)
    bootstrap div 弹出与关闭
    jquery操作select(取值,设置选中)
    VS2013使用EF6与mysql数据库
    php中创建和调用webservice接口示例
    java script 确认框
    mysql中判断记录是否存在方法比较
    根据Unicode编码用C#语言把它转换成汉字的代码
    微软架构师解读Windows Server 2008 R2新特性
  • 原文地址:https://www.cnblogs.com/myitnews/p/13672483.html
Copyright © 2020-2023  润新知