一、相关资源
mysql基础介绍:mysql学习
数据库终端快速补全工具:mycli
1.mysql对表的操作
1.创建表
步骤:
1. 先进入某一个数据库
2. 输入建表的命令
CREATE TABLE 表名(
列名1 列的类型 [约束],
列名2 列的类型 [约束],
....
列名N 列的类型 [约束]
);
注意:最后一行没有逗号
使用使用标识符时不要用SQL的关键字,如果用到的话怎么办呢?比如新建一张订单表(order),但是order是数据库中的关键字(排序使用).
解决方案一:使用反引号`把自定义的标识符引起来.
解决方案二:使用表名的前缀,一般的,习惯t_order.
2.查看表结构和删除表
查看表目录:SHOW TABLES;
查看表结构: DESC table_name;
查看DDL语句:SHOW CREATE TABLE table_name;
删除表:DROP TABLE table_name;
3.表的约束:表的约束(针对于某一列):
非空约束:NOT NULL(NK),不允许某列的内容为空。
设置列的默认值:DEFAULT。
唯一约束:UNIQUE(UK),在该表中,该列的内容必须唯一。
主键约束:PRIMARY KEY(PK), 非空且唯一。
主键自增长:AUTO_INCREMENT,从1开始,步长为1。(MySQL特有)
外键约束:FOREIGN KEY(FK),A表中的外键列的值必须参照于B表中的某一列(B表主键)。
主键设计:
1:单列主键,单列作为主键,建议使用。
复合主键,使用多列充当主键,不建议。
2:主键分为两种:
1)自然主键:使用有业务含义的列作为主键(不推荐使用);
2)代理主键:使用没有业务含义的列作为主键(推荐使用);
2.修改数据库表的信息:
1.修改表的字段(纵列)选项
修改表选项("[]"中括号里的内容表示可有可无的选项):
alter table 表名 表选项 [=] 新值
eg:alter table student charset utf8
新增字段(默认加到表的最后面):
alter table 表名 add [column纵列] 新字段名字 列类型 [列属性] [位置first/after字段名]
修改字段名:
alter table 表名 change 旧字段名 新字段名字 列类型 [列属性] [位置first/after字段名]
修改字段类型(属性):
alter table 表名 change 旧字段名 新字段名字 列类型 [列属性] [位置first/after字段名]
删除字段:
alter table 表名 drop 字段名
2.修改表
修改表名字(将student改为my_student):
rename table 旧名字 to 新名字
eg:rename table student to my_student
删除表:
drop table 表名[,表名]
单表查询(DQL上)
一、简单查询
1.简单数据查询
语法:
SELECT {*, column [alias],...}
FROM table_name;
说明:
SELECT 选择查询列表
FROM 提供数据源(表、视图或其他的数据源)
如果为 * 和创建表时的顺序一致。
可以自己调整顺序,在select后边加上要查询的列名。
2.避免重复数据-DISTINCT
消除结果中重复的数据。
需求:查询商品的分类编号。
语法:
SELECT DISTINCT 列名,...
FROM table_name;
3.实现数学运算查询
对NUMBER型数据可以使用算数操作符创建表达式(+ - * /)
对DATE型数据可以使用部分算数操作符创建表达式 (+ -)
运算符优先级:
1、乘法和除法的优先级高于加法和减法
2、同级运算的顺序是从左到右
3、表达式中使用"括号"可强行改变优先级的运算顺序
4.设置列的别名
设置列名的别名。
1、改变列的标题头;
2、用于表示计算结果的含义;
3、作为列的别名;
4、如果别名中使用特殊字符,或者是强制大小写敏感,或有空格时,都需加双引号;
二、过滤查询
1.比较运算符
比较运算符 含义
= 等于
> 大于
>= 大于或等于
< 小于
<= 小于或等于
!=(<>) 不等于
注意:字符串和日期要用单引号扩起来.
要让MySQL查询区分大小写,可以:
SELECT * FROM table_name WHERE BINARY productName='g9x'
SELECT * FROM table_name WHERE BINARY productName='G9X'
2.逻辑运算符
逻辑运算符 含义
AND(&&) 如果组合的条件都是TRUE,返回TRUE
OR(||) 如果组合的条件之一是TRUE,返回TRUE
NOT(!) 如果下面的条件是FALSE,返回TRUE
3.优先级规则
运算优先级 运算符
1 所有比较运算符
2 NOT
3 AND
4 OR
注意:括号将跨越所有优先级规则
分析SQL:SELECT * FROM product WHERE (NOT productName LIKE '%M%' AND salePrice > 100) OR (dir_id = 2)
4.范围查询 -BTEWEEN AND
使用BETWEEN运算符显示某一值域范围的记录,这个操作符最常见的使用在数字类型数据的范围上,但对于字符类型数据和日期类型数据同样可用。
格式:
SELECT
FROM table_name WHERE 列名 BETWEEN minvalue AND maxvalue:闭区间。
5.集合查询 -IN
使用IN运算符,判断列的值是否在指定的集合中。
格式: WHERE 列名 IN (值1,值2....);
6.空值查询 -IS NULL
IS NULL:判断列的值是否为空。
格式:WHERE 列名 IS NULL;
7.模糊查询
使用LIKE运算符执行通配查询,查询条件可包含文字字符或数字:
%通配符:可表示零或多个字符。
_通配符:可表示一个字符。
通配符:用来实现匹配部分值得特殊字符。
三、结果排序
排序通过ORDER BY 实现 ASC升序 DESC降序 默认是升序
1.排序语法和规则
2.按单列排序
3.按多列排序
4.列的别名排序
四、MySQL分页查询
分页设计:
假分页(内存分页):所有数据已经存在内容中,只是显示部分而已,
优点:每次翻页时都从内存中取数据,翻页速度极快,简单
缺点:消耗内存大,容易内存溢出
真分页(数据库分页):每次翻页都去数据库查询数据
优点:不会造成内存溢出
缺点:翻页比较慢,复杂
此时,我们讲解MySQL特有的分页方式(LIMIT,在Oracle12C中也提供类似的语法).
设置每页最多3条记录:
语法: LIMIT ?, ?
演示下公式的分页查询效果 LIMIT (currentPage-1) * pageSize, pageSize
LIMIT是MySQL内置函数,其作用是用于限制查询结果的条数。
1)其语法格式如下:
LIMIT[位置偏移量,]行数
其中,中括号里面的参数是可选参数,位置偏移量是指MySQL查询分析器要从哪一行开始显示,索引值从0开始,即第一条记录位置偏移量是0,第二条记录的位置偏移量是1,依此类推...,第二个参数为“行数”即指示返回的记录条数。
位置偏移量可以理解为跳过前xx条记录(元组).
2)基本用法
/*当没有指定位置偏移量时,只取4条时,可以这样写*/
SELECT* FROMYourTableName LIMIT 4;
/*当指定了位置偏移量时,从第3条起取4条时,可以这样写*/
/*因为索引是从0开始计数的,所以第3条对应的索引就是2*/
SELECT* FROMYourTableName LIMIT 2,4;
3)应用场合:分页
// 后台计算出页码、页数(页大小)
intcurPage = 2;
intpageSize = 10;
intstartRow = (curPage - 1) * pageSize;
1SELECT* FROMYourTableName LIMIT startRow,pageSize;
五、聚合函数
什么是聚合函数/统计函数:
聚合函数作用于一组数据,并对一组数据返回一条记录。
COUNT:统计结果记录数
MAX: 统计计算最大值
MIN: 统计计算最小值
SUM: 统计计算求和
AVG: 统计计算平均值