@[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交叉连接查询: select * from A,B;
-
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编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
- 全新的界面设计 ,将会带来全新的写作体验;
- 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
- 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
- 全新的 KaTeX数学公式 语法;
- 增加了支持甘特图的mermaid语法1 功能;
- 增加了 多屏幕编辑 Markdown文章功能;
- 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
- 增加了 检查列表 功能。
功能快捷键
撤销: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.
图片:
带尺寸的图片:
居中的图片:
居中并且带尺寸的图片:
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
如何插入一段漂亮的代码片
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
// An highlighted block
var foo = 'bar';
生成一个适合你的列表
- 项目
- 项目
- 项目
- 项目
- 项目1
- 项目2
- 项目3
- 计划任务
- 完成任务
创建一个表格
一个简单的表格是这么创建的:
项目 | Value |
---|---|
电脑 | $1600 |
手机 | $12 |
导管 | $1 |
设定内容居中、居左、居右
使用:---------:
居中
使用:----------
居左
使用----------:
居右
第一列 | 第二列 | 第三列 |
---|---|---|
第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
SmartyPants
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:
TYPE | ASCII | HTML |
---|---|---|
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)=(n−1)!∀n∈N 是通过欧拉积分
Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t   . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞tz−1e−tdt.
你可以找到更多关于的信息 LaTeX 数学表达式here.
新的甘特图功能,丰富你的文章
- 关于 甘特图 语法,参考 这儿,
UML 图表
可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图::
这将产生一个流程图。:
- 关于 Mermaid 语法,参考 这儿,
FLowchart流程图
我们依旧会支持flowchart的流程图:
- 关于 Flowchart流程图 语法,参考 这儿.
导出与导入
导出
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。
导入
如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。
注脚的解释 ↩︎