1.了解mysql (每条sql语句都必须以分号结束,sql语句不区分大小写)

 

use databasename; //使用某个数据库
show databases; //显示当前的所有数据库
show tables;//显示数据库中的列表
show columns from tablename;//显示表中的列
describe tablename;//显示表中的列   可以认为describe是show columns from的快捷键
show create database databasename;//显示特定的创建的databasename的信息
show create table tablename;//显示特定的创建的tablename的信息
show status;//用于显示广泛的服务器状态信息
show grants;//用于显示授予用户(所有用户或者特定用户)的安全权限
show errors;//用于显示服务器错误消息
show warnings;//用于显示服务器警告消息
更多关于show的使用 请使用命令:help  show;

describe tablename [column | wild]; //显示表中列 后面可以带列名或者是带有 %和_通配符的字符串
 
2.select检索数据
 
select  sessionname from tablename;//利用select语句从tablename表中检索名为sessionname的列
select sessionname1,sessionname2,...  from tablename;//利用select语句从tablename表中检索多个列
select * from tablename;//检索tablename中所有的列
select distinct sessionname from tablename;//检索并显示不同的列  distinct作用是令重复的列只会显示一次
select distinct * from tablename;//检索所有的列,distinct修饰的是所有列  并不是靠着最近的那个列
select distinct sessionname from tablename limit 5;//返回检索到的前5条数据
select distinct sessionname from tablename limit 5,8;//返回检索到的从第5条数据开始的后面8条
select  tablename.sessionname from databasename.tablename;//表名和列名都用表和数据库限定了

select 选项的意义:

ALL:  select选项默认为all 就是把检索的记录全部显示出来
DISTINCT DISTINCTROW: 是同义词 意思是把重复的结果去掉
HIGH_PRIORITY: 用于select和insert语句中 表示这操作优先进行
STRAIGHT_JOIN:加快查询 规定表的连接顺序
SQL_BUFFER_RESULT:强制将结果集放到临时表中,这样就可以很快地释放MySQL的表锁(这样其它的SQL语句就可以对这些记录进行查询了),并且可以长时间地为客户端提供大记录集。
SQL_SMALL_RESULT:要求MySQL使用临时表存储最终的表而不是使用分类
SQL_BIG_RESULT:要求MySQL优先使用分类而不是做临时表。
SQL_CACHE :查询过程中使用缓存
SQL_NO_CACHE:查询中不实用缓存
SQL_CALC_FOUND_ROWS: 计算mysql有多少行应该位于结果集合中 不考虑limit语句

select id name from tablename; //注意 此处的id与name之间要加逗号 否则会把name当成id的别名来看待,因为 别名AS 是可省略的

{USE | IGNORE | FORCE} INDEX:

USE INDEX告知MYSQL选择一个索引来查找表中的行,

IGNORE INDEX告知MYSQL不要使用某些特定的索引,禁止查询优化器使用指定的索引。具有多个索引查询时,可以用来指定不需要优化器使用的那个索引,还可以删除不必要的索引之前在查询中禁止使用该索引

FORRCE INDEX的作用接近USE INDEX (key_list),只有当无法使用一个给定的索引来查找表中的行时,才使用表扫描 

对查询强制使用一个或者多个索引

key | index 其实是一个意思 在mysql中 这两个词都是代表索引的意思

 

 

 

 

 

 

 order by(有顺序的) (放在 limit子句之前的位置,否则报错)
 
select sessionname from tablename order by sessionname;//利用select语句从tablename表中检索列并按照session首字母顺序排列 默认是a-z 从小到大
select sessionname from tablename order by sessionname1,sessionname2;//先按照sessionname1排序再按sessionname2排序
select sessionname from tablename order by sessionname desc;//指定排序方向是反方向也就是z-a 从大到小
 
where(过滤数据)(放在from子句之后order by子句之前的位置,否则报错)
 
select sessionname from tablename where id=3;//只检索id=3的记录
select sessionname from tablename where id<>3;//只检索id不等于3的记录
select sessionname from tablename where id between 5 and 10;//只检索5到10范围内的记录
select * from tablename where id=3 and name='songjiang';//检索满足两个条件的记录
select * from tablename where id<4 and  number>258;//检索满where条件的记录
select * from tablename where id in(3,4);//此处的in操作符和 or很相似    该语句等价与,,,,where id=3 or id=4;
   只不过in使用起来更加美观,也更加放百年效率也比or要高
select * from tablename where id not in(3,4);//匹配除了in语句内部的那些记录
 
通配符过滤操作
 
like指定后面的是通配符匹配
% 百分号通配符  表示任何字符出现任何次数 %不匹配NULL
select * from tablename where name like 'song%';//匹配name中以song开头的数据记录
_ 下划线通配符  表示匹配任意一个字符 只能匹配一个字符 不能多也不能少
select * from tablename where name like 'song_';//匹配名字中类似songf的记录
 
正则表达式过滤
 
regexp 指定后面的是正则表达式
,,,,,正则表达式 后面专题来做
 
 
3.insert插入数据
insert into tablename(id,name,address)  values(id,name,address);//向表中插入数据
insert into tablename(id,name,address)  select id,name,address from tablename2;//向表中插入检索的数据
 
注意tablename和插入数据的字段对应,为了更好的让insert语句发挥作用,我们一般情况在tablename后面带上与value或者select对应的列名。
 
4.update更新数据
update tablename set name='songjiang' where  id=1;//更新id=1这一行的name字段值
update tablename set name='songjiang',address='liangshan' where id=1;//更新id=1这一行的多列数据
update tablename set address ='liangshan'  where id<5;/更新多行数据
update更新数据的时候一定要注意后面的where子句要带着,除非我们是要更新整个表的数据
 
5.delete删除数据
delete tablename from where id=1;//删除id=1这一行的数据
delete tablename from ;//删除表中所有数据
truncate table tablename;//删除表中所有数据 和上一条语句一个效果但是比delete 速度快
 
6.alter更新表
alter table tablename add mytable char(20);
 
7.drop删除表
drop删除表
drop table tablename;//删除tablename表
 
8.rename重命名表
rename table tablenameold to tablenamenew;//把表tablenameold重新命名为tablenamenew
rename table tablenameold1 to tablenamenew1,
                      tablenameold2 to tablenamenew2;//重命名一些表
 
9.view视图
什么是视图?视图是由查询结果形成的一张虚拟表
什么时候用到视图?如果某个查询结果用的非常频繁,那就用到了视图
create view viewname as select语句 创建视图的语句
使用视图有什么好处呢?
(1)简化查询语句
 比如:有一张商品表,我们经常要查每个栏目下商品的平均价格

   select cat_id,avg(shop_price) from goods gropy by cat_id;

  这时候我们就可以创建一张视图:

  create view avgPrice as select cat_id,avg(shop_price) from goods gropy by cat_id;

  创建完,以后我们要查每个栏目的平均价格时,只要这么写

  select * from avgPrice;就可以了。

(2)进行权限控制
   把表的权限封闭,但是开放相应的视图权限,视图里只开放部分数据列

  比如我们的goods商品表,我们不想让别人看到我们的销售价格,这时候我们就可以把查看商品表的权限封闭,创建   一张视图

  create view showGoods as select goods_id,goods_name from goods;

  不出现销售价格列就可以了。

 

10.存储过程

什么是存储过程?

存储过程就是一系列sql语句的集合,

为什么使用存储过程?

简化复杂的操作,提升性能,进行权限限制

 

11.数据类型

mysql中使用的数据类型

DOUBLE 支持双精度浮点数的一个数值类型

DATE YYYY-MM-DD格式的一个日期字段

TIME HH:MM:SS格式的一个时间字段

DATATIME YYYY-MM-DD HH:MM:SS 格式的一个混合日期/时间类型

YEAR 以YYYY或YY格式专门用于显示年份在1901到2155之间的一个字段

TIMESTAMP YYYYMMDDHHMMSS格式的一个时间戳类型

CHAR 最大长度不超过255个字符的定长字符串类型

VARCHAR 最大长度不超过255个字符的变长的变长字符串类型

TEXT 最大长度为65536个字符的字符串类型

BLOB 可变数据的二进制类型

ENUM 字符串类型,从一个预先定义的可能值的列表中选取一个

SET  字符串类型,从一个预先定义的可能值选取0个或者多个值

 

12.数据处理函数

文本处理函数:

(1)RTrim()  去掉字符串右边的空格

(2)LTrim()  去掉字符串左边的空格

(3)trim()   去掉字符串两边的空格

(4)upper()  将文本转换为大写

(5)lower()  将字符串转换为小写 

(6)length() 返回字符串的长度        例如: select length('wang');返回结果 4 返回字符串的长度

(7)left()   返回字符串左边的字符     例如:select left('wang',2); 返回结果wa 返回从左边开始的2个字符

(8)right()  返回字符串右边的字符     例如:select right('wang',2); 返回结果ng 返回从右边开始的2个字符

(9)locate() 找出串中的一个子串       例如:select locate('an','wang');返回结果2 返回an在wang中的位置

(10)substring() 返回子串的字符      例如:select substring('wang',2);返回结果ang 返回字符串wang从2开始的子串

(11)soundex() 返回串的soundex的值  例如:select * from tablename where soundex(name)=soundex('li'); 返回name字段中与li发音相同的数据记录

13.日期和时间处理函数

(1)adddate()  增加一个日期 select adddate('1998-01-01',3) 返回结果 1998-01-04

(2)addtime()  增加一个时间 select addtime('1998-12-21 19:23:56','1 1:23:23'); 返回结果是后面的expr2时间加到expr1时间上  expr1是时间或者日期表达式 expr2是时间表达式

(3)curdate()  返回当前日期  select curdate();

(4)curtime()   返回当前时间  select curtime();

(5)date()     返回日期时间的日期部分 select date('1998-02-12 23:23:45'); 结果是:1998-02-12

(6)