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)
浙公网安备 33010602011771号