day04-MySQL基础
一、数据库概述
1.为什么要使用数据库
使用数据库检索,相比从一个txt或者xml文档中检索只能通过线性搜索(从头到尾)去找,能大大的提高效率
2.数据库是什么
- 数据库是按照数据结构来组织、存储和管理数据的仓库(本质还是一些文件,只是这些文件使用了对应的数据结构来组织数据)
- 数据库管理系统(Database Management System:DBMS):专门用于管理数据库的计算机系统软件。能够为数据库提供数据的定义、建立、维护、查询和统计等操作功能,并完成对数据完整性、安全性进行控制的功能。
3.常见的关系数据库
- Oracle:运行稳定,可移植性高,功能齐全,性能超群!适用于大型企业领域,但是价格昂贵。
- DB2:速度快、可靠性好,适于海量数据,恢复性极强。适用于大中型企业领域,但是价格昂贵。
- SQL Server:全面,效率高,界面友好,操作容易,但是不跨平台。适用于中小型企业领域。
- MySQL:开源,体积小,速度快。适用于中小型企业领域。
4.SQL
SQL:结构化查询语言(Structured Query Language)。是关系型数据库标准语言,特点:简单,灵活,功能强大。
SQL包含6个部分:CRUD操作:CRUD(create, read, update, delete) 增删改查
- 一:数据查询语言(DQL):
其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。这些DQL保留字常与其他类型的SQL语句一起使用。 - 二:数据操作语言(DML):
其语句包括动词INSERT,UPDATE和DELETE。它们分别用于添加,修改和删除表中的行。也称为动作查询语言。 - 三:事务处理语言(TPL):
它的语句能确保被DML语句影响的表的所有行及时得以更新。TPL语句包括BEGIN TRANSACTION,COMMIT和ROLLBACK。 - 四:数据控制语言(DCL):
它的语句通过GRANT或REVOKE获得许可,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单个列的访问。 - 五:数据定义语言(DDL):
其语句包括动词CREATE和DROP。在数据库中创建新表或删除表(CREAT TABLE 或 DROP TABLE);为表加入索引等。DDL包括许多与人数据库目录中获得数据有关的保留字。它也是动作查询的一部分。 - 六:指针控制语言(CCL):
它的语句,像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用于对一个或多个表单独行的操作。
二、ORM思想

三、mysql安装与配置
- MySQL的默认端口是:3306
数据库默认字符集就是utf8
设置密码:admin
启动MySQL服务:
开启服务: net start 服务名 如: net start mysql56
关闭服务: net stop 服务名 如: net stop mysql56
MySQL服务.png
连接MySQL数据库:
在命令行中:找到安装目录下的bin录制中有个mysql的命令(环境变量)
1.格式:
mysql -u账户 -p密码 -h数据库服务器安装的主机 -P数据库端口
mysql -uroot -padmin -hlocalhost -P3306//// 127.0.0.1 //// 看飞秋,真实ip
若连接的数据库服务器在本机上,并且端口是3306。
2.可以简写: mysql -u root -p admin
image.png
- Navica工具:如果没有连接网线,那么在连接数据库的时候输入localhost是连接不上的,此时修改ip为127.0.0.1
四、MySQL数据库操作
1.数据类型

-
整数类型:
整数类型1.png

-
小数类型:
小数类型01.png

- 字符类型:
对于字符类型来说,一定要指定位宽. varchar(20)
- char(size)定长字符,0 - 255字节,size指N个字符数,若插入字符数超过设定长度,会被截取并警告。
- varchar(size) 变长字符,0 - 255字节,从MySQL5开始支持65535个字节,若插入字符数超过设定长度,会被截取并警告。


-
日期类型:
日期类型.png
- 二进制类型:
BIT:我们一般存储0或1,存储是Java中的boolean/Boolean类型的值。其他的大二进制类型,开发中一般都不用.

2. 建表
2.输入建表的命令;
CREATE TABLE 表名(
列名1 列的类型 [约束1] [约束2] ,
列名2 列的类型 [约束],
....
列名N 列的类型 [约束]
);
例子:primary key(主键),auto_increment (自增),default (默认值)
#创建表
create table `t_person`(
id bigint primary key auto_increment
, name varchar(20) default null
, sex bit(1) default 0
, age int(11) default 18
, address varchar(255))
注意:最后一行没有逗号
表名的问题:使用标识符时不要用SQL的关键字,如果用到的话怎么办呢?
比如新建一张桌子表:(table),但是table是数据库中的关键字.
解决方案一:使用反引号(`)把自定义的标识符引起来:`table`.
解决方案二:使用表名的前缀,一般的,习惯t_table.
sql cmd 命令:
查看表目录(了解):
SHOW TABLES;
查看表结构:
DESC table_name;
查看DDL语句:
SHOW CREATE TABLE table_name;
删除表:
DROP TABLE table_name;
3.表的约束
1.非空约束:NOT NULL(NK),不允许某列的内容为空。
2.设置列的默认值:DEFAULT。
3.唯一约束:UNIQUE(UK),在该表中,该列的内容必须唯一。
4.主键约束:PRIMARY KEY(PK), 非空且唯一。
5.主键自增长:AUTO_INCREMENT,从1开始,步长为1。(MySQL特有)
6.外键约束:FOREIGN KEY(FK),A表中的外键列的值必须参照于B表中的某一列(B表主键)。
----
主键设计:
1:单列主键,单列作为主键,建议使用。
复合主键,使用多列充当主键,不建议。
2:主键分为两种:
1)自然主键:使用有业务含义的列作为主键(不推荐使用);
2)代理主键:使用没有业务含义的列作为主键(推荐使用);
五、数据操作(DML)

1.简单查询:
保留字有WHERE,ORDER BY,GROUP BY和HAVING
> SELECT {*, column [alias],...}
FROM table_name [where...];
2.过滤查询:
比较运算符
= 等于
> 大于
>= 大于或等于
< 小于
<= 小于或等于
!=(<>) 不等于
注意:字符串和日期要用单引号扩起来.
要让MySQL查询区分大小写,可以用BINARY保留字 :(了解)
SELECT * FROM table_name WHERE BINARY productName='g9x'
SELECT * FROM table_name WHERE BINARY productName='G9X'
逻辑运算符
AND(&&) 如果组合的条件都是TRUE,返回TRUE
OR(||) 如果组合的条件之一是TRUE,返回TRUE
NOT(!) 如果下面的条件是FALSE,返回TRUE
范围查询
使用BETWEEN运算符显示某一值域范围的记录,
这个操作符最常见的使用在数字类型数据的范围上,但对于字符类型数据和日期类型数据同样可用。
格式:
SELECT <columnList> FROM table_name
WHERE 列名 BETWEEN minvalue AND maxvalue:闭区间。
集合查询
使用IN运算符,判断列的值是否在指定的集合中。
格式: WHERE 列名 IN (值1,值2....);
注:集合查询,值与值之间是OR的关系.
空值查询
格式:WHERE 列名 IS NULL;
设置某一列的数据为null, 列名=null
模糊查询
使用LIKE运算符执行通配查询,查询条件可包含文字字符或数字:
%通配符:可表示任意个数的任意字符。
_通配符:可表示一个任意字符。
通配符:用来实现匹配部分值得特殊字符。
3.结果集排序
使用ORDER BY子句将记录排序(先有结果,再排序)
ASC : 升序,缺省。
DESC: 降序。
ORDER BY 子句出现在SELECT语句的最后。
格式:
SELECT <selectList>
FROM table_name
WHERE 条件
ORDER BY 列名1 [ASC/DESC],列名2 [ASC/DESC]...;
注意:别名用于排序时不能加引号,否则,排序失效。
SELECT语句执行顺序:
先执行FROM--->接着执行WHERE--->再执行SELECT--->最后执行ORDER BY
4.分页查询
- 分页设计: 保留字 (limit )
假分页(内存分页/逻辑分页):所有数据已经存在内容中,只是显示部分而已,
优点:每次翻页时都从内存中取数据,翻页速度极快,简单
缺点:消耗内存大,容易内存溢出
真分页(数据库分页/物理分页):每次翻页都去数据库查询数据
优点:设计合理的情况下, 不会造成内存溢出
缺点:翻页较慢,复杂
想要分页,后台必须要知道的两个条件: 当前页 currentPage, 每一页多少条数据 pageSize.
起始索引: startIndex ===> (当前页:currentPage - 1) * 每一页的条数:pageSize.
select * from product limit (currentPage - 1) * pageSize , pageSize;
5.聚合函数
什么是分组函数/聚合函数/统计函数/聚集函数:
分组函数作用于一组数据,并对一组数据返回一条记录。
COUNT:统计结果记录数 (COUNT(*))
MAX: 统计计算最大值
MIN: 统计计算最小值
SUM: 统计计算求和
AVG: 统计计算平均值
6.数据备份和恢复
MySQL自身的数据库维护:
这功能默认的禁用的,需要修改my.ini配置后重启服务器
注释掉[client]no-beep
- 通过cmd命令进入dos窗口:
1.导出:mysqldump -u账户 -p 数据库名称>脚本文件存储地址
mysqldump -u root -padmin test> f:/test_bak.sql
2.导入:mysql -u 账户 -p 数据库名称< 脚本文件存储地址
mysql -u root -padmin test< f:/test_bak.sql
需要存在一个数据库叫做 目标数据库.
- Navicat工具的导入和导出:
