MySql数据库整理

@[MySql数据库整理

数据库

概念:存储数据的仓库,其本质就是一个文件系统,用来存储文件用的。用户可以进行增,删,改,查;

数据库管理系统:用于数据管理的大型软件,它可以对数据库进行建立、使用、维护等功能。用户可访问数据库表中数据。

1数据库表:

1.1数据库的基本组成单位;其中包括:表名,字段,记录数据;

常见数据库:MySql、Oracle、DB2等;常用数据库:MySql和Oracle

1.2MySql数据库常用语句分类:

DDL(数据定义语言):定义数据库表、字段、列;关键字:create、alter、drop

DML(数据操作语言):对数据库表进行增删改:insert delete update

DCL(数据控制语言):定义权限访问和访问级别,创建用户

DQL(数据查询):对数进行条件查询:from、where、select

1.3DDL数据库操作:database

创建一个数据库:

create database 数据库名;

create database 数据库名 character set 字符集;

查看数据库:

查看所有数据库:show databases;

查看某一个数据库:show create database 数据库名;

删除数据库:

drop database 数据库名称;

使用数据库

查看正在使用的数据库: select database();

切换数据库: use 数据库名;

创建表操作

创建一个表:create table 表名(

字段名 类型(长度),

字段名 类型(长度)

(其中可以指定主键,自增,不为空以及comment字段说明,参数类型,类型长度)

查看表: show tables;

查看表结构:desc 表名;

删除表: drop table 表名;

修改表结构:

alter table 表名 add 列名 类型(长度)[约束];

作用:修改表添加列

alter table 表名 modify 列名 类型(长度)约束;

作用:修改表修改列的类型长度及约束;

alter table 表名 change 旧列表 新列表 类型(长度)约束

作用:修改旧列表为新列表以及类型和约束

alter table 表名 drop 列名 ;

作用:修改表删除列

rename table 表名 to 新表名;

作用:修改表名

(了解)alter table 表名 character set 字符集;

作用:修改表的字符集

2、DML数据操作语言

2.1插入表记录: insert

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

2.2更新表记录:update

更新所有的指定字段:update 表名 set 字段名=值,字段名=值,…;

更行符合条件字段:update 表名 set 字段名=值,字段名=值,。。。where 条件;

2.3 删除记录: detele

语法:delete from 表名 [where 条件];

3、DOS操作拘束乱码解决

解决方式: 在cmd命令窗口输入命令:set names gdk;(零时解决方案)

4、SQL约束

4.1主键约束

主键要求:不为null,必须唯一,每个表只能由一个主键

添加主键约束:

方法一: 创建表示时在字段上声明 primary key

方法二:在constraint约束区域,声明主键:[constraint(可省略) 名称] primary key (字段列表)

方法三:创表之后,通过修改表结构,声明指定字段为主键:

格式:alter table persons ADD [constraint 名称] primary key (字段列表)

删除主键约束 : alter table 表名 drop primary key ;

4.2自动增长列

自增长条件:必须为整型且自动增长列必须为主键

格式:字段名 数据类型 primary key Auto_increment;(默认自增长1)

delete from 表名 和 truncate table 表名;二者区别是: 前者逐条删除,不清空Auto_increment记录数不删除; 后者直接将表删除,Auto_increment 将置为0,从新开始

4.3非空约束:not null 约束强制不接受NULL值强制字段包含值。

4.4唯一约束

添加主键的三种方式:

方式一:创建表时,在字段中直接声明

方式二:创建表时,在约束区域声明

方式三:创建表后,修改表结构,声明字段唯一(alter table 表名 ADD [constraint 名称] unique (字段名))

删除唯一约束:alter table 表名 drop index 名称

数据库密码重置:使用cmd指令:use mysql; update user set password=password(‘新密码’) where user=‘用户名’

5、DQL(数据查询)

5.1简单条件查询:

select * from 表名;(全表查询所有字段)查询慢

select 字段1,字段2… from 表名;(全表查询对应字段数据)查询快

select * from 表名 as 别名;给表起别名

select 字段名 as from 表名;表字段起别名

select distinct 字段名 from 表名;去掉重复值

select 字段名,字段名+int(整型值) from 表名;

5.2使用where条件语句查询:

<<== != <> between … and …(含头含尾) IS NULL 判断是否为空

in在列表中的值 like 模糊查询"%字段部分名%" “_a%”(%任意字符) _表示一个字符 or多条件同时成立 not 不成立

5.3排序查询 select * from 表名 order by 排序字段 ASC(升序)|DESC(降序);

5.4聚合查询

count(统计某一行的个数) sum(计算指定列的值总和) max(指定列最大值)

min(指定列的最小值) avg(指定列平均值)

5.5分组查询

select 字段1,字段2,字段3…form 表名 group by 分组字段 having 分组条件;

having与where区别:

having在分组后进行过滤,where 在分组之前进行过滤

having后面可以使用聚合函数,where后面不可以使用聚合函数;

6、多表查询

6.1表与表之间关系:一对多关系 多对多关系 一对一关系

6.2外键约束:

  外键特点:  从表外键的值是对主表主键的引用;  从表外键类型,必须与主键类型一致 

   目的:保证数据完整性

    声明外键约束: 

             alter table  从表  add  [constraint  外键名称]  foreign key 从表名(从表字段名)reference    主表名(主表的主键);

     [外键名称] 用于删除外键约束的,一般建议"_fk"结尾

              alter table  从表  drop  foreign key 外键名称;

7、多表查询

  1. 1交叉连接查询: select * from A,B;

  2. 2内链接查询:
    隐式内连接:select * from A,B where 条件;
    显示内连接查询: select * from A inner join B on 条件;
    7.3外连接查询:
    左外连接:left outer join
    select * from A left outer join B on 条件;
    右外连接:right outer join
    select * from A right join B on 条件;
    7.4子查询:一条select语句结果作为另一个select语句的一部分(查询条件,查询结果等);
    语法:select …查询字段 …from … 表… where…查询条件

8、MySql优化:

sql语句优化重点应该放在“防止全表扫描”上面,在确保“不会全表扫描”的前提下提高sql执行效率

建表的时候:
1,尽量不要给数据库留null(varchar除外),尽可能使用not null填充数据库,如果是数值类型设置默认值为0

2,备注,描述,评论可以设为null(varchar类型可以为null),因为varchar类型,值为null是不占用空间的

3,尽可能的使用 varchar/nvarchar 代替 char/nchar ,因为首先变长字段存储空间小,可以节省存储空间,其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。

4,尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。

5,在新建临时表时,如果一次性插入数据量很大,那么可以使用 select into 代替 createtable,避免造成大量 log ,以提高速度;如果数据量不大,为了缓和系统表的资源,应先create table,然后insert。

查询语句:
6,尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。
7,任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的,任何字段。

8,不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。

9,应尽量避免在 where 子句中使用 != 或 <> 操作符,否则将引擎放弃使用索引而进行全表扫描。就是说!=或者<>不再使用,由not代替:
where price != 800或者where price <> 800是错误的写法,应该写为 where not (price = 800)

10,应尽量避免在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描
SELECT * FROM product WHERE pid=1 OR pname=‘海尔’
应该改为:
SELECT * FROM product WHERE pid=1
union all
SELECT * FROM product WHERE pname=‘海尔’

11,应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:select id from t where num/2 = 100应改为:select id from t where num = 100*2

12,应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描

13,in 要慎用,否则会导致全表扫描
select id from t where num in(1,2,3)对于连续的数值,能用 between 就不要用 in 了:
select id from t where num between 1 and 3

14,很多时候用 exists 代替 in 是一个好的选择:
select num from a where num in(select num from b)
用下面的语句替换:
select num from a where exists(select 1 from b where num=a.num)

15,模糊查询%abc%会导致全表扫描:select id from t where name like ‘%abc%’,若要提高效率,可以考虑全文检索。

16,Update 语句,如果只更改1、2个字段,不要Update全部字段,否则频繁调用会引起明显的性能消耗,同时带来大量日志。

17,对于多张大数据量(这里几百条就算大了)的表JOIN,要先分页再JOIN,否则逻辑读会很高,性能很差。

18,select count(*) from table;这样不带任何条件的count会引起全表扫描,并且没有任何,业务意义,是一定要杜绝的。
TOC](这里写自定义目录标题)

欢迎使用Markdown编辑器

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

新的改变

我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

  1. 全新的界面设计 ,将会带来全新的写作体验;
  2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
  3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
  4. 全新的 KaTeX数学公式 语法;
  5. 增加了支持甘特图的mermaid语法1 功能;
  6. 增加了 多屏幕编辑 Markdown文章功能;
  7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
  8. 增加了 检查列表 功能。

功能快捷键

撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
查找:Ctrl/Command + F
替换:Ctrl/Command + G

合理的创建标题,有助于目录的生成

直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

如何改变文本的样式

强调文本 强调文本

加粗文本 加粗文本

标记文本

删除文本

引用文本

H2O is是液体。

210 运算结果是 1024.

插入链接与图片

链接: link.

图片: Alt

带尺寸的图片: Alt

居中的图片: Alt

居中并且带尺寸的图片: Alt

当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

如何插入一段漂亮的代码片

博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

// An highlighted block
var foo = 'bar';

生成一个适合你的列表

  • 项目
    • 项目
      • 项目
  1. 项目1
  2. 项目2
  3. 项目3
  • 计划任务
  • 完成任务

创建一个表格

一个简单的表格是这么创建的:

项目Value
电脑$1600
手机$12
导管$1

设定内容居中、居左、居右

使用:---------:居中
使用:----------居左
使用----------:居右

第一列第二列第三列
第一列文本居中第二列文本居右第三列文本居左

SmartyPants

SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

TYPEASCIIHTML
Single backticks'Isn't this fun?'‘Isn’t this fun?’
Quotes"Isn't this fun?"“Isn’t this fun?”
Dashes-- is en-dash, --- is em-dash– is en-dash, — is em-dash

创建一个自定义列表

Markdown
Text-to- HTML conversion tool
Authors
John
Luke

如何创建一个注脚

一个具有注脚的文本。2

注释也是必不可少的

Markdown将文本转换为 HTML

KaTeX数学公式

您可以使用渲染LaTeX数学表达式 KaTeX:

Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n1)!nN 是通过欧拉积分

Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t &ThinSpace; . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=0tz1etdt.

你可以找到更多关于的信息 LaTeX 数学表达式here.

新的甘特图功能,丰富你的文章

Mon 06 Mon 13 Mon 20 已完成 进行中 计划一 计划二 现有任务 Adding GANTT diagram functionality to mermaid
  • 关于 甘特图 语法,参考 这儿,

UML 图表

可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图::

张三 李四 王五 你好!李四, 最近怎么样? 你最近怎么样,王五? 我很好,谢谢! 我很好,谢谢! 李四想了很长时间, 文字太长了 不适合放在一行. 打量着王五... 很好... 王五, 你怎么样? 张三 李四 王五

这将产生一个流程图。:

链接
长方形
圆角长方形
菱形
  • 关于 Mermaid 语法,参考 这儿,

FLowchart流程图

我们依旧会支持flowchart的流程图:

Created with Raphaël 2.2.0 开始 我的操作 确认? 结束 yes no
  • 关于 Flowchart流程图 语法,参考 这儿.

导出与导入

导出

如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

导入

如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。


  1. mermaid语法说明 ↩︎

  2. 注脚的解释 ↩︎

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值