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. 检索数据

  1. limit3,4语句表示从第2行开始后四个数据,因为mysql的行号是从0开始
select * from products limit 3,4;
  1. 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;