早就想把自己的数据库基础巩固一下,然而一直没有时间,今天终于抽出时间对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的网站这里,有空可以多看看。

关于mysql基础的更多相关文章

  1. Mysql基础代码(不断完善中)

    Mysql基础代码,不断完善中~ /* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限 ...

  2. MYSQL基础操作

    MYSQL基础操作 [TOC] 1.基本定义 1.1.关系型数据库系统 关系型数据库系统是建立在关系模型上的数据库系统 什么是关系模型呢? 1.数据结构可以规定,同类数据结构一致,就是一个二维的表格 ...

  3. 【夯实Mysql基础】记一次mysql语句的优化过程

    1. [事件起因] 今天在做项目的时候,发现提供给客户端的接口时间很慢,达到了2秒多,我第一时间,抓了接口,看了运行的sql,发现就是 2个sql慢,分别占了1秒多. 一个sql是 链接了5个表同时使 ...

  4. MySQL基础(非常全)

    MySQL基础 一.MySQL概述 1.什么是数据库 ? 答:数据的仓库,如:在ATM的示例中我们创建了一个 db 目录,称其为数据库 2.什么是 MySQL.Oracle.SQLite.Access ...

  5. mysql 基础篇5(mysql语法---数据)

    6 增删改数据 -- ********一.增删改数据********* --- -- 1.1 增加数据 -- 插入所有字段.一定依次按顺序插入 INSERT INTO student VALUES(1 ...

  6. MySQL 基础语句

    MySQL 基础语句 多个知识点 ----------------------------------------------------------------------------------- ...

  7. MySQL:基础—数据分组

    MySQL:基础-数据分组 1.为什么要分组: 比如一个表中有多条订单记录,如上图,每条记录对应着一个商品,现在我要查询 每个商品被订购的单数 准备出货?也就是找到每个商品被订购的数量. 如果只找一个 ...

  8. MySQL基础学习总结

    1.MySQL基础概念 mysql逻辑架构如下: 每个客户端连接都会在服务器中拥有一个线程,这个连接的查询只会在这个单独的线程中执行. MySQL是分层的架构.上层是服务器层的服务和查询执行引擎,下层 ...

  9. MySQL基础(五)——视图

    MySQL基础(五)--视图

  10. MySQL基础(四)——索引

    MySQL基础(四)--索引

随机推荐

  1. C#设计模式---PipeLine

    一.概述 顾名思义,管道模式就像一条管道把多个对象连接起来,整体看起来就像若干个阀门嵌套在管道中,而处理逻辑就放在阀门上,如下图,需要处理的对象进入管道后,分别经过阀门一.阀门二.阀门三.阀门四,每个 ...

  2. python创建字典多种方式

    1.创建空字典 >>> dic = {} >>> type(dic) <type 'dict'> 2.直接赋值创建 >>> dic = ...

  3. Ajax 与 Struts 1

    Xml配置 <action path="/product/product/validateCurrencyDecimalSupport" type="com.neu ...

  4. Mybatis一对一、一对多、多对多查询。+MYSQL

    场景:使用三张数据表:student学生表.teacher教师表.position职位表 一个学生可以有多为老师.一位老师可以有多个学生.但是一个老师只能有一个职位:教授.副教授.讲师:但是一个职位可 ...

  5. 小程序跨页面传递data数据的三种方法

    Q:小程序怎么把页面data里的数据传到另外的页面? 或者小程序怎么吧表单里的数据传到另外的页面?A:1.可以使用url传递数据. 例如在A页面中传递数据,需要注意的是,wx.switchTab中的u ...

  6. 基于Linux的系统排错

    1.系统引导过程概述 2.系统异常及恢复 [1]grub系统引导 1)mbr上446字节丢失 模拟问题: dd if=/dev/zero? of=/dev/vda? bs=446? count=1? ...

  7. Python之requests模块-request api

    requests所有功能都能通过"requests/api.py"中的方法访问.它们分别是: requests.request(method, url, **kwargs) req ...

  8. Django项目从创建到运行

    环境: Windows Server 2008 R2 标准版 1.安装python运行环境(省略) 2.安装Django pip install Django==3.1.5 # 不写版本号也可以 3. ...

  9. adb 常用命令大全(1)- 汇总

    adb 常用命令大全系列 基础命令 查看手机设备信息 应用管理 日志相关 模拟按键输入 其他实用功能

  10. 通过HttpURLConnection下载图片到本地--下载附件

    一.背景说明 现在我做的系统中,需要有一个下载附件的功能,其实就是下载图片到本地中.相应的图片保存在多媒体系统中,我们只能拿到它的资源地址(url),而不是真实的文件. 这里记录的是下载单个图片.下篇 ...