关于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)
on duplicate key update 含义:
1)如果在INSERT语句末尾指定了 on duplicate key update,
并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,
则在出现重复值的行执行UPDATE;
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基础的更多相关文章
- Mysql基础代码(不断完善中)
Mysql基础代码,不断完善中~ /* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限 ...
- MYSQL基础操作
MYSQL基础操作 [TOC] 1.基本定义 1.1.关系型数据库系统 关系型数据库系统是建立在关系模型上的数据库系统 什么是关系模型呢? 1.数据结构可以规定,同类数据结构一致,就是一个二维的表格 ...
- 【夯实Mysql基础】记一次mysql语句的优化过程
1. [事件起因] 今天在做项目的时候,发现提供给客户端的接口时间很慢,达到了2秒多,我第一时间,抓了接口,看了运行的sql,发现就是 2个sql慢,分别占了1秒多. 一个sql是 链接了5个表同时使 ...
- MySQL基础(非常全)
MySQL基础 一.MySQL概述 1.什么是数据库 ? 答:数据的仓库,如:在ATM的示例中我们创建了一个 db 目录,称其为数据库 2.什么是 MySQL.Oracle.SQLite.Access ...
- mysql 基础篇5(mysql语法---数据)
6 增删改数据 -- ********一.增删改数据********* --- -- 1.1 增加数据 -- 插入所有字段.一定依次按顺序插入 INSERT INTO student VALUES(1 ...
- MySQL 基础语句
MySQL 基础语句 多个知识点 ----------------------------------------------------------------------------------- ...
- MySQL:基础—数据分组
MySQL:基础-数据分组 1.为什么要分组: 比如一个表中有多条订单记录,如上图,每条记录对应着一个商品,现在我要查询 每个商品被订购的单数 准备出货?也就是找到每个商品被订购的数量. 如果只找一个 ...
- MySQL基础学习总结
1.MySQL基础概念 mysql逻辑架构如下: 每个客户端连接都会在服务器中拥有一个线程,这个连接的查询只会在这个单独的线程中执行. MySQL是分层的架构.上层是服务器层的服务和查询执行引擎,下层 ...
- MySQL基础(五)——视图
MySQL基础(五)--视图
- MySQL基础(四)——索引
MySQL基础(四)--索引
随机推荐
- C#设计模式---PipeLine
一.概述 顾名思义,管道模式就像一条管道把多个对象连接起来,整体看起来就像若干个阀门嵌套在管道中,而处理逻辑就放在阀门上,如下图,需要处理的对象进入管道后,分别经过阀门一.阀门二.阀门三.阀门四,每个 ...
- python创建字典多种方式
1.创建空字典 >>> dic = {} >>> type(dic) <type 'dict'> 2.直接赋值创建 >>> dic = ...
- Ajax 与 Struts 1
Xml配置 <action path="/product/product/validateCurrencyDecimalSupport" type="com.neu ...
- Mybatis一对一、一对多、多对多查询。+MYSQL
场景:使用三张数据表:student学生表.teacher教师表.position职位表 一个学生可以有多为老师.一位老师可以有多个学生.但是一个老师只能有一个职位:教授.副教授.讲师:但是一个职位可 ...
- 小程序跨页面传递data数据的三种方法
Q:小程序怎么把页面data里的数据传到另外的页面? 或者小程序怎么吧表单里的数据传到另外的页面?A:1.可以使用url传递数据. 例如在A页面中传递数据,需要注意的是,wx.switchTab中的u ...
- 基于Linux的系统排错
1.系统引导过程概述 2.系统异常及恢复 [1]grub系统引导 1)mbr上446字节丢失 模拟问题: dd if=/dev/zero? of=/dev/vda? bs=446? count=1? ...
- Python之requests模块-request api
requests所有功能都能通过"requests/api.py"中的方法访问.它们分别是: requests.request(method, url, **kwargs) req ...
- Django项目从创建到运行
环境: Windows Server 2008 R2 标准版 1.安装python运行环境(省略) 2.安装Django pip install Django==3.1.5 # 不写版本号也可以 3. ...
- adb 常用命令大全(1)- 汇总
adb 常用命令大全系列 基础命令 查看手机设备信息 应用管理 日志相关 模拟按键输入 其他实用功能
- 通过HttpURLConnection下载图片到本地--下载附件
一.背景说明 现在我做的系统中,需要有一个下载附件的功能,其实就是下载图片到本地中.相应的图片保存在多媒体系统中,我们只能拿到它的资源地址(url),而不是真实的文件. 这里记录的是下载单个图片.下篇 ...