SQL基础

作者: BigfaceMonster | 来源:发表于2017-02-06 16:01 被阅读56次

    MySQL学习笔记(1)

    SQL基础

    安装:推荐下载官方rpm包安装
    配置:执行mysql --help可查看相关相关配置信息,服务所使用配置文件的位置可以通过mysql --help|grep my.cnf查看。
    服务:启动服务mysqld_safe &,停止服务mysqladmin -uroot shutdown -p

    client连接后?可以查看client端信息,其中\e结合\g(\G)很好用

    修改表(DDL)

    • 修改表类型
    ALTER TABLE tablename MODIFY [COLUMN] column_definition [FIRST | AFTER col_name]
    
    • 增加表字段
    ALTER TABLE tablename ADD [COLUMN] column_definition [FIRST | AFTER col_name]
    
    • 删除表字段
    ALTER TABLE tablename DROP [COLUMN] col_name
    
    • 修改字段名
    ALTER TABLE tablename CHANGE [COLUMN] old_col_name column_definition [FIRST | AFTER col_name]
    

    change和modify都可以修改表的定义,但change需写两次列名,优点是能改列名,modify不能。

    • 修改字段排列顺序,前面介绍的字段增加和修改语法都有一个可选项 first|after column_name,该选项用来修改字段在表中的位置。

    CHANGE/FIRST|AFTER这些关键字都是属于mysql在标准sql上的扩展。

    • 更改表名
    ALTER TABLE tablename RENAME [TO] new_tablename
    

    DML语句

    • 插入记录(一次插入多条--批量插入,用逗号分隔)
    INSERT INTO tablename(field1,field2,...,fieldn) VALUES(value1,value2,...,valuen) [,(value1,value2,...,valuen),...,(value1,value2,...,valuen)];
    

    在插入大量记录时,批量插入的特性节省了很多的网络开销,提高了插入效率。

    • 更新记录 & 夺标更新
    UPDATE tablename SET field1=value1,field2=value2,...,fieldn=valuen [WHERE CONDITION]
    或者
    UPDATE t1,t2,...,tn set t1.filed1=expr1,...,tn.filedn=exprn [WHERE CONDITION]
    
    • 删除表记录 & 多表删除
    DELETE FROM tablename [WHERE CONDITION]
    多表删除
    DELETE t1,t2,...,tn FROM t1,t2,...,tn [WHERE CONDITIO
    

    执行删除操作之前强烈建议先用select查确定好where条件,最后添加delete。不管是单表还是多表,没有where条件将会删除所有记录。

    查询记录

    • 聚合
    SELECT [field1,field2,...,fieldn] fun_name
        FROM tablename 
        [WHERE where_contition] 
        [GROUP BY field1,field2,...,fieldn] 
        [WITH ROLLUP]
        [HANVING where_contition]
    
    • fun_name表示聚合操作:sum,count,max,min
    • GROUP BY 表示要进行分类聚合的字段
    • WITH ROLLUP 表示是否对分类聚合后的结果汇总
    • HAVING 对分类结果进行条件过滤

    having对聚合结果进行条件过滤,where在聚合前对记录过滤,如逻辑允许,尽可能用where先过滤记录,结果集减少对聚合效率会有提高。

    • 连接查询
    SELECT [filed1,...,filedn] FROM table1name [LEFT | RIGHT] JOIN table2name ON CONDITION
    
    • 子查询

      查询时需要的条件是另一个select语句的结果,用子查询。子查询关键字主要包括in、not in、=、!=、exists、not exists等。

      在mysql4.1以前不支持子查询,需要用连接查询来实现子查询。表连接在多数情况下优于子查询。

    • 联合查询

        SELECT * FROM t1
        UNION | UNION ALL
        SELECT * FROM t2
        ...
        UNION | UNION ALL
        SELECT * FROM tn
    
    > UNION和UNION ALL的主要区别是UNION ALL将结果集直接合并在一起,而UNION会进行一次DISTINCT。
    

    DCL语句

    • 创建用户并且分配权限
        GRANT func[INSERT|SELECT] ON dbname.table[*] to 'USERNAME'@'ADDR' IDENTIFIED BY 'PASSWD'
    
    • 回收权限
    REVOKE table ON tablename.* from 'USER'@'PASSWD'
    
    > 注意使用mysql的帮助文档,即为`? content`。
    
    • 查询元数据信息

      mysql5.0以后提供了一个information_schema,用来记录mysql中的元数据信息,该数据库为一个虚拟数据库,物理上不存在目录和文件,库中show tables显示的‘表’实际上都是视图

    Github传送门

    相关文章

      网友评论

        本文标题:SQL基础

        本文链接:https://www.haomeiwen.com/subject/uhhuittx.html