zoukankan      html  css  js  c++  java
  • MySQL之sql语句

    关系型数据库的常见组件:

    数据库:database  
    表:table  
      行:row
      列:column
    索引:index  
    视图:view
    用户:user
    权限:privileges

    存储过程:procedure
    存储函数:function
    触发器:trigger
    事件调度器:event scheduler

    SQL语句:

    DDL:Data Defination Language,数据定义语言  //创建或删除数据库组件的
      CREATE,DROP,ALTER
    DML:Data Manipulation Language,数据操纵语言  //主要是向表中插入数据,删除数据,修改数据,查询数据
      INSERT(REPLACE),DELETE,UPDATA,SELECT
    DCL: Data Control Language,数据控制语言,主要用来控制权限,授权和收回权限等
      GRANT,REVOKE  
    数据类型:
        字符型
        定长字符型:CHAR(#),BINARY(#)  //varchar最多65535个  
        变长字符型:VARCHAR(#),VARBINARY(#)  //char最多255个字符
        
        对象存储:
          TEXT:变长的,不区分大小写,text最大可存储44G个字符
          BLOB:变长的,区分字符大小写
        内置类型:
          ENUM
          SET 数值
        精确数值型
          整型:int
            tinyint:1bytes
            smallint:2bytes
            mediumint:3bytes
            int:4bytes
            bigint:8bytes
          十进制:decimal
        近似数值型
          单精度浮点型
            float
          双精度浮点型
            double
      日期时间型:
        日期:DATE
        时间:TIME
        日期时间:DATETIME
        时间戳:TIMETAMP
        年份:YEAR(2),YEAR(4)
    修饰符:
      所有类型适用:
        NOT NULL  //非空约束
        DEFAULT VALUE    //设定默认值
        PRIMARY KEY  //定义单个字段为主键
        UNIQUE KEY  //定义单个字段受唯一性约束
      数值型使用:
        UNSIGNED  //无符号,仅用来表示正数
        AUTO_INCREMENT  //自增长

    DDL:CREATE,DRRP,ALTER

    数据库:
      CREATE DATABASE|SCHEMA [IF NOT EXISTS] 'DB_NAME';
      DROP DATABASE|SCHEMA [IF EXISTX] 'DB_NAME';  
        CHARACTER SET [=] 'character set name'  //指明字符集
        COLLATE [=] 'collate name'  //指明排序规则
        查看支持的所有字符集:SHOW CHARACTER SET; 
        查看支持的所有排序规则:SHOW COLLATION;  
        查看数据库:SHOW DATABASES;
    获取命令使用帮助:
      mysql> HELP KEYWORD   比如:HELP CREATE DATABASE;

     

    表:
      创建表:
      CREATE TABLE [IF NOT EXISTS] tb_name (col1 datatype 修饰符,col2 datatype 修饰符) ENGINE='engine_name'
      col1 type1
      PRIMARY KEY(col1,col2,...)
      INDEX(col1,...)
      UNIQUE KEY(col1,...)
    主键示例:
    mysql> USE testdb; Database changed mysql> CREATE table tb1 (id int UNSIGNED NOT NULL PRIMARY KEY,name VARCHAR(20) NOT NULL,age tinyint UNSIGNED);  //指明单个主键 mysql> CREATE table tb2 (id int UNSIGNED NOT NULL,name VARCHAR(20) NOT NULL,age tinyint UNSIGNED,PRIMARY KEY(id,name));  //组合主键
      查看所有的引擎:SHOW ENGINES;
      查看表:SHOW TABLES [FROM db_name];
      查看表结构:DESC [db_name.]tb_name;
    获取帮助:
      mysql> HELP CREATE TABLE;
    查看创建命令:
      mysql> SHOW CREATE TABLE  tb1_name;

      查看表状态:

        SHOW TABLE STATUS LIKE 'tb1_name'G;  //G表示竖排查看

      删除表:

        DROP TABLE [IF EXISTS] tbl_name;

      修改表

        ALTER TABLE 'tbl_name'

    字段:
      添加字段:add
        ADD col1 data_type [FIRST|AFTER col_name]
         示例:mysql> ALTER TABLE tb1 ADD gender ENUM('m','f');
      删除字段:drop   
        示例:mysql> ALTER TABLE tb1 DROP sid;
      修改字段:alter,change,modify  //如果修改字段名称使用change,修改字段的属性定义使用modify,删除字段的默认值使用alter
        示例:将字段名id改为sid
        mysql> ALTER TABLE tb1 CHANGE id sid int UNSIGNED NOT NULL; 
    索引
      添加索引:add
       示例;
         添加唯一键索引:mysql> ALTER TABLE tb1 ADD UNIQUE KEY(name);
         添加索引:mysql> ALTER TABLE tb1 ADD INDEX(age);
      删除索引: drop
        示例:mysql> ALTER TABLE tb1 DROP age;
    查看表上的索引:SHOW INDEXES FROM [db.name.]tbl_name;
    表选项

     

    索引:

     

    索引是特殊数据结构;定义在查找时作为查找条件的字段;

     

    索引:可以有索引名称
    创建索引:
        CREATE INDEX index_name ON tbl_name (index_col_name,...);
    删除索引:
      DROP INDEX index_name ON tbl_name;
       示例:DROP INDEX name ON tb1;

    DML:INSERT,DELETE,SELECT,UPDATE

    INSERT INTO:
      INSERT [INTO] tbl_name [(col_name,...)] {VALUES|VALUE}(val1,...),(...),...
    示例:mysql> INSERT INTO tb1 VALUES(1,'yang guo','m'),(2,'guo xiang','f');
    DELETE:
      DELETE FROM tb1_name [WHERE clause] [ORDER BY 'col_name' [DESC]][LIMIT [m,]n];  
    SELECT:
      SELECT col1,col2,... FROM tbl_name [WHERE clause][ORDER BY 'col_name' [DESC]][LIMIT [m,]n];  
        字段表示法:
          *:所有字段
          as:字段别名,col1 AS alias1;

        WHERE clause"
          操作符:
            >,<,>=,<=,==,!=
            BETWEEN ... AND ...
            LIKE:
              %:任意长度的任意字符
              _:任意单个字符
            RLIKE:基于正则表达式匹配
            IS NULL
            IS NOT NULL
              
          条件逻辑操作:
            and
            or
            not
    UPDATE:
      UPDATE tbl_name SET col1=new_val1,col2=new_val2,... [WHERE clause] [ORDER BY 'col_name' [DESC]][LIMIT [m,]n];

    用户账号及权限管理:

    用户账号:'user'@'host'
      user:用户名   host:此用户访问mysqld服务时允许通过哪些主机远程创建连接;     host可以使用IP、网络地址、主机名、通配符(%和_);
    禁止检查主机名:
    my.cnf,[mysqld]
    skip_name_resolve=yes

    创建用户账号:

    CREATE USER 'username'@'host' [IDENTIFIED BY 'password'];
    示例:mysql> CREATE USER 'wpuser'@'%' IDENTIFIED BY 'wpp@ss';
    远程登录 # mysql -uwpuser -h192.168.2.20 -p

    删除用户:

    DROP USER 'username'@'host' ...;

    授权:

    权限:管理权限、数据库、表、字段、存储例程

    GRANT priv_type,... ON [object_type] db_name.tb_name TO 'user'@'hsot' [IDENTIFIED BY 'password'][WITH GRANT OPTION];
      priv_type:ALL [PRIVILEGES]
      db_name.tb_name:
        *.*:所有库的所有表
        db_name.*:指定库的所有表
        db_name.tb_name:指定库的指定表
        db_name.routine_name:db_name后面跟的是一个存储例程或存储函数
      WITH GRANT OPTION:user获得的授权能够转授给其他用户
    授权示例:
    GRANT SELECT,DELETE ON testdb.* TO 'testuser'@'%' IDENTIFIED BY 'testpass';

    查看指定用户获得的授权:

    SHOW GRANTS FOR 'user'@'host';  //比如:
    示例:
    SHOW GRANTS FOR 'wpuser'@'%';
    SHOW GRANTS FOR CURRENT_USER;    //查看当前用户的授权

    回收权限:

    REVOKE priv_type,...ON db_name.tb_name FROM 'user'@'host';
    示例:REVOKE DELETE ON testdb.* FROM 'testuser'@'%';

    注意:MariaDB服务进程启动时会读取mysql库中的所有授权表至内存中

    (1)GRANT或REVOKE等执行权限操作会保存于表中,MariaDB的服务进程会自动重读授权表
    (2)对于不能够或不能及时重读授权表的命令,可手动让MariaDB的服务进程重读授权表
       mysql> FLUSH PRIVILEGES;

     

  • 相关阅读:
    模拟登录
    服务器的
    多线程爬虫
    新浪微博
    。。
    ** turtle模块和random模块
    收藏链接python--向大神学习
    126邮箱发送邮件测试1
    LabVIEW版本控制(转)
    正交编码器单端转差分
  • 原文地址:https://www.cnblogs.com/ckh2014/p/14253588.html
Copyright © 2011-2022 走看看