zoukankan      html  css  js  c++  java
  • SQL语言

    SQL(Structure Query Language)语言是数据库的核心语言,主要介绍其中3大类:数据定义语言DDL,数据操纵语言DML,数据控制语言DCL。

      DDL:数据定义语言,主要用于管理数据库组件,例如表、索引、视图、用户、存储过程,命令有CREATE、ALTER、DROP等;
      DML:数据操纵语言,主要用管理表中的数据,实现数据的增、删、改、查,命令有INSERT, DELETE, UPDATE, SELECT等;
      DCL:数据控制语言,用来授予或回收访问数据库的某种特权,命令有GRANT, REVOKE等;

    DDL

     DDL是对数据库内部的对象进行创建、删除、修改的操作语言,它和DML语言的最大区别是:DML 只是对表内部数据的操作,而不涉及到表的定义、结构的修改。

    • 创建数据库

        CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name;
        注意:创建数据库时可以指明字符集跟排序规则:
          [DEFAULT] CHARACTER SET [=] charset_name (指明字符集)
          [DEFAULT] COLLATE [=] collation_name (排序规则)
          查看支持的所有字符集:SHOW CHARACTER SET
          查看支持的所有排序规则:SHOW COLLATION

        示例:CREATE DATABASE IF NOT EXISTS students CHARACTER SET utf8 COLLATE utf8_general_ci; (创建字符集为utf8的students数据库)
          SHOW CREATE DATABASE students; (查看自己创建的数据库相关信息)
          SHOW DATABASES; (显示所有数据库)
          USE students; (使用students数据库)

    • 修改数据库

        ALTER {DATABASE | SCHEMA} [db_name];
          [DEFAULT] CHARACTER SET [=] charset_name;
          [DEFAULT] COLLATE [=] collation_name;

        示例:ALTER DATABASE students CHARACTER SET gbk COLLATE gbk_chinese_ci; (修改数据库字符集)

    • 删除数据库

        DROP {DATABASE | SCHEMA} [IF EXISTS] db_name;

        示例:DROP DATABASE IF EXISTS students; (删除数据库)

    • 查看数据库

        SHOW DATABASES LIKE  '';

        示例:SHOW DATABASES LIKE '%db%'; (查看数据库名中包含'db'的数据库)

    • 创建表

        CREATE TABLE [IF NOT EXISTS] tbl_name (create_defination) [table_options]
        其中create_defination可以包含字段、键、索引:
          字段:col_name data_type
          键:
            PRIMARY KEY (col1, col2, ...)
            UNIQUE KEY (col1, col2,...)
            FOREIGN KEY (column)
          索引:
            KEY|INDEX [index_name] (col1, col2, ...)
        其中table_options可以包含存储引擎:
          ENGINE [=] engine_name
          查看数据库支持的所有存储引擎类型:mysql> SHOW ENGINES;
          查看某表的存储引擎类型:mysql> SHOW TABLE STATUS [LIKE] tbl_name;

        示例:CREATE TABLE students(id int auto_increment,name varchar(20) not null,age tinyint unsigned,sex tinyint(1) not null default 1,subject_name varchar(20) not null,subject_no smallint not null,primary key(id)); (创建students表)
          SHOW TABLES; (查看数据库中所有的表)
          DESC students; (查看students表结构)
          SHOW TABLE STATUS like 'students'G; (查看表信息)

    • 修改表 

        ALTER [ ONLINE|OFFLINE] [IGNORE] TABLE tbl_name [alter_specification[,alter_specification] ...]
        其中 alter_specification:
          字段:
            添加:ADD [COLUMN] col_name data_type [ FIRST|AFTER col_name ]
            删除:DROP [COLUMN] col_name
            修改:
              CHANGE [COLUMN] old_col_name new_col_name column_definition [ FIRST|AFTER col_name ]
              MODIFY [COLUMN] col_name column_definition [ FIRST|AFTER col_name]
            键:
              添加:ADD { PRIMARY|UNIQUE|FOREIGN } KEY (col1,col2,...)
              删除:
                主键:DROP PRIMARY KEY
                外键:DROP FOREIGN KEY fk_symbol
            索引:
              添加:ADD { INDEX|KEY } [index_name] (col1,col2,...)
              删除:DROP { INDEX|KEY } index_name
              查看表上的索引的信息:mysql> SHOW INDEXES FROM tbl_name;
            表选项:
              ENGINE [=] engine_name
              RENAME new_tbl_name

          示例:ALTER TABLE students RENAME student; (重命名表)
            ALTER TABLE student ADD subject_score smallint; (添加subject_score字段)
            ALTER TABLE student DROP age; (删除age字段)
            ALTER TABLE student modify subject_score smallint not null; (修改subject_score字段数据类型)
            ALTER TABLE student CHANGE sex gender tinyint(1) not null default 1; (变更sex字段为gender字段)
            ALTER TABLE student ADD index id_name (id,name); (添加索引信息id_name)
            SHOW INDEXES from studentG; (查看student表索引信息)

    •  删除表

        DROP TABLE [IF EXISTS] tbl_name[,tbl_name] ...

        示例:DROP TABLE IF EXISTS student; (删除表)

    • 索引管理
      • 创建索引

          CREATE [ UNIQUE|FULLTEXT|SPATIAL ] INDEX index_name [ BTREE|HASH ] ON tbl_name (col1,col2, ...)

            示例:CREATE index id_name ON student(id,name); (创建id_name索引)

      • 删除索引

          DROP INDEX index_name ON tbl_name

            示例:DROP index id_name ON student; (删除索引id_name)

    DML

    DML 操作是指对数据库中表记录的操作,主要包括表记录的插入(insert)、更新(update)、删除(delete)和查询(select)。

    • 插入数据

      INSERT [INTO] tbl_name [(col1, ...)] { VALUES|VALUE }(val1, ...),(...),...
      注意:字符型数据要加引号,数值型数据不能加引号。

      示例:INSERT INTO student values(1,"Will",1,"C++",0001,70);
        INSERT INTO student VALUE(2,"Will",1,"C",0002,60),(3,"Walter",1,"C++",001,80);
        INSERT INTO student(name,subject_name,subject_no,subject_score) VALUES("Alex","C#",0003,75),("Walter","C",0002,67);
        INSERT INTO student(name,gender,subject_name,subject_no,subject_score) VALUES("Alice",0,"C++",0001,86),("Rose",0,"C#",0003,82);

    • 更新数据

      UPDATE [LOW_PRIORITY] [IGNORE] tbl_name SET col_name1=value1[,col_name2=value2]...[WHERE where_condition] [ORDER BY...] [LIMIT row_count]

      示例:UPDATE student set subject_no=2 WHERE id=4; (修改id=4的数据的subject_no字段数值为2)
        SELECT * FROM student ORDER BY subject_score desc; (降序查看表内容)
        SELECT * FROM student ORDER BY subject_score; (默认升序查看表内容)

    • 查看数据
      • SELECT * FROM tbl_name;
      • SELECT col1,col2,... FROM tbl_name; (注意:字段可以显示为别名,col_name AS col_alias)
      • SELECT col1,... FROM tbl_name WHERE clause;  (注意:WHERE clause用于指明挑选条件,如 age > 30)
        • 常用的操作符有:>, <, >=, <=, ==, !=, and, or, not, BETWEEN...AND..., LIKE 'PATTERN', IS NULL, IS NOT NULL
        • 通配符:%,任意长度的任意字符;_:任意单个字符;RLIKE 'PATTERN':正则表达式对字符串做模式匹配
      • SELECT col1,...FROM tbl_name [WHERE clause] ORDER BY col_name,col_name2,...[ASC|DESC];(ASC:升序;DESC: 降序)
    • 删除数据

      DELETE FROM tbl_name [WHERE where_condition] [ORDER BY ...] [LIMIT row_count]

      示例:DELETE FROM student WHERE subject_score<=70; (删除subject_score<=70的数据)

    DCL

    用于控制不同数据段直接的许可和访问级别的语句,定义了数据库、表、字段、用户的访问权限和安全级别。

    • 创建用户

      CREATE USER 'username'@'host' [IDENTIFIED BY 'password'];

      示例:CREATE USER 'test'@'192.168.4.%' IDENTIFIED BY '123456'; (创建只允许)
        SELECT User,Host,Password FROM mysql.user; (查看用户)

    • 删除用户

      DROP USER 'user'@'host' [,user@host]...

      示例:DROP USER 'test'@'192.168.4.%';

    • 授权

      GRANT priv_type,... ON db_name.tbl_name TO 'user'@'host' [IDENTIFIED BY 'password'];

      其中 priv_type: ALL[PRIVILEGES]
        db_name.tbl_name:
            *.*:所有库的所有表
            db_name.*:指定库的所有表
            db_name.tbl_name:指定库的特定表
            db_name.routine_name:指定库上的存储过程或存储函数
      查看指定用户所获得的授权:
          SHOW GRANTS FOR CURRENT_USER;

      示例:GRANT ALL ON studb.student to 'test'@'192.168.4.%'; (授权192.168.4网段的test用户所有操纵studb数据库的student表的权限)
        SHOW GRANTS FOR 'test'@'192.168.4.%'; (查看test用户的授权请看)

    • 回收权限

      REVOKE priv_type,... ON db_name.tbl_name FROM 'user'@'host';
      注意:MariaDB服务进程启动时,会读取mysql库的所有授权表至内存中:
        (1) GRANT或REVOKE命令等执行的权限操作会保存于表中,MariaDB此时一般会自动重读授权表,权限修改会立即生效;
        (2) 其它方式实现的权限修改,要想生效,必须手动运行FLUSH PRIVILEGES命令

      示例:REVOKE DELETE,UPDATE ON studb.student FROM 'test'@'192.168.4.%'; (回收test用户对student表的delete,update权限)

  • 相关阅读:
    SSE图像算法优化系列四:图像转置的SSE优化(支持8位、24位、32位),提速4-6倍
    SSE图像算法优化系列三:超高速导向滤波实现过程纪要(欢迎挑战)
    SSE图像算法优化系列二:高斯模糊算法的全面优化过程分享(二)。
    SSE图像算法优化系列二:高斯模糊算法的全面优化过程分享(一)。
    SSE图像算法优化系列一:一段BGR2Y的SIMD代码解析。
    13行代码实现最快速最高效的积分图像算法。
    超像素经典算法SLIC的代码的深度优化和分析。
    图像增强系列之图像自动去暗角算法。
    标准的基于欧式距离的模板匹配算法优源码化和实现(附源代码)。
    O(1)效率的表面模糊算法优化。
  • 原文地址:https://www.cnblogs.com/walk1314/p/9213432.html
Copyright © 2011-2022 走看看