zoukankan      html  css  js  c++  java
  • mysql_3 基础语句

    mysql_3 基础语句

    标签(空格分隔): mysql

    原博客: https://www.jianshu.com/p/e872bc12f583
    原视频: https://www.bilibili.com/video/BV157411K7sf


    sql介绍

    结构化的查询语言 关系型数据中通用的一类语言
    SQL标准 89 92 99 03

    help contents

    help xx xx 查看帮助

    DDL : 数据定义语言
    DCL : 数据控制语言
    DML : 数据操作语言
    DQL : 数据查询语言

    SQL mode SQL模式

    作用 规范sql语句的书写方式
    select @@sql_mode

    STRICT_TRANS_TABLES:
    在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做限制。必须设置,以后各项可能依赖于该项的设置
    NO_ENGINE_SUBSTITUTION:
    如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常
    ONLY_FULL_GROUP_BY:
    对于GROUP BY操作,如果在SELECT中出现的单独的列,没有在GROUP BY子句中出现,那么这个SQL是不合法的
    NO_AUTO_VALUE_ON_ZERO:
    该值影响自增长列的插入。默认设置下,插入0或NULL代表生成下一个自增长值。如果用户希望插入的值为0,而该列又是自增长的,那么这个选项就有用了
    NO_ZERO_IN_DATE:
    在严格模式下,不允许日期和月份为零
    NO_ZERO_DATE:
    设置该值,mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告
    ERROR_FOR_DIVISION_BY_ZERO:
    在INSERT或UPDATE过程中,如果数据被零除,则产生错误而非警告。如果未给出该模式,那么数据被零除时MySQL返回NULL
    NO_AUTO_CREATE_USER:
    禁止GRANT语句创建密码为空的用户
    PIPES_AS_CONCAT:
    将“||”视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样的,也和字符串的拼接函数Concat相类似
    ANSI_QUOTES:
    启用ANSI_QUOTES后,不能用双引号来引用字符串,因为它被解释为识别符
    也可以在命令行查看和设置sql_mode变量
    
    

    字符集 chatset 和校验规则 collation

    字符集

    show collation
    utf8
    utf8mb4 可以存表情

    校对规则

    每种字符集 有多种校对规则(排序规则)
    show collation
    作用:
    影响到排序的操作

    a
    b
    ab
    Ab
    aB
    ba
    A
    B
    A Ba a aB b
    ASCII码的规则

    show collation;

    数据类型

    数据类型 存储长度 二进制数 二进制数范围
    整数 tinyint 0-255
    整数 smallint 65535

    网上有
    https://www.w3school.com.cn/sql/sql_datatypes.asp

    enum 枚举
    ('成都','北京','上海')

    json{
        id:1,
        name:"sab"
    }
    

    约束

    PK                  主键  唯一且非空   每张表只能有一个主键 作为聚簇索引
    NOT NULL            非空
    UNIQUE              唯一
    UNSIGNED            针对数字列 非空的数据
    

    其他属性

    default 默认值
    comment 注释

    SQL应用

    client
    ? 帮助
    c 结束上条命令运行
    G 格式化输出
    q 退出mysql会话
    source 导入sql脚本
    system 调用linux命令

    Server

    linux 一切皆文件、命令
    mysql 一切皆sql、表

    DDL

    DDL 数据定义语言
    库定义 库名 库属性
    创建库
    create database 库名 charset utf8mb4;
    规范
    1.库名大写 业务有关 不要数字开头 库名不要太长 不能使用保留字符串
    2.必须指定字符集

    查库
    show databases;
    show create database 库名

    修改库
    alter database 库名 charset 字符集

    删除库
    drop database 库名;

    表操作

    查看
    show tables
    desc tables
    show create table

    修改表
    alter table wx_users add column shouji varchar(11) not null unique key comment '手机号';

    alter table wx_users modity shouji varchar(12) not null unique key comment '手机号';

    alter table wx_users change shouji varchar(12) not null unique key comment '手机号' ;

    alter table wx_users drop shouji;

    删除表
    drop table wx_users

    新增表
    CREATE TABLE wx_users
    (
    Id int primary key,
    LastName varchar(255) not null,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255),
    ComeTime datetime not null default NOW()
    )ENGINE=INNODB CHARSET=utf8mb4

    此类操作会锁表 因为修改了表的元数据
    类似于linux 中的 inode (磁盘位置、文件属性、) 更改属性时inode会变化

    DML

    select
    insert
    delete
    update

    insert

    insert into 表名(字段1,字段2) values (字段1,字段2), (字段1,字段2);

    insert into 表名 values (字段1,字段2), (字段1,字段2);

    update

    update table set a = 1 , b = 2 where id = ?

    delete

    delete from table where id = ?
    4.1.3 select 标准用法 配合其他子句使用

    几种delete的区别

    delete from 表 逻辑上 逐行删除 数据行多 操作很慢 并没从磁盘上删除 只是在存储上打了标记 并不立即释放

    drop table 表 表结构 元数据 物理角度删除

    truncate table 表 清空表段中的所有数据页 磁盘空间立即释放 HWM高水位线会降低

    select

    select user()
    select version()
    help contents Functions

    select 10*1000

    select @@port
    show variables ;

    show variables like '%trx%';

    单表

    前提

    默认执行顺序

    select

    1.from 表1,表2

    2.where 条件1 条件2

    3.group by 条件1 条件2

    4.having 过滤条1 过滤条2

    5.order by 条件列1 条件列2

    6.limit 限制条件

    select 列 from table

    select * from table 全部

    select + from + where 配合使用 --> grep

    = > < >= <= != 条件

    select * from table where id > 1

    select * from table where 条件 like 'ch%'

    ch% 别写 %ch% 不走索引

    select * from + where + group by

    group by 配合聚合函数 max min avg count sum group_concat 使用

    聚合函数

    max 最大值

    min 最小值

    avg 平均值

    count 数

    sum 求和

    group_concat 列转行

    说明 : 碰到group by 必然会有聚合函数。

    驱动表

    在多表连接中,承当for循环中外层循坏的角色。
    此时,mysql会拿着驱动表的每个满足条件的关联列的值,去依次找到for循环内循环中的关联值一一进行判断和匹配

    建议:
    关联时 使用小表作为驱动表 降低next loop次数 left join 可以强制左表为驱动表。

    union 和 union all 区别
    union 聚集两个结果集 会自动进行结果集去重复

    union all 聚集两个结果集 不会去重复

    show 语句

    show databases;
    show tables;
    show tables from world; #查看world库下的表
    show processlist; #查看连接情况
    show full processlist #全部用户连接情况
    show charset #查看字符集
    show collation #查看校对规则
    show engines #查看引擎
    show privileges #查看权限
    show grants for #查看用户的权限
    show create database #查看建库
    show create table #查看建表
    show index from # 查看表的索引信息
    show engine innodb status #查看innodb引擎状态
    show status # 查看数据库状态
    show status like '%%' #查询数据状态
    show variables # 查看所有数据库参数
    show variables like '%%' #某些参数部分
    show binary logs #查看二进制日志文件信息
    show binlog events in # 查看二进制日志事件
    show master status # 查看二进制日志的位置点信息
    show slave status # 查询从库状态信息
    show relaylog events in #查看中继日志事件

    结构 逻辑表

    数据字典

    存放表中列的定义信息

    myisam:

    t1.frm

    innodb:
    两份
    t1.frm ibdata1 8.0之前

    数据行记录

    myisam:
    t1.MYD

    innodb:
    t1.ibd

    索引

    myisam:
    t1.MYI

    innodb:
    t1.ibd

    数据库状态

    mysql 库 ps sys

    权限

    mysql 库
    user
    db
    table
    column

    日志

    专门日志文件

    information schema

    查询部分metadata视图

    状态 数据字典 权限

    元数据获取

    每次数据库启动 会自动在内存中生成I_S 生成查询mysql部分元数据信息试图。

    试图?
    select语句的执行方法 不保存数据本身
    I_S中的试图,保存的就是查询元数据的方法

    create view v as select * from user;

    select * from v;

    I_S table

    保存了所有的表的数据字典信息

    desc tables
    //单位都是B
    TABLE_SCHEMA #表所在的库
    TABLE_NAME #表名
    ENGINE #引擎
    TABLE_ROWS #多少行
    AVG_ROW_LENGTH #平均行长度
    DATA_LENGTH #数据大小
    INDEX_LENGTH #索引大小
    DATA_FREE #表中是否有碎片

    case

    case when 判断 then 结果 when 判断2 then 结果2 end

  • 相关阅读:
    HDU 4552 怪盗基德的挑战书
    Qt中QUdpSocket序列化问题
    简单Qt网络通信
    QT快捷键
    Qt 程序退出时断言错误——_BLOCK_TYPE_IS_VALID(pHead->nBlockUse),由setAttribute(Qt::WA_DeleteOnClose)引起
    [转载]
    [百科]
    [百科]sys/types.h
    string.h文件中函数用法
    c++ <string.h>中包括哪些常用函数
  • 原文地址:https://www.cnblogs.com/hywhyme/p/14541616.html
Copyright © 2011-2022 走看看