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)
Ps:select * 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 分组查询
- 单独使用 (毫无意义)
- 与group_concat()函数一起使用;
Ps: select grade group_concat(t_name) from tabname group by grade;
- 与聚合函数一起使用(group by);
Ps: select gradename count(t_name) from tabname group by gradename;
- Having 筛选
Ps: select gradename count(t_name) from tabname group by gradename having count(t_name)>3;
E. 与with rollup 一起使用(最后加入一个总行数)
Ps:select 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参数可以设置,全文索引只能创建在char,varchar,txt类型的字段上,主要作用就是提高查询较大字符串类型的速度,只有MAISAM引擎支持该索引,mysql默认引擎不支持
4.单列索引
在表中给单个字段创建索引,单列索引可以是普通索引,可以是全文索引,也可以是全文索引。
5.多列索引
多列索引是在表的多个字段创建一个索引。
6.空间索引
使用SPATLAL参数可以设置空间索引。空间索引只能创建在空间数据类型上,这样可以提高系统获取空间数据的效率。只有MAISAM引擎支持该索引,mysql默认引擎不支持。
话不多说,创建索引吧!
Create table 表名(
属性名 数据类型 限制性条件(如:not null,primary key...),
属性名 数据类型 限制性条件(如:not null,primary key...),
......
属性名 数据类型 限制性条件(如:not null,primary key...),
index 别名(属性名)
)
总的来说,用语句创建索引,其实就是正常创建表的时候在后面加上 index (表名); 唯一性索引在index前面加UNIQUE,全文索引在index前面加FULLTXT,空间索引在前面加SPATLAL,多列索引是index(属性名1,属性名2)。
Create table 表名(
属性名 数据类型 限制性条件(如:not null,primary key...),
属性名 数据类型 限制性条件(如:not null,primary key...),
......
属性名 数据类型 限制性条件(如:not null,primary 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语句。
Ps:CREATE VIEW v1 AS SELECT * FROM t_book;
CREATE VIEW v1(a,b...) AS SELECT id,name FROM t_book;
这样其实就已经实现视图的创建了,第二个例子中的a,b 其实也是字段重命名,把后面的id和name改成了a,b。(注:多表也可以创建一个视图,后面的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 ... ------有则修改,无则创建
Ps:CREATE OR REPLACE VIEW v1(bookName,price) AS SELECT bookName,price FROM t_book;
1.2 alter view 视图名 as select... ------在已有视图中修改,视图必须存在
Ps:ALTER VIEW v1 AS SELECT * FROM t_book;
更新视图
更新视图是指通过视图来插入(INSERT)、更新(UPDATE)和删除(DELETE)表中的数据。因为视图是一个虚拟的表,其中没有数据。通过视图更新时,都是转换基本表来更新。更新视图时,只能更新权限范围以内的数据,超出了范围,就不能更新。
其实更新视图你就把它当做数据库表的更新
Ps:insert 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常用函数
存储过程和函数
数据备份和还原