• Mysql基本语句




    1. 数据库(datebase)

    保存有组织的数据的容器,简单理解为存放数据的仓库


    2. 数据库管理系统(database manage system)

    我们平常不是直接从数据库里面获取数据的,而是通过使用数据库管理系统来访问数据库从而获取数据的,这些软件称为DBMS(由于习惯我们平时所说的数据库指的就是数据库管理系统,容易被误导)


    3. 表(table)

    类似于文件夹,把数据分类放在同一个文件内,即放在同一个表中


    4. 列和行(column and row)

    表的结构类似于excel的表格,表列对应excel列,表行对应excel行


    5. 数据类型(data type)

    表中的每列(字段)都有自己的数据类型

    # 常见数据类型
    int
    float
    double
    char
    varchar
    datetime
    timestamp
    TEXT
    

    6. 三大范式

    第一范式:每个字段都是最小的单元,不可再分
    第二范式:满足第一范式,表中的字段必须完全依赖于全部主键而非部分主键
    第三范式:满足第二范式,非主键外的所有字段必须互不依赖


    7. 约束

    NOT NULL: 非空
    UNIQUE: 唯一性
    PRIMARY KEY: 主键
    FOREIGN KEY: 外键
    CHECK: 控制字段的值范围


    8. 超键、候选键、主键、外键

    主键:唯一标识数据的单个或多个字段

    外键:存在他表中的主键

    候选键:可以作为主键但没有设为主键的单个或多个字段

    超键:候选键的集合


    9. 表操作

    # 建表
    CREATE TABLE [IF NOT EXISTS] `runoob_tbl`(
       `runoob_id` INT UNSIGNED AUTO_INCREMENT,
       `runoob_title` VARCHAR(100) NOT NULL,
       `runoob_author` VARCHAR(40) NOT NULL,
       `submission_date` DATE,
       PRIMARY KEY ( `runoob_id` )
    )ENGINE = InnoDB DEFAULT CHARSET = utf8;
    
    # 删表
    DROP TABLE [IF EXISTS] <表名>
    # 清空
    TRUNCATE TABLE <表名>
    

    10. SELECT语句

    基本查询

    SELECT (字段1, 字段2, ...) FROM <表名>
    

    条件查询

    SELECT (字段1, 字段2, ...) FROM <表名> WHERE <条件表达式>
    

    排序查询

    SELECT (字段1, 字段2, ...) FROM <表名> ORDER BY 字段1 DESC, 字段2 ASC, ...
    
    # 特定记录的排序
    SELECT * FROM <表名> ORDER BY id = 9 DESC,字段1 DESC
    

    子查询

    # FROM 后子查询一定要取别名
    SELECT * FROM (SELECT * FROM <表名>) AS <另取的表名> WHERE <条件表达式>
    

    分页查询

    SELECT (字段1, 字段2, ...) FROM <表名> LIMIT <M> OFFSET <N>
    
    # 分页优化,查询第十万条后的100条数据
    SELECT * FROM <表名> LIMIT 100 OFFSET 100000;
    SELECT * FROM <表名> LIMIT 100000,100; (不包括第100000)
    SELECT * FROM <表名> WHERE id >= (SELECT id FROM <表名> LIMIT 100000,1) limit 100;
    
    

    分组查询

    SELECT (字段1,聚合函数) FROM <表名>
    WHERE <条件表达式>
    GROUP BY 字段1
    HAVING <条件表达式>
    ORDER BY <条件表达式>
    
    # WHERE,用于分组前,WHERE过滤的是行
    # SELECT,字段只能加 GROUP BY 后面的字段和聚合函数 
    # HAVING,用于分组后,过滤组,且条件字段必须在前面查询存在
    
    # 画重点,分组需要列出非GROUP 之后的字段
    SELECT * FROM <表名> WHERE id IN (
    	SELECT max(id) FROM <表名> GROUP BY id,time
    )
    

    并 / 差 / 交集查询

    SELECT (字段1, 字段2, ...) FROM <表名1>
    UNION [ALL] / EXCEPT / INTERSECT
    SELECT (字段1, 字段2, ...) FROM <表名2>
    
    # 二表字段需一样
    

    聚合查询

    COUNT(字段),SUM(),AVG(),MAX(),MIN()
    
    # 若查询无结果,COUNT()返回0,而SUM()、AVG()、MAX()、MIN()返回NULL
    

    连接查询

    SELECT (表1.字段, 表2.字段2, ...) FROM <表1> XXX JOIN <表2> ON <表1>.column = <表2>.column
    
    XXX: INNER / RIGHT OUTER / LEFT OUTER / FULL OUTER(Mysql不支持,所以可以用左连接 UNION 右连接)
    
    • 内连接,只返回同时存在于两张表的行数据

    • 外连接

      • 左连接,返回右表都存在的行,左边不存在填充NULL

      • 右连接,返回左表都存在的行,右边不存在填充NULL

      • 全连接,把两张表的所有记录全部选择出来,自动把对方不存在的列填充为NULL


    11. INSERT语句

    # 插入或替换(根据主键来执行)
    # 若存在该主键,删除原记录,插入一条新的、否则直接插入记录
    REPLACE INTO <表名> (字段) VALUES (值)
    
    # 插入或更新(根据主键来执行)
    # 若存在该主键,更新记录、否则直接插入记录
    # 返回0,1,2
    INSERT INTO <表名> (字段1) VALUES (值) ON DUPLICATE KEY UPDATE `字段2` = "更新值"
    
    # 插入或忽略
    INSERT IGNORE INTO <表名> (字段) VALUES (值) 
    

    12. UPDATE

    # 返回更新条数
    UPDATE <表名> SET 字段1=值1, 字段2=值2, ... WHERE <条件表达式>
    

    13. DELETE

    # 返回条数
    DELETE FROM <表名> WHERE <条件表达式>
    
    # 跨表更新(两个表都可更新)
    UPDATE <表名1> XXX JOIN <表名2> on <表名1>.a = <表名2>.b SET <表名1>.x = 0,<表名2>.x=0 WHERE <条件表达式>
    

    14. 视图

    # 视图是一种虚表,建立在原来的表上,其本质是查询语句,不会增加查询效率
    # 简化查询
    # 权限限制,安全性
    CREATE VIEW <视图名> SELECT (字段1, 字段2, ...) FROM <表名> WHERE <条件表达式>
    

    ## 15. 名词
    • DML(data manipulation language)数据操作语言:select、update
    • DDL(data definition language)数据定义语言:create、alter、drop
    • DCL(data control language)数据控制语言:grant、revoke

    16. 其他

    1. 判断null:ISNULL
    2. 替换:IFNULL(字段替换的值),若为null则替换成给定值
    3. delete使用别名的时候,要在delete和from间加上删除表的别名,这样才是正确的写法


  • 相关阅读:
    决策模型(一):不确定型决策法
    Redis系列(二):Redis的数据类型及命令操作
    Redis系列(一):Redis的简介与安装
    java中传值方式的个人理解
    理解主从设备模式(Master-Slave)
    基于ubuntu16.04部署IBM开源区块链项目-弹珠资产管理(Marbles)
    基于ubuntu16.04快速构建Hyperledger Fabric网络
    fastjson 的使用总结
    简析淘宝网的六大质量属性
    软件架构师如何工作
  • 原文地址:https://www.cnblogs.com/Howlet/p/12047596.html
Copyright © 2020-2023  润新知