- 基本查询:
表名product
Distinct去重复
#查询商品名和商品价格. select pname,price from product;
#去掉重复值. select distinct price from product;
#查询结果是表达式(运算查询):将所有商品的价格+10元进行显示.
select pname,price+10 from product;
#查询商品名称为“花花公子”的商品所有信息:
SELECT * FROM product WHERE pname = '花花公子'
#查询价格为800商品 SELECT * FROM product WHERE price = 800
#查询价格不是800的所有商品
SELECT * FROM product WHERE price != 800
SELECT * FROM product WHERE price <> 800
#查询商品价格大于60元的所有商品信息 SELECT * FROM product WHERE price > 60;
#查询商品价格在200到1000之间所有商品
SELECT * FROM product WHERE price >= 200 AND price <=1000; SELECT * FROM product WHERE price BETWEEN 200 AND 1000;
#查询商品价格是200或800的所有商品
SELECT * FROM product WHERE price = 200 OR price = 800;
#查询含有'霸'字的所有商品 SELECT * FROM product WHERE pname LIKE '%霸%';
#查询以'香'开头的所有商品 SELECT * FROM product WHERE pname LIKE '香%';
#查询第二个字为'想'的所有商品 SELECT * FROM product WHERE pname LIKE '_想%';
- 排序查询
SELECT * FROM 表名 ORDER BY 排序字段 ASC|DESC;
#ASC 升序 (默认) #DESC 降序
#在价格排序(降序)的基础上,以分类排序(降序) SELECT * FROM product ORDER BY price DESC,category_id DESC; # category_id是表格中的类型
#使用价格排序(降序) SELECT * FROM product ORDER BY price DESC;
#在价格排序(降序)的基础上,以分类排序(降序)
SELECT * FROM product ORDER BY price DESC,category_id DESC;
#显示商品的价格(去重复),并排序(降序)
SELECT DISTINCT price FROM product ORDER BY price DESC;
- 聚合查询
count:统计指定列不为NULL的记录行数;
sum:计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
max:计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
min:计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
#查询商品的总条数 SELECT COUNT(*) FROM product;
#查询价格大于200商品的总条数
SELECT COUNT(*) FROM product WHERE price > 200;
#查询分类为'c001'的所有商品的总和
SELECT SUM(price) FROM product WHERE category_id = 'c001';
- 分组查询
SELECT 字段1,字段2… FROM 表名 GROUP BY分组字段 HAVING 分组条件;
#统计各个分类商品的个数
SELECT category_id ,COUNT(*) FROM product GROUP BY category_id ;
#统计各个分类商品的个数,且只显示个数大于1的信息
SELECT category_id ,COUNT(*) FROM product GROUP BY category_id HAVING COUNT(*) > 1;
- JDBC
JDBC实际上就是一种执行sql语句的java api 是访问数据库的标准规范,能够为不同的关系型数据库提供统一访问
通过jdbc实现数据库的增删改查
- 数据库的数据类型
整数类型:tinyint, smallint, mediumint, int, bigint
浮点数类型:float, double
定点小数:decimal
日期时间类型:year, time, date, datetime, timestamp
字符串类型:char, varchar, text, enum, set
二进制类型:bit, binary, varbinary, blob
- 数据库的索引
索引是快速搜索的关键
索引分为单列索引, 组合索引
单列索引:一个索引只包含单个列,一个表有多个单列索引
组合索引:一个索引包含多个列
Mysql的索引类型:
普通索引
唯一索引
主键索引
组合索引
索引的不足: 降低更新表的速度
建立索引会占用磁盘空间的索引文件,如果在一个表上创建太多的索引
什么情况下使用索引造成索引失效:
对索引进行运算,隐式转换,使用oracl内部函数,sql代码中使用双引号不使用分区索引,
- 数据库的优化
- 避免全表扫描,该考虑在where以及order by涉及的列上建立索引
- 避免在where子句中进行null值判断
- 避免在where子句中使用!=或者<>操作符
- 避免在where子句中使用or做链接符
- In, not in 慎用
- 避免在where中使用参数
- 避免where子句中对字段进行表达式操作,函数操作
- 不要再where子句中=左边进行函数算术运算或者其他表达式运算
- 尽量避免没有意义的查询
- 用exists代替in
- 在表中创建索引时尽量不要超过6个否则会降低insert和update的效率
- 不要使用*,使用具体的字段代替*
- 尽量使用varchar, nvarchar代替char, nchar
- 避免频繁创建和删除临时表,使用表变量代替临时表
- 尽量避免大事务的操作提高系统并发能力
- Mysql的事务隔离级别
事务基本要素:原子性,一致性,持久性,隔离性
事务的并发问题:脏读,幻读,不可重复度
事务的隔离级别:读未提交,读已提交,重复度,序列化
默认的事物隔离级别是:读已提交
- 数据库的版本控制是什么
Mvcc
- Mysql引擎innodb和myisam的区别
MyIASM是MySQL默认的引擎,但是它没有提供对数据库事务的支持,也不支持行级锁和外键
Innodb引擎提供了对数据库ACID事务的支持,并且实现了SQL标准的四种隔离级别。该引擎还提供了行级锁和外键约束,它的设计目标是处理大容量数据库系统,它本身其实就是基于MySQL后台的完整数据库系统
1、MyIASM是非事务安全的,而InnoDB是事务安全的
2、MyIASM锁的粒度是表级的,而InnoDB支持行级锁
3、MyIASM支持全文类型索引,而InnoDB不支持全文索引
4、MyIASM相对简单,效率上要优于InnoDB,小型应用可以考虑使用MyIASM
5、MyIASM表保存成文件形式,跨平台使用更加方便