《Mysql必知必会》笔记---基础部分
1. Java和Mysql数据类型对应
-
bolb :
对于bolb,一般用于对图片
的数据库存储,原理是把图片打成二进制,然后进行的一种存储方式,在java中对应byte[]数组。 -
boolen:
对于boolen类型,在mysql数据库中,个人认为用int类型代替较好,对bit操作不是很方便,尤其是在具有web页面开发的项目中,表示0/1,对应java类型的Integer较好。 -
decimal:
decimal列的声明语法是decimal(m,d)。
在mysql5.1中,参数的取值范围:
m是数字的最大数(精度)。
其范围为1~65(在较旧的MySQL版本中,允许的范围是1~254)。
d是小数点右侧数字的数目(标度)。
其范围是0~30,但不得超过M。 -
说明:
float占4个字节,
double占8个字节,
decimail(M,D)占M+2个字节。
如DECIMAL(5, 2) 的最大值为9 9 9 9 . 9 9,因为有7 个字节可用。
2. 检索数据
- limit3,4语句表示从第2行开始后四个数据,因为mysql的行号是从0开始
select * from products limit 3,4;
- distinct作用于列,不能指定部分列,而是所有列都是不同的
select distinct vend_id from products;
3. 排序数据
- 如果没有进行排序,返回的是
插入数据库的顺序
(默认认为顺序没有意义)
单个列排序
select prod_name from products order by prod_name;
- order by 可以使用
非选择的列
默认升序
多个列排序
select prod_id,prod_price,prod_name
from products
order by prod_price,prod_name;
排序完全按照顺序排序
,即第一个列出现重复才排第二个列
指定排序方向
- 为了进行降序排列需要使用
DESC关键字
select prod_id,prod_price,prod_name
from products
order by prod_price DESC,prod_name;
- 如果想要每个列都进行降序排列,需要在
每个列后加一个DESC关键字
- ASC是升序,但是没有多大用处,因为默认升序
- 想要进行更复杂的排序,需要找到数据库管理员
4. 过滤数据
4.1 基本过滤语句
select prod_name,prod_price
from products
where prod_name = 'fuses';
- mysql
不区分大小写
,对结果也是如此 - 单引号用于
限定字符串
范围值的检查
select prod_name,prod_price
from products
where prod_price BETWEEN 5 AND 10;
数据包括制定的值
空值检查
- 跟在where 后使用 IS NULL子句
select prod_name
from products
where prod_price IS NULL;
- NULL代表未知,具有特殊意义,数据库不知道它们是否匹配,
在匹配过滤或不匹配过滤中,不返回它们
4.2 操作符
AND和OR操作符
- AND相当于
与运算
- OR相当于
或运算
select prod_name,prod_price
from products
where vend_id = 1002 OR vend_id = 1003 AND prod_price >=10
SQL在处理OR操作符之前优先处理AND操作符
- 上述的语句可以理解为
供应商1003制造的任何价格大于等于10以上的产品或者1002制造的任何产品
- 使用圆括号可以准确的让sql识别,
消除歧义
select prod_name,prod_price
from products
where (vend_id = 1002 OR vend_id = 1003) AND prod_price >=10
IN操作符
- IN 用来指定
条件的范围
,范围内的每个条件都可以进行匹配
select select prod_name,prod_price
from products
where vend_id IN (1002,1003)
ORDER BY prod_name;
- IN完成的是跟OR相同的功能
使用IN的好处
- 在较长的清单中,使用IN更清晰
- 使用IN时,计算的次序更好管理
使用IN比OR执行快
- 可以
包含其他select语句
NOT操作符
- 否定后边所跟的条件,一般配合IN使用
select select prod_name,prod_price
from products
where vend_id NOT IN (1002,1003)
ORDER BY prod_name;
4.3 通配符
- 用来匹配一部分特殊字符
LIKE操作符
- LIKE指示Mysql使用通配符匹配而不是等值匹配
- 最常使用的是“
%
”
select select prod_name,prod_price
from products
where prod_name LIKE 'jet%';
- 将搜索jet开头任意字符
- 依然
不支持匹配NULL
select select prod_name,prod_price
from products
where prod_name LIKE '_ ton anvil';
- “
_
”只匹配一个字符,不能多不能少
使用通配符的技巧
- 不要过度使用,因为其
性能差
- 尽可能先用其他条件筛选
- 注意通配符的位置
5. 用正则表达式进行搜索
基本字符匹配
select select prod_name,prod_price
from products
where prod_name REGEXP '.000'
ORDER BY prod_name;
进行或匹配
select select prod_name
from products
where prod_name REGEXP '1000|2000'
ORDER BY prod_name;
匹配几个字符之一
select select prod_name
from products
where prod_name REGEXP '[123] Ton'
ORDER BY prod_name;
6. 创建计算列
拼接列
- Concat()可以用来拼接两个列
select Concat(vend_name , '(' , vend_country , ')' )
from vendors
ORDER BY vend_name;
- RTrim()可以删除多余空格
使用别名
- 使用AS字符可以使用别名
select Concat(vend_name , '(' , vend_country , ')' ) AS vend_title
from vendors
ORDER BY vend_name;
执行算术运算
select prod_id,quantity,item_price
quantity * item_price AS expanded_price
from orderitems
where order_num = 2005;