mysql基本知识的总结

时间:2021-09-20 04:19:40

Mysql基本sql知识

Navicat快捷方式:

选中当前行

在行尾:shift home

在行首:shift end

执行当前行:ctrl shift R

复制当前行:ctrl D

 

 

显示所有数据库

Show databases;

 

创建数据库

Cteate database 数据库名;

 

删除数据库

Drop database 数据库名;

 

创建表(not null如果加上,添加数据的时候必须不能为空,否则添加数据的时候就会报错  tabname:表名 col:字段名称  type:类型)

Create table tabname(

Col1 type1 ,

Col2 type2 not tull,

Col3 type3 not null

);

 

根据已有的表创建新的表(table_new:新表名  table_old:旧表名)

Create table table_new like table_old;

 

删除表(tabname:表名)

Drop table tabname;

 

增加一个列(tabname:表名  col:字段名称  type:类型)

Alter table tabname add column col type;

 

单表查询(select

1.1 查询所有字段

Select * from 表名;

1.2 查询指定字段

Select 字段1,字段2,字段3, from 表名;

1.3 where条件查询语句

Select * from 表名 where 条件表达式;

1.4 in 关键字查询

Select * from 表名 where 字段 in (元素1,元素2)

Psselect * from tabname where age in (25,35) 查询年龄22-35之间的数据。同理,还有一个not in 就是查询25-35之外的数据

1.5 带 between and 的范围查询

Select * from 表名where 字段 between 元素1 and 元素2;

Ps:select * from tabname where age between 20 and 30;

同理,还有一个not between and 就是查询不在20-30之外的数据

 

1.6 like的模糊查询

Select 字段1,字段2,字段3 from 表名 where 字段 [not]like字符串;

“%”代表任意字符串 “_”代表单个字符串

Ps

select * from tabname where t_name like ‘张三*’; 张三丰,张三疯小,张三疯大

Select * from tabname where t_name like ‘张三_’;  张三丰,张三疯

Select * from tabname where t_name like ‘张三__’; 张三疯小,张三疯大

Select * from tabname where t_name like ‘%张三%’; 小张三,张三疯,张三疯小大......

 

1.7 空值查询

Select * from 表名 where 字段 is null;

Select * from 表名 where 字段 is not null;

 

1.8 and的多条件查询

Select * from 表名 where 条件表达式1 and 条件表达式2 and......条件表达式n;

 

1.9 or的多条件查询

Select * from 表名 where 条件表达式1 and 条件表达式2 and......条件表达式n;

 

2.0 去重复查询 (distinct

Select distinct字段 from 表名

Ps: select distinct t_name from users

 

2.1 对查询结果进行排序(asc:升序 desc:降序)

Select * from 表名 order by 属性名 asc; (默认是升序);

Select * from 表名 order by 属性名 desc;

 

2.2 group by 分组查询

  1. 单独使用 (毫无意义)
  2. group_concat()函数一起使用;

Ps: select grade group_concat(t_name) from tabname group by grade;

  1. 与聚合函数一起使用(group by);

Ps: select gradename count(t_name) from tabname group by gradename;

  1. Having 筛选

Ps: select gradename count(t_name) from tabname group by gradename having count(t_name)>3;

E. with rollup 一起使用(最后加入一个总行数)

Psselect gradename count(t_name) from tabname group by gradename with rollup;

 

2.3  limit分页查询

Select * from 表名 limit 初始位置,记录数;

Ps: select * from tabname limit 0,5;

Select * from tabname limit 5,5;

Select * from tabname limit 10,5;

注解:这是一个分页查询的sql语句,其中“,”前面的0,5,10都是每页的起始位置, “,”后面的5是每页分5条数据。

 

 

使用聚合函数查询 (聚合函数通常都是和group by一起使用)

3.1 count()函数:用来统计记录的条数

3.2 sum()函数:求和函数

3.3 avg()函数:求平均值的函数

3.4 max()函数:求最大值的函数

3.5 min()函数:求最小值的函数

 

连接查询

内连接查询:是一种常用的连接查询,内连接查询可以查询两个或两个以上的表

SELECT * FROM t_book,t_bookType where t_book.bookTypeId=t_bookType.id;

 

左连接

SELECT*FROM t_book tb LEFT JOIN t_bookType tbt ON tb.bookTypeId=tbt.id;

 

右连接

SELECT * FROM t_book tb RIGHT JOIN t_bookType tbt ON tb.bookTypeId=tbt.id;

 

多条件查询

SELECT * FROM t_book,t_bookType where t_book.bookTypeId=t_bookType.id and ...and...;   (在后面跟上and 条件)

 

子查询

in关键字的子查询

  

取别名

给表取别名:...表名 表的别名...

给字段取别名:...字段名 as 字段的别名...  as 不是必须的)

 

 

索引

1.普通索引

这类索引可以创建在任意数据类型中;

2.唯一性索引

使用UNIQUE参数可以设置,在创建唯一性索引时,限制该索引的值必须是唯一的;

3.全文索引

使用FULLTXT参数可以设置,全文索引只能创建在charvarchartxt类型的字段上,主要作用就是提高查询较大字符串类型的速度,只有MAISAM引擎支持该索引,mysql默认引擎不支持

4.单列索引

在表中给单个字段创建索引,单列索引可以是普通索引,可以是全文索引,也可以是全文索引。

5.多列索引

多列索引是在表的多个字段创建一个索引。

6.空间索引

使用SPATLAL参数可以设置空间索引。空间索引只能创建在空间数据类型上,这样可以提高系统获取空间数据的效率。只有MAISAM引擎支持该索引,mysql默认引擎不支持。

 

话不多说,创建索引吧!

Create table 表名(

属性名 数据类型 限制性条件(如:not nullprimary key...),

属性名 数据类型 限制性条件(如:not nullprimary key...),

......

属性名 数据类型 限制性条件(如:not nullprimary key...),

index 别名(属性名)

)

总的来说,用语句创建索引,其实就是正常创建表的时候在后面加上 index (表名);  唯一性索引在index前面加UNIQUE,全文索引在index前面加FULLTXT,空间索引在前面加SPATLAL,多列索引是index(属性名1,属性名2)。  

Create table 表名(

属性名 数据类型 限制性条件(如:not nullprimary key...),

属性名 数据类型 限制性条件(如:not nullprimary key...),

......

属性名 数据类型 限制性条件(如:not nullprimary key...),

UNIQUE | FULLTXT | SPATLAL index 别名(属性名)

)

别名这个东西看自己需求,不起的话也有默认的。

 

如果表已经创建好了,如何再用语句给字段加索引呢? 看下面语句,一共是两种方法,实现的效果都是一样的。

第一种:

Create UNIQUE | FULLTXT | SPATL index 索引名 on 表名(属性名);

第二种:

Alter table 表名 add index 别名(属性名);

 

 

删除索引

Drop index 索引名 on 表名;

 

视图

1.视图是一个虚拟的表,是从数据库中一个或多个表导出来的表。

2.数据库中只存放了视图的定义,而并没有存放视图中的数据,这些数据都放在原来的表中。

3.使用数据查询数据时,数据库系统会从原来的表中取出相应的数据。

 

视图的作用:

1.使操作简便化。

2.增加数据的安全性。

3.提高表的逻辑独立性。

 

创建视图

CREATE [ALGORITHM={UNDEFIEND | MERGE | TEMPTABLE}]

VIEW 视图名[(属性清单)]

AS SELECT语句

[WITH  [ CASCADED | LOCAL] CHECK OPTION ];

ALGORITHM 是可选参数,表示视图所选的算法;

“视图名”参数表示要创建视图的名称;

“属性清单是可选参数,其指定了视图中各个属性的名词,默认情况下,与SELECT 语句参数是一个完整的查询语句,标识从某个表查出某些满足条件的记录,将这些记录导入视图中,WITH CHECK OPTION是可选参数,表示更新视图时要保证在该视图的权限范围内”;

ALGORITHM 包括3个选项  UNDEFIEND MERGE、 TEMPTABLE

其中,UNDEFIEND 选项表示mysql将自动选择所需要使用的算法;MERGE选项表示将使用视图的语句和视图定义合并起来,使得视图定义的某一部分取代语句的对应部分;TEMPTABLE选项表示把视图的结果存入临时表,然后使用临时表执行语句;

CASCADED 是可选参数,表示更新视图时要满足所有所有视图和表的条件,该参数为默认值;LOCAL表示更新视图时,要满足该视图本身定义的条件即可。

当然,上述讲的我也不是特别理解,了解点基础的视图创建吧!

Create view 视图名 as select语句。

PsCREATE VIEW v1 AS SELECT * FROM t_book;

CREATE VIEW v1(a,b...) AS SELECT id,name FROM t_book;

这样其实就已经实现视图的创建了,第二个例子中的a其实也是字段重命名,把后面的idname改成了ab。(注:多表也可以创建一个视图,后面的select语句不变)

输入:select * from v1;  这样就可以查看你刚才所建的视图了。

其实后面的select语句就是我们正常所需要查询的语句,只不过用视图建了一个虚拟的表,这里面是没有物理数据的,你可以通过如下的方法来查看视图和正常表的区别:

Describe 视图名;       ------查看视图的基本信息

Show table status like ‘视图名’;      ------查看视图的状态

Show table status like ‘表名’;   两者对比,可以发现视图只是个虚表

Show create view 视图名;      ------查看视图详细信息

在数据库中自带的information_schema数据库中有一个VIEWS 也可以查看已经创建视图的信息

 

修改视图

1.1 create or replace view 视图名(属性名1,属性名2...属性名n) as select ...    ------有则修改,无则创建

PsCREATE OR REPLACE VIEW v1(bookName,price) AS SELECT bookName,price FROM t_book;

1.2 alter view 视图名 as select...      ------在已有视图中修改,视图必须存在

PsALTER VIEW v1 AS SELECT * FROM t_book;

 

更新视图

更新视图是指通过视图来插入(INSERT)、更新(UPDATE)和删除(DELETE)表中的数据。因为视图是一个虚拟的表,其中没有数据。通过视图更新时,都是转换基本表来更新。更新视图时,只能更新权限范围以内的数据,超出了范围,就不能更新。

其实更新视图你就把它当做数据库表的更新

Psinsert into v1 values(属性名1,属性名2...属性名n);      

------插入

update v1 set 属性名=’字段1,字段2...字段n’ where id = 1;      ------更新

delete from v1 where id=1;      ------删除

 

删除视图

drop view v1;       ------删除视图不会影响数据库中表的数据,因为视图本身只是一个虚拟的表

 

 

触发器

 

 

 

 

 

Mysql常用函数

 

 

 

 

存储过程和函数

 

 

 

 

 

数据备份和还原