zoukankan      html  css  js  c++  java
  • 【数据库原理】之sql语言的分类(DDL、DML、DCL、DQL)


    • 基本概念篇

    SQL语言的4种分类(DDL、DML、DCL、DQL)

    对应的英文全程:data (definition、manipulation、control、query)language

    参考资料:

    https://www.cnblogs.com/kawashibara/p/8961646.html

    总结:

    DDL操作对象是库表

    DML、DQL操作对象是记录

    DCL操作对象是用户

    DDL包括:create,drop,alter

    create database/table/index/view

    drop database/table/index/view

    alter table

    create database qa_test;
    create database qa_test2;
    create database qa_test3;
    
    create table qa_test.t1(id int);
    create table qa_test.t2(id int primary key, id2 int);
    create table qa_test.t3(id int, id2 int, id3 int);
    
    create index idx_a on qa_test.t1(id);
    create unique index idx_a on qa_test.t3(id3);
    create view see_t1 as select * from qa_test.t1;
    
    alter  table qa_test.t1 drop index idx_a;
    alter  table qa_test.t1 add primary key(id);
    alter  table qa_test.t1 add id2 int;
    alter  table qa_test.t1 add id3 int;
    alter  table qa_test.t2 drop primary key(id);
    
    drop table qa_test.t2;
    drop database qa_test2;
    drop view see_t1;
    

      

    DML包括:insert,delete,update

    insert into ... values ...

    insert into ... select * from ...

    delete from .. where 

    delete from ...

    update ... set ... where ...

    update ... set ... 

    create database qa_ddl;
    create table qa_ddl.t(id int);
    insert into qa_ddl.t values(1),(2),(3);
    update qa_ddl.t set id = 10 where id >2;
    delete from qa_ddl.t where id = 1;
    create table qa_ddl.t2(id int, id2 int, id3 int);
    insert into qa_ddl.t2 values(1,2,3),(2,3,4);
    insert into qa_ddl.t2 select * from qa_ddl.t2;
    insert into qa_ddl.t2(id, id2) values (100,200);
    

    DCL包括:grant,revoke,commit,rollback

    DQL包括:select,from,where

     select * from ... where ...

    create database qa_ddl;
    create table qa_ddl.t(id int);
    insert into qa_ddl.t values(1),(2),(3);
    update qa_ddl.t set id = 10 where id >2;
    delete from qa_ddl.t where id = 1;
    create table qa_ddl.t2(id int, id2 int, id3 int);
    insert into qa_ddl.t2 values(1,2,3),(2,3,4);
    insert into qa_ddl.t2 select * from qa_ddl.t2;
    insert into qa_ddl.t2(id, id2) values (100,200);
    
    select * from qa_ddl.t2;
    

     数据库的log

    分类5个:err-log,general-log,bin-log,slow-log,relay-log

    有时候还有DDL log

    参考资料:

    https://www.cnblogs.com/f-ck-need-u/p/9001061.html#blog5

    https://dev.mysql.com/doc/refman/5.7/en/server-logs.html(mysql官方文档)

     这5种log都是什么用途?(下图摘自mysql官方文档)

    binlog在什么时候更新?

    mysql>flush logs;  执行后,关闭旧的binlog,打开新的binlog。

    my.cnf中的log参数配置

    #=============== [error/general/slow log options] ==============================================
    log-error-verbosity                     = 1
    log-error                               = /usr/local/nestdb_master/log/mysql.err      error-log的位置
    general-log                             = ON                                          允许记录general-log
    general-log-file                        = /usr/local/nestdb_master/log/mysql.log      general-log的位置
    slow-query-log                          = ON                                          允许记录error-log
    slow-query-log-file                     = /usr/local/nestdb_master/log/slow.log       error-log的位置
    long-query-time                         = 1              查询时间,如果查询小于等于1s,记录到general-log,如果大于1s,记录到error-log
    log-queries-not-using-indexes           = 1      
    
    mysql> show global variables like 'log_warnings'; 
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | log_warnings  | 0     |     0:warning信息不记录到error-log中;1:warning信息记录到error-log中;大于1:各类告警信息写入到error-log中。
    +---------------+-------+
    1 row in set (0.01 sec)
    

     bin-log配置

    #------------------> (2) binlog <---------------------------------------------------------------
    log-bin                                 = mysql-bin          bin-log的前缀,当每次flush logs;重启mysql,日志文件达到最大时,都会重新更新bin-log
    log-bin-index                           = mysql-bin.index    记录了所有bin-log的文件名
    sync-binlog                             = 1000                    
    binlog-format                           = ROW
    binlog-cache-size                       = 1M
    max-binlog-size                         = 1G     bin-log文件最大值,超过1G,变更bin-log
    expire-logs-days                        = 7
    

     查看bin-log

    [root@vm10-0-0-8 bin]# ./mysqlbinlog   ../var/mysql-bin.000005
    /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
    /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
    DELIMITER /*!*/;
    # at 4
    #191114 16:53:43 server id 9988123  end_log_pos 123 CRC32 0xb80d9c2f    Start: binlog v 4, server v 5.7.27-debug-log created 191114 16:53:43
    BINLOG '
    FxbNXQ8baJgAdwAAAHsAAAAAAAQANS43LjI3LWRlYnVnLWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAXwAEGggAAAAICAgCAAAACgoKKioAEjQA
    AS+cDbg=
    '/*!*/;
    # at 123
    #191114 16:53:43 server id 9988123  end_log_pos 154 CRC32 0x0020c8cb    Previous-GTIDs
    # [empty]
    # at 154
    #191115 13:17:42 server id 9988123  end_log_pos 219 CRC32 0x80e8fd47    Anonymous_GTID  last_committed=0        sequence_number=1       rbr_only=no
    SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
    # at 219
    #191115 13:17:42 server id 9988123  end_log_pos 313 CRC32 0x4219fe85    Query   thread_id=73    exec_time=0     error_code=0
    SET TIMESTAMP=1573795062/*!*/;
    SET @@session.pseudo_thread_id=73/*!*/;
    SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
    SET @@session.sql_mode=1436549152/*!*/;
    SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
    /*!C utf8 *//*!*/;
    SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;
    SET @@session.lc_time_names=0/*!*/;
    SET @@session.collation_database=DEFAULT/*!*/;
    create database lr_1
    /*!*/;
    # at 313
    #191115 13:17:53 server id 9988123  end_log_pos 378 CRC32 0xbfbb5fc0    Anonymous_GTID  last_committed=1        sequence_number=2       rbr_only=no
    SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
    # at 378
    #191115 13:17:53 server id 9988123  end_log_pos 478 CRC32 0x8217330c    Query   thread_id=73    exec_time=0     error_code=0
    SET TIMESTAMP=1573795073/*!*/;
    create table lr_1.test(id int)
    /*!*/;
    # at 478
    #191115 13:18:08 server id 9988123  end_log_pos 543 CRC32 0xf0bb2b47    Anonymous_GTID  last_committed=2        sequence_number=3       rbr_only=yes
    /*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
    SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
    # at 543
    #191115 13:18:08 server id 9988123  end_log_pos 611 CRC32 0xdf8eb376    Query   thread_id=73    exec_time=0     error_code=0
    SET TIMESTAMP=1573795088/*!*/;
    BEGIN
    /*!*/;
    # at 611
    #191115 13:18:08 server id 9988123  end_log_pos 658 CRC32 0xef41195b    Table_map: `lr_1`.`test` mapped to number 109
    # at 658
    #191115 13:18:08 server id 9988123  end_log_pos 698 CRC32 0xde1f9e3c    Write_rows: table id 109 flags: STMT_END_F
    
    BINLOG '
    EDXOXRMbaJgALwAAAJICAAAAAG0AAAAAAAEABGxyXzEABHRlc3QAAQMAAVsZQe8=
    EDXOXR4baJgAKAAAALoCAAAAAG0AAAAAAAEAAgAB//4BAAAAPJ4f3g==
    '/*!*/;
    # at 698
    #191115 13:18:08 server id 9988123  end_log_pos 729 CRC32 0x0884f90f    Xid = 63
    COMMIT/*!*/;
    # at 729
    #191115 13:18:19 server id 9988123  end_log_pos 776 CRC32 0x7e8d61f6    Rotate to mysql-bin.000006  pos: 4
    SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
    DELIMITER ;
    # End of log file
    /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
    /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
    

    大道至简
  • 相关阅读:
    php 如何提升
    PHP判断客户端是否使用代理服务器及其匿名级别
    前端基础之BMO和DOM
    前端基础之JavaScript
    前端基础之CSS标签样式
    前端基础之CSS选择器
    前端基础之HTML标签
    面向对象之反射 元类
    面向对象之多态以及魔法函数
    面向对象之封装
  • 原文地址:https://www.cnblogs.com/liurong07/p/11858195.html
Copyright © 2011-2022 走看看