zoukankan      html  css  js  c++  java
  • 关于mysql基础

    早就想把自己的数据库基础巩固一下,然而一直没有时间,今天终于抽出时间对mysql数据库基础进行了学习与扩展。

    mysql与其他数据库的区别

    Sqlite: 开源免费,体积小,单文件,没有进程。磁盘读性能强大。写并发性较低。
    Mysql:开源免费,关系型数据库,体积小性能强,完全的多线程实现,多平台移植。
    Sqlserver:微软出品,只能运行在windows上。与windows server 配合很好
    Oracle:安全性高,性能高,兼容性高,可移植性高。价格昂贵,维护难度大,学习成本高。

    mysql实例及重要版本节点

    实例即服务器上的进程。ps -ef|grep mysql可以进行查看。
    mysql重要的版本节点:5.5/5.7/8.0
    (详情了解这里

    视图

    虚拟表,实际是执行一个预置sql。表面和表格一样,对代码不透明。

    索引

    索引的作用:快速定位数据。
    索引的缺点:额外占用空间,数据变更时需要同步更新索引。(详情了解这里
    索引的类型:
    1)普通索引 index:加速查找数据。
    2)唯一索引
    主键索引:primary key 加速查找+约束(不为空且唯一)。
    唯一索引:unique 加速查找数据+约束(唯一)。
    3)联合索引:
    primary key(id,name):联合主键索引。
    unique(id,name):联合唯一索引。
    index(id,name):联合普通索引。
    4)全文索引fulltext :用于搜索很长一篇文章的时候,效果最好。
    5)空间索引spatial :了解就好,几乎不用

    创建/删除索引的语法

    点击查看代码
    #方法一:创建表时
          CREATE TABLE 表名 (
                     字段名1  数据类型 [完整性约束条件…],
                      字段名2  数据类型 [完整性约束条件…],
                      [UNIQUE | FULLTEXT | SPATIAL ]   INDEX | KEY
                      [索引名]  (字段名[(长度)]  [ASC |DESC]) 
                      );
       
    #方法二:CREATE在已存在的表上创建索引
             CREATE  [UNIQUE | FULLTEXT | SPATIAL ]  INDEX  索引名 
                          ON 表名 (字段名[(长度)]  [ASC |DESC]) ; 
    
     #方法三:ALTER TABLE在已存在的表上创建索引
             ALTER TABLE 表名 ADD  [UNIQUE | FULLTEXT | SPATIAL ] INDEX
                                  索引名 (字段名[(长度)]  [ASC |DESC]) ;   
    	
     #删除索引:DROP INDEX 索引名 ON 表名字;
    


    `善用帮助文档
    help create
    help create index

    1.创建索引
    -在创建表时就创建(需要注意的几点)
    create table s1(
    id int ,#可以在这加primary key
    #id int index #不可以这样加索引,因为index只是索引,没有约束一说,
    #不能像主键,还有唯一约束一样,在定义字段的时候加索引
    name char(20),
    age int,
    email varchar(30)
    #primary key(id) #也可以在这加
    index(id) #可以这样加
    );
    -在创建表后在创建
    create index name on s1(name); #添加普通索引
    create unique age on s1(age);添加唯一索引
    alter table s1 add primary key(id); #添加住建索引,也就是给id字段增加一个主键约束
    create index name on s1(id,name); #添加普通联合索引
    2.删除索引
    drop index id on s1;
    drop index name on s1; #删除普通索引
    drop index age on s1; #删除唯一索引,就和普通索引一样,不用在index前加unique来删,直接就可以删了
    alter table s1 drop primary key; #删除主键(因为它添加的时候是按照alter来增加的,那么我们也用alter来删)`

    常见函数

    IF:三个参数,第一个参数为返回真假的表达式,当表达式为1时,函数返回第二个参数,否则返回第三个参数。
    UNIX_TIMESTAMP:当无参数时返回当前时间戳,加日期参数返回的是日期时间戳。
    FROM_UNIXTIME:把时间戳格式化。
    COUNT:聚合函数,计数。
    SUM:聚合函数,求和。
    LENGTH:返回字符串长度。
    (详情点击这里

    基础sql

    1.insert
    Insert into table( col1,col2,… ) values (col1val, col2val,…) ;正常用法(当有主键,插入相同数据时,报错;当没有主键时,会直接插入,产生相同数据)。
    (`的作用,通常用来说明其中的内容是数据库名、表名、字段名,防止数据库将其识别为关键字)

    Replace into :
    与insert into类似(当有主键或唯一索引时, 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据,否则,直接插入新数据。当不存在主键时,replace into 会直接插入数据,这将导致表中出现重复的数据。)

    Insert ignore into:当在表中发现已存在数据时,忽略新数据。

    Insert into … ON DUPLICATE KEY UPDATE values(col)

    1. on duplicate key update 含义:
      1)如果在INSERT语句末尾指定了 on duplicate key update,
      并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,
      则在出现重复值的行执行UPDATE;
      2)如果不会导致唯一值列重复的问题,则插入新行。

    2. values(col_name)函数只是取当前插入语句中的插入值,并没有累加功能。
      如:count = values(count) 取前面 insert into 中的 count 值,并更新
      当有多条记录冲突,需要插入时,前面的更新值都被最后一条记录覆盖,
      所以呈现出取最后一条更新的现象。
      如:count = count + values(count) 依然取前面 insert into 中的 count 值,
      并与原记录值相加后更新回数据库,这样,当多条记录冲突需要插入时,
      就实现了不断累加更新的现象。

    注:insert into ... on duplicate key update ... values() 这个语句
    尽管在冲突时执行了更新,并没有插入,但是发现依然会占用 id 序号(自增),
    出现很多丢失的 id 值,
    (详情点击这里

    Insert into table1( col1,col2,… ) select col1,col2,… from table2
    从一个表中复制数据,然后将数据插到另一个表中。

    Insert into table1
    select * from table2

    将一个表中的所有列插到另一个表中。

    2.update
    1)Update table set col=val where 正常更新。
    2)update table set sex= '男', name='张三' where id = 1 ; 更新多个字段用逗号,而不是and。
    3)UPDATE table1 a left JOIN table2 b ON a.HOSTID = b.hostid SET a.GROUP_ID = CASE ID
        WHEN 1 THEN
        'abc'
        WHEN 2 THEN
        'def'
        WHEN 3 THEN
        'ghi'
        ELSE
        'jkl'
    END
    WHERE b.groupid = '00000000-1111-2222-3333-444444444444'

    复杂情况,结合表联合、case。

    3.delete
    delete from where 正常用法。

    复杂语句分析

    Select ... from ... join ... on ... where ... group by ... having ... order by ... limit

    分析顺序:
    From →join→on→where→groupby→Select→having→orderby→limit

    Where 中的匹配方式
    =, >, <, >=, <=, <>, !=
    In, not in, like, between, is null, is not null

    修改表结构的DDL

    Create,Alert,Drop

    另外有一个学sql的网站这里,有空可以多看看。

  • 相关阅读:
    智能实验室-结构化存储浏览器(SSExplorer) 1.5.0.150
    智能实验室-杀马(Defendio) 3.1.0.681
    智能实验室-结构化存储浏览器(SSExplorer) 1.6.0.160
    IT餐馆—第八回 三十
    使用Silverlight Toolkit 绘制图表区域图和冒泡图
    IT餐馆—第十二回 软培
    IT餐馆—第四回 离职
    IT餐馆—第一回 前言
    IT餐馆—第十回 潜伏
    IT餐馆—第十三回 重构
  • 原文地址:https://www.cnblogs.com/ldl-1/p/15354376.html
Copyright © 2011-2022 走看看