第3.1课 上课 E购通电子商务平台, MySQL深入介绍

3_1

MySQL深入介绍

 数据库对象介绍

  1 表

数据库中的表与我们日常生活中使用的表格类似,它也是由行(Row) 和列(Column)组成的。

 

列由同类的信息组成,每列又称为一个字段,每列的标题称为字段名。

 

行包括了若干列信息项。

 

一行数据称为一个或一条记录,它表达有一定意义的信息组合。

 

一个数据库表由一条或多条记录组成,没有记录的表称为空表。

 

每个表中通常都有一个主关键字,用于惟一地确定一条记录。

  2 索引

索引是根据指定的数据库表列建立起来的顺序。

 

它提供了快速访问数据的途径,并且可监督表的数据,使其索引所指向的列中的数据不重复。

  3 视图

视图看上去同表似乎一模一样,具有一组命名的字段和数据项,但它其实是一个虚拟的表,在数据库中并不实际存在。

视图是由查询数据库表产生的,它限制了用户能看到和修改的数据。

 

由此可见,视图可以用来控制用户对数据的访问,并能简化数据的显示,即通过视图只显示那些需要的数据信息。

  4 图表

图表其实就是数据库表之间的关系示意图。

 

利用它可以编辑表与表之间的关系。

  5 缺省值

缺省值是当在表中创建列或插入数据时,对没有指定其具体值的列或列数据项赋予事先设定好的值。

  6 规则

规则是对数据库表中数据信息的限制。

 

它限定的是表的列。

  7 触发器

触发器是一个用户定义的SQL事务命令的集合。

 

当对一个表进行插入、更改、删除时,这组命令就会自动执行。

  8 存储过程

存储过程是为完成特定的功能而汇集在一起的一组SQL 程序语句,经编译后存储在数据库中的SQL 程序。

  10 用户

用户就是有权限访问数据库的人。

 

同时需要自己登陆账号和密码。

 

用户分为:管理员用户 和 普通用户。

 

管理员用户可对数据库进行修改删除等操作。

 

普通用户只能进行阅读查看等操作。

  11 序列

序列定义存储在数据字典中,序列通过提供唯一数值的顺序表用于简化程序设计工作。

  数据库对象的命名规则

   1必须以字母开头;

   2可包括数字和三个特殊字符(# _ $);

   3不要使用MySQL的保留字;

   4同一数据库下的对象不能同名;

 MySQL数据类型

  数值类型

   整型

   浮点型

  日期/时间类型

  字符类型

 自增长和默认值

在数据库应用,我们经常要用到唯一编号,用以标识记录。

 

在MySQL中可通过数据列的AUTO_INCREMENT属性来自动生成。

 

可在一定程度上代替Oracle等数据库中的sequence。

 

 

可在建表时可用“AUTO_INCREMENT=n”选项来指定一个自增的初始值。

 

可用ALTER TABLE table_name AUTO_INCREMENT=n命令来重设自增的起始值。

 

当插入记录时,如果为AUTO_INCREMENT数据列明确指定了一个数值,则会出现两种情况,

 

情况一,如果插入的值与已有的编号重复,则会出现出错信息,因为AUTO_INCREMENT数据列的值必须是唯一的;

 

情况二,如果插入的值大于已编号的值,则会把该值插入到数据列中,并使在下一个编号将从这个新值开始递增。也就是说,可以跳过一些编号。

 

如果自增序列的最大值被删除了,则在插入新记录时,该值被重用。

 

如果用UPDATE命令更新自增列,如果列值与已有的值重复,则会出错。如果大于已有值,则下一个编号从该值开始递增。

 

在使用AUTO_INCREMENT时,应注意以下几点:

 

AUTO_INCREMENT是数据列的一种属性,只适用于整数类型数据列。

 

设置AUTO_INCREMENT属性的数据列应该是一个正整数。

 

AUTO_INCREMENT数据列必须有唯一索引,以避免序号重复。

 

AUTO_INCREMENT数据列必须具备NOT NULL约束。

 

 

 

 

CREATE TABLE `e_user` (

`ID` int(11) NOT NULL AUTO_INCREMENT,

`USER_ID` varchar(50) DEFAULT NULL,

`PASS_WORD` varchar(50) DEFAULT NULL,

`NAME` varchar(50) DEFAULT NULL,

`PROVINCE` varchar(255) DEFAULT NULL,

`CITY` varchar(255) DEFAULT NULL,

`SEX` int(11) DEFAULT '1',

`BIRTHDAY` date DEFAULT NULL,

`EMAIL` varchar(50) DEFAULT NULL,

`PHONE` varchar(20) DEFAULT NULL,

`ADDRESS` varchar(255) DEFAULT NULL,

`ROLE` int(11) DEFAULT '1',

`CREATE_DATE` date DEFAULT NULL,

`ACTIVE_STATUS` int(11) DEFAULT '0',

`ACTIVE_CODE` varchar(255) DEFAULT NULL,

PRIMARY KEY (`ID`),

UNIQUE KEY `USER_ID` (`USER_ID`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

 MySQL存储引擎

 

 

  什么是存储引擎

关系数据库表是用于存储和组织信息的数据结构,可以将表理解为由行和列组成的表格,类似于Excel的电子表格的形式。

 

有的表简单,有的表复杂,有的表根本不用来存储任何长期的数据,有的表读取时非常快,但是插入数据时去很差;

而我们在实际开发过程中,就可能需要各种各样的表,不同的表,就意味着存储不同类型的数据,数据的处理上也会存在着差异,那么。

 

对于MySQL来说,它提供了很多种类型的存储引擎,我们可以根据对数据处理的需求,选择不同的存储引擎,从而最大限度的利用MySQL强大的功能,来更加适用不同场合。

 

  查看数据库引擎命令 show engines;

   InnoDB

InnoDB是一个健壮的事务型存储引擎,这种存储引擎已经被很多公司应用,为用户操作非常大的数据存储提供了一个强大的解决方案。

我们课程中使用的是MySQL 5.7版,InnoDB是作为默认的存储引擎。

InnoDB还引入了行级锁定和外键约束。

InnoDB存储引擎比较适合在以下几种情况下使用:

1.更新密集的表。InnoDB存储引擎特别适合处理多重并发的更新请求。

2.事务。InnoDB存储引擎是支持事务的标准MySQL存储引擎。

3.自动灾难恢复。与其它存储引擎不同,InnoDB表能够自动从灾难中恢复。

4.外键约束。MySQL支持外键的存储引擎只有InnoDB。

5.支持自动增加列AUTO_INCREMENT属性。

一般来说,如果需要事务支持,并且有较高的并发读取频率,InnoDB是不错的选择。

 

 

 

 

 

   MyISAM

MyISAM表是独立于操作系统的,这说明可以轻松地将其从Windows服务器移植到Linux服务器;

每当我们建立一个MyISAM引擎的表时,就会在本地磁盘上建立三个文件,文件名就是表明。

 

例如,我建立了一个MyISAM引擎的t_user表,那么就会生成以下三个文件:

1.t_user.frm,存储表定义;

2.t_user.MYD,存储数据;

3.t_user.MYI,存储索引;

 

MyISAM表不支持处理事务,这就意味着有事务处理需求的表,不能使用MyISAM存储引擎。

MyISAM存储引擎比较适合在以下几种情况下使用:

 

1.选择密集型的表。MyISAM存储引擎在筛选大量数据时非常迅速,这是它最突出的优点。

2.插入密集型的表。MyISAM的并发插入特性允许同时选择和插入数据。

例如:MyISAM存储引擎很适合管理邮件或Web服务器日志数据。

 

   MEMORY

使用MEMORY存储引擎的出发点是速度。为得到最快的响应时间,采用的逻辑存储介质是系统内存。

虽然在内存中存储表数据确实会提供很高的性能,但当mysqld守护进程崩溃时,所有的MEMORY数据都会丢失。

获得速度的同时也带来了一些缺陷。它要求存储在MEMORY数据表里的数据使用的是长度不变的格式,这意味着不能使用BLOB和TEXT这样的长度可变的数据类型,VARCHAR是一种可变长的类型,但因为它在MySQL内部当做长度固定不变的CHAR类型,所以可以使用。

 

MEMORY存储引擎比较适合在以下几种情况下使用:

1.目标数据较小,而且被非常频繁地访问。在内存中存放数据,所以会造成内存的使用,可以通过参数max_heap_table_size控制MEMORY表的大小,设置此参数,就可以限制MEMORY表的最大大小。

 

2.如果数据是临时的,而且要求必须立即可用,那么就可以存放在MEMORY表中。

 

3.存储在MEMORY表中的数据如果突然丢失,不会对应用服务产生实质的负面影响。

 远程连接数据库权限设置

当在其它机器连接MySQL的时候报

ERROR 1130: Host ’****.****.****.****′ is not allowed to connect to this MySQL server

这是表示当前机器IP(****.****.****.****)没有权限连接指定IP的主机上的MySQL数据库。

 

解决办法有二个:

 

1、对某个MySQL数据库登录账号进行授权操作。

例如,允许使用账号为:root 密码为:root的账号从任何主机连接到MySQL服务器。

grant select on 数据库.* to 用户名@登录主机 identified by "密码"

 

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;

 

 

说明:

GRANT 与 ON 之间是各种权限,例如:insert,select,update等 ON 之后是数据库名和表名,

第一个*表示所有的数据库,第二个*表示所有的表 root可以改成自定义的数据库用户名,@后可以跟域

 

名或IP地址,IDENTIFIED BY 后面的是登录密码,可以省略,即缺省密码或空密码。

 

 

 

 

2、允许用户root从ip为192.168.1.118 的主机连接到MySQL服务器,并使用root作为密码

 

GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.118′ IDENTIFIED BY 'root' WITH

 

GRANT OPTION;

E购通电子商务平台

 项目演示

前台演示地址:

http://localhost:9999/e_buy/

 

后台演示地址:

http://localhost:9999/e_buy/admin/main.action

 需求分析

  E购通大型电子商城平台设计说明书.doc

 项目搭建

  项目架构图

  创建数据库表

   E购通电子商务平台.sql

  拷贝jar包

   SpringMVC

   mybatis3

   mysql驱动

    mysql-connector-java-5.1.27.jar

   jstl

    javax.servlet.jsp.jstl-1.2.2.jar

   javamail

    mail.jar

    activation.jar

  整合SpringMVC

   web.xml文件中配置SpringMVC核心过滤器

   拷贝XXX-servlet.xml放到WEB-INF目录下

  项目分包

   com.yayadou.ebuy

    controller(控制器)

    service(业务逻辑)

    dao|mapper(数据访问)

    dto|pojo|bean|domain(数据传输)

    common(公共)

    exception(异常)

  整合mybatis3

   定义mybatis-conifg.xml放到src目录下

    配置mybatis3环境<environments />

     数据源(datasource)

      <dataSource type="POOLED" />

     事务管理器(transaction)

      <transactionManager type="JDBC" />

    属性加载配置

     <properties />

    全局资源配置

     <settings />

    数据转换类型别名

     <typeAliases />

    数据访问接口

     <mappers />

   定义SqlSessionFactoryUtils工具类专门操作SqlSession对象

  mybatis3数据访问接口与类型别名

   丫丫豆生成器

    com.yayadou.dto-1.0.RELEASE.jar

    dto.properties

 页面搭建

  后台

   拷贝assets、css、js、images、html

   一启动跳转到购物平台首页

   web.xml文件

    <error-page/>

    <jsp-config/>

<!-- 配置jsp全局信息 -->

<jsp-config>

<!-- 配置jsp属性组 -->

<jsp-property-group>

<!-- 拦截所有的jsp页面运用下面的属性设置 -->

<url-pattern>*.jsp</url-pattern>

<!-- EL表达式是否忽略 true:忽略 false:不忽略 -->

<el-ignored>false</el-ignored>

<!-- jsp页面的java脚本是否无效 true无效 false有效 -->

<scripting-invalid>true</scripting-invalid>

<!-- 在拦截到的jsp页面前面引入taglib.jsp页面 -->

<include-prelude>/WEB-INF/jsp/taglib.jsp</include-prelude>

</jsp-property-group>

</jsp-config>

   登录页面

  前台

   拷贝前台css、images、js、html

   项目一启动跳转到前台主面

 项目功能

  管理员用户登录功能

  在首页显示当前登录用户

  登录界面图形验证码功能

  后台用户退出实现

  登录拦截器实现

  前台用户异步登录

  用户管理

   查询用户

   修改用户

   删除用户

  商品类型管理

   分页查询商品类型

   添加商品类型

   修改商品类型

   删除商品类型

  商品管理

   多条件分页查询商品

   添加商品

   修改商品

   删除商品

  订单管理

   订单查询功能实现

   查询订单明细

  用户注册管理

   用户注册

   邮件激活

  商城首页数据展示功能

   货品类型展示(异步加载数据)

   图片轮播展示

   限时抢购展示

  商品列表展现功能

   货品类型展示(异步加载数据)

   货品按类型、标题分页展示

   全局搜索货品分页展示

  商品详细信息展示功能

   货品类型展示(异步加载数据)

   画廊图片效果实现

   货品的详细展现

   控制加一与减一功能

  购物车功能

   添加货品至购物车

   显示购物车中所有货品

   减少购物车中货品的数量

   增加购物车中货品的数量

   删除购物车中的货品

   全选与反选购物车中的货品

   提交用户选择中购物车中的货品

   购物车中没有商品时显示

  集成支付宝

  提交订单

  支付宝即时到账

   支付宝处理结果通知

  去支付(付款)

  我的订单

   查询当前用户下的所有订单

  前台用户退出

posted on 2018-01-31 22:45  東風★破  阅读(441)  评论(0)    收藏  举报

导航