随着移动互联网的结束与人工智能的到来大数据变成越来越重要,下一个成功者应该是拥有海量数据的,数据与数据库你应该知道。
数据库(Database)是存储与管理数据的软件系统,就像一个存入数据的物流仓库。
在商业领域,信息就意味着商机,取得信息的一个非常重要的途径就是对数据进行分析处理,这就催生了各种专业的数据管理软件,数据库就是其中的一种。当然,数据库管理系统也不是一下子就建立起来,它也是经过了不断的丰富和发展,才有了今天的模样。
在 20 世纪 50 年代中期以前的计算机诞生初期,其处理能力很有限,只能够完成一些简单的运算,数据处理能力也很有限,这使得当时的计算机只能够用于科学和工程计算。计算机上没有专用的管理数据的软件,数据由计算机或处理它的程序自行携带。当数据的存储格式、读写路径或方法发生变化的时候,其处理程序也必须要做出相应的改变以保持程序的正确性。
20 世纪 50 年代后期到 60 年代中期,随着硬件和软件技术的发展,计算机不仅用于科学计算,还大量用于商业管理中。在这一时期,数据和程序在存储位置上已经完全分开,数据被单独组织成文件保存到外部存储设备上,这样数据文件就可以为多个不同的程序在不同的时间所使用。
虽然程序和数据在存储位置上分开了,而且操作系统也可以帮助我们对完成了数据的存储位置和存取路径的管理,但是程序设计仍然受到数据存储格式和方法的影响,不能够完全独立于数据,而且数据的冗余较大。
从 20 世纪 70 年代以来,计算机软硬件技术取得了飞跃式的发展,这一时期最主要的发展就是产生了真正意义上的数据库管理系统,它使得应用程序和数据之间真正的实现的接口统一、数据共享等,这样应用程序都可以按照统一的方式直接操作数据,也就是应用程序和数据都具有了高度的独立性。
发展了这么多年市场上出现了许多的数据库系统,最强的个人认为是 Oracle,当然还有许多如:DB2、Microsoft SQL Server、MySQL、SyBase 等,下图列出常见数据库技术品牌、服务与架构。
数据库通常分为层次式数据库、网络式数据库和关系式数据库三种。
而不同的数据库是按不同的数据结构来联系和组织的。
而在当今的互联网中,最常见的数据库模型主要是两种,即关系型数据库和非关系型数据库。
当前在成熟应用且服务与各种系统的主力数据库还是关系型数据库。
代表:Oracle、SQL Server、MySQL
随着时代的进步与发展的需要,非关系型数据库应运而生。
代表:Redis、Mongodb
NoSQL 数据库在存储速度与灵活性方面有优势,也常用于缓存。
经过一系列的步骤,我们现在终于将客户的需求转换为数据表并确立这些表之间的关系,那么是否我们现在就可以在开发中使用呢?答案否定的,为什么呢!同一个项目,很多人参与了需求的分析,数据库的设计,不同的人具有不同的想法,不同的部门具有不同的业务需求,我们以此设计的数据库将不可避免的包含大量相同的数据,在结构上也有可能产生冲突,在开发中造成不便。
要设计规范化的数据库,就要求我们根据数据库设计范式――也就是数据库设计的规范原则来做。范式可以指导我们更好地设计数据库的表结构,减少冗余的数据,借此可以提高数据库的存储效率,数据完整性和可扩展性。
设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴德斯科范式(BCNF)、第四范式 (4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式 (3NF)就行了。
第一范式(1NF)
所谓第一范式(1NF)是指在关系模型中,对列添加的一个规范要求,所有的列都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。即实体中的某个属性有多个值时,必须拆分为不同的属性。在符合第一范式(1NF)表中的每个域值只能是实体的一个属性或一个属性的一部分。简而言之,第一范式就是无重复的域。
例如: 表 1-1 中,其中 "工程地址" 列还可以细分为省份,城市等。在国外,更多的程序把 "姓名" 列也分成 2 列, 即 "姓" 和 "名"。
虽然第一范式要求各列要保存原子性,不能再分,但是这种要求和我们的需求是相关联的,如上表中我们对 "工程地址" 没有省份,城市这样方面的查询和应用需求,则不需拆分,"姓名" 列也是同样如此。
第二范式(2NF)
在 1NF 的基础上,非 Key 属性必须完全依赖于主键。第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或记录必须可以被唯一地区分。选取一个能区分每个实体的属性或属性组,作为实体的唯一标识。
第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。简而言之,第二范式就是在第一范式的基础上属性完全依赖于主键。
例如: 表 1-1 中,一个表描述了工程信息,员工信息等。这样就造成了大量数据的重复。按照第二范式,我们可以将表 1-1 拆分成表 1-2 和表 1-3:
l 工程信息表:(工程编号,工程名称,工程地址):
表 1-2 工程信息表
工程编号 |
工程名称 |
工程地址 |
P001 |
港珠澳大桥 |
广东珠海 |
P002 |
南海航天 |
海南三亚 |
l 员工信息表(员工编号,员工名称,职务,薪资水平):
表 1-3 员工信息表
员工编号 |
员工姓名 |
职务 |
薪资水平 |
E0001 |
Jack |
工人 |
3000 / 月 |
E0002 |
Join |
工人 |
3000 / 月 |
E0003 |
Apple |
高级技工 |
6000 / 月 |
这样,表 1-1 就变成了两张表,每个表只描述一件事,清晰明了。
第三范式(3NF)
第三范式是在第二范式基础上,更进一层,第三范式的目标就是确保表中各列与主键列直接相关,而不是间接相关。即各列与主键列都是一种直接依赖关系,则满足第三范式。
第三范式要求各列与主键列直接相关,我们可以这样理解,假设张三是李四的兵,王五则是张三的兵,这时王五是不是李四的兵呢? 从这个关系中我们可以看出,王五也是李四的兵,因为王五依赖于张三,而张三是李四的兵,所以王五也是。这中间就存在一种间接依赖的关系而非我们第三范式中强调的直接依赖。
现在我们来看看在第二范式的讲解中,我们将表 1-1 拆分成了两张表。这两个表是否符合第三范式呢。在员工信息表中包含:"员工编号"、"员工名称"、"职务"、"薪资水平",而我们知道,薪资水平是有职务决定,这里 "薪资水平" 通过 "职务" 与员工相关,则不符合第三范式。我们需要将员工信息表进一步拆分,如下:
l 员工信息表:员工编号,员工名称,职务
l 职务表:职务编号,职务名称,薪资水平
现在我们已经了解了数据库规范化设计的三大范式,下面我们再来看看对表 1-1 优化后的数据表:
员工信息表 (Employee)
员工编号 |
员工姓名 |
职务编号 |
E0001 |
Jack |
1 |
E0002 |
Join |
1 |
E0003 |
Apple |
2 |
工程信息表 (ProjectInfo)
工程编号 |
工程名称 |
工程地址 |
P001 |
港珠澳大桥 |
广东珠海 |
P002 |
南海航天 |
海南三亚 |
职务表 (Duty)
职务编号 |
职务名称 |
工资待遇 |
1 |
工人 |
3000 / 月 |
2 |
高级技工 |
6000 / 月 |
工程参与人员记录表(Project_ Employee_info)
编号 |
工程编号 |
人员编号 |
1 |
P001 |
E0001 |
2 |
P001 |
E0002 |
3 |
P002 |
E0003 |
通过对比我们发现,表多了,关系复杂了,查询数据变的麻烦了,编程中的难度也提高了,但是各个表中内容更清晰了,重复的数据少了,更新和维护变的更容易了,哪么如何平衡这种矛盾呢?
在我们设计数据库时,设计人员、客户、开发人员通常对数据库的设计有一定的矛盾,客户更喜欢方便,清晰的结果,开发人员也希望数据库关系比较简单,降低开发难度,而设计人员则需要应用三大范式对数据库进行严格规范化,减少数据冗余,提高数据库可维护性和扩展性。由此可以看出,为了满足三大范式,我们数据库设计将会与客户、开发人员产生分歧,所以在实际的数据库设计中,我们不能一味的追求规范化,既要考虑三大范式,减少数据冗余和各种数据库操作异常,又要充分考虑到数据库的性能问题,允许适当的数据库冗余。
MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL 是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
MySQL 是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL 所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。
MySQL 官网:
MySQL 下载:
1.使用 C 和 C++ 编写,并使用了多种编译器进行测试,保证了源代码的可移植性。
2.支持 AIX、FreeBSD、HP-UX、Linux、Mac OS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris、Windows 等多种操作系统。
3.为多种编程语言提供了 API。这些编程语言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby,.NET 和 Tcl 等。
4.支持多线程,充分利用 CPU 资源。
5.优化的 SQL 查询算法,有效地提高查询速度。
6.既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中。
7.提供多语言支持,常见的编码如中文的 GB 2312、BIG5,日文的 Shift_JIS 等都可以用作数据表名和数据列名。
8.提供 TCP/IP、ODBC 和 JDBC 等多种数据库连接途径。
9.提供用于管理、检查、优化数据库操作的管理工具。
10.支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
11.支持多种存储引擎。
12.MySQL 是开源的,所以你不需要支付额外的费用。
13.MySQL 使用标准的 SQL 数据语言形式。
14.MySQL 对 PHP 有很好的支持,PHP 是目前最流行的 Web 开发语言。
15.MySQL 是可以定制的,采用了 GPL 协议,你可以修改源码来开发自己的 MySQL 系统。
16. 在线 DDL / 更改功能,数据架构支持动态应用程序和开发人员灵活性(5.6 新增)
17. 复制全局事务标识,可支持自我修复式集群(5.6 新增)
18. 复制无崩溃从机,可提高可用性(5.6 新增)
19. 复制多线程从机,可提高性能(5.6 新增)
20.3 倍更快的性能(5.7 新增)
21. 新的优化器(5.7 新增)
22. 原生 JSON 支持(5.7 新增)
23. 多源复制(5.7 新增)
24.GIS 的空间扩展(5.7 新增)
MySQL 数据库根据应用的需要准备了不同的引擎,不同的引擎侧重点不一样,区别如下:
MyISAM MySQL 5.0 之前的默认数据库引擎,最为常用。拥有较高的插入,查询速度,但不支持事务
InnoDB 事务型数据库的首选引擎,支持 ACID 事务,支持行级锁定, MySQL 5.5 起成为默认数据库引擎
BDB 源 自 Berkeley DB,事务型数据库的另一种选择,支持 Commit 和 Rollback 等其他事务特性
Memory 所有数据置于内存的存储引擎,拥有极高的插入,更新和查询效率。但是会占用和数据量成正比的内存空间。并且其内容会在 MySQL 重新启动时丢失
Merge 将一定数量的 MyISAM 表联合而成一个整体,在超大规模数据存储时很有用 \
Archive 非常适合存储大量的独立的,作为历史记录的数据。因为它们不经常被读取。Archive 拥有高效的插入速度,但其对查询的支持相对较差
Federated 将不同的 MySQL 服务器联合起来,逻辑上组成一个完整的数据库。非常适合分布式应用
Cluster/NDB 高冗余的存储引擎,用多台数据机器联合提供服务以提高整体性能和安全性。适合数据量大,安全和性能要求高的应用
CSV 逻辑上由逗号分割数据的存储引擎。它会在数据库子目录里为每个数据表创建一个 .csv 文件。这是一种普通文本文件,每个数据行占用一个文本行。CSV 存储引擎不支持索引。
BlackHole 黑洞引擎,写入的任何数据都会消失,一般用于记录 binlog 做复制的中继
EXAMPLE 存储引擎是一个不做任何事情的存根引擎。它的目的是作为 MySQL 源代码中的一个例子,用来演示如何开始编写一个新存储引擎。同样,它的主要兴趣是对开发者。EXAMPLE 存储引擎不支持编索引。
另外,MySQL 的存储引擎接口定义良好。有兴趣的开发者可以通过阅读文档编写自己的存储引擎。
MySQL 以前一直是开源免费的,被 Oracle 收购后有些变化:以前的版本都是免费的,社区版按 GPL 协议开源免费,商业版提供更加丰富的功能,但收费。
社区版的下载地址: (免费)
企业版的下载地址:(收费)
为了方便快捷的使用 MySQL 我已经准备好了一个绿化了的 MySQL,解压后就可以直接使用,不需要任何配置。
下载地址 1: 密码: sug9
下载地址 2:
下载后直接解压:
点击启动 PStart.exe 这是一个自定义菜单的小工具,为了整理资源用的。
里面有两个 MySQL 的绿色版软件 5.0,5.5
Navicat for MySQL 是一个数据库客户端管理工具
点击启动 PStart.exe 后的结果如下:
点击启动 MySQL 服务
。。。
执行 mysql 命令进入 mysql 命令模式,执行如下 SQL 代码
mysql> use mysql;
mysql> GRANT ALL ON *.* TO admin@'%' IDENTIFIED BY 'admin' WITH GRANT OPTION;
#这句话的意思 ,允许任何 IP 地址(上面的 % 就是这个意思)的电脑 用 admin 帐户 和密码(admin)来访问这个 MySQL Server
#必须加类似这样的帐户,才可以远程登陆。 root 帐户是无法远程登陆的,只可以本地登陆
1.mysqladmin 命令
格式如下(其中,USER 为用户名,PASSWORD 为新密码):
mysqladmin -u USER -p password PASSWORD
该命令之后会提示输入原密码,输入正确后即可修改。
例如,设置 root 用户的密码为 123456,则
mysqladmin -u root -p password 123456
2.UPDATE user 语句
这种方式必须是先用 root 帐户登入 mysql,然后执行:
UPDATE user SET password=PASSWORD('123456') WHERE user='root';
FLUSH PRIVILEGES;
3.SET PASSWORD 语句
这种方式也需要先用 root 命令登入 mysql,然后执行:
SET PASSWORD FOR root=PASSWORD('123456');
4.root 密码丢失的情况
首先我们先进入 mysql 的安装目录下的 bin 目录、之后打开 DOS 命令窗口,进入该目录下(一定要进入该目录,否则操作错误)
执行 DOS 命令:
输入命令:mysqld --install, 之后出现如下界面。提示安装服务成功。
注意是 mysqld --install 不是 mysql --install
如果要卸载服务,可以输入如下命令:mysqld --remove。出现如下界面。提示移除服务成功。
选择自定义:
安装的组件信息:
服务器软件目录:
数据目录:
点击 install 安装即可:
配置:
机器类型
是否支持事务功能:
innodb 表空间:
连接数量:
字符集设定:
配置 windows 管理相关:
配置安全选项,设置管理员的用户名与密码:
最后执行配置即可:
配置后,会启动服务。
新版的 MySQL 安装包大了很多,安装过程也有些不一样。
数据库 databse:数据的仓库
表 table:数据是保存在表内,保存在一个表内的数据,应该具有相同的数据格式
行:行用于记录数据
列:列用于规定数据格式
字段:数据的某个列
记录:行内的数据
SQL:用来管理数据的语言。结构化查询语言(SQL,Structured Query Language)
主键:唯一地标识表中的某一条记录,不能空,不能重复
用图例告诉学生。
列的类型:
数字类型
整数: tinyint、smallint、mediumint、int、bigint
浮点数: float、double、real、decimal
日期和时间: date、time、datetime、timestamp、year
字符串类型
字符串: char、varchar
文本: tinytext、text、mediumtext、longtext
二进制 (可用来存储图片、音乐等): tinyblob、blob、mediumblob、longblob
列的约束:
insert 语句可以用来将一行或多行数据插到数据库表中, 使用的一般形式如下:
Insert into 表名 (字段列表) values (值列表);
insert [into] 表名 [(列名 1, 列名 2, 列名 3, ...)] values (值 1, 值 2, 值 3, ...);
insert into students values(NULL," 张三 "," 男 ", 20,"18889009876");
有时我们只需要插入部分数据, 或者不按照列的顺序进行插入, 可以使用这样的形式进行插入:
insert into students (name, sex, age) values("李四", "女", 21);
select 语句常用来根据一定的查询规则到数据库中获取数据, 其基本的用法为:
select 字段名 from 表名称 [查询条件];
查询学生表中的所有信息:select * from students;
查询学生表中所有的 name 与 age 信息:select name, age from students;
也可以使用通配符 * 查询表中所有的内容, 语句: select * from students;
where 关键词用于指定查询条件, 用法形式为: select 列名称 from 表名称 where 条件;
以查询所有性别为女的信息为例, 输入查询语句: select * from students where sex="女";
where 子句不仅仅支持 "where 列名 = 值" 这种名等于值的查询形式, 对一般的比较运算的运算符都是支持的, 例如 =、>、<、>=、<、!= 以及一些扩展运算符 is [not] null、in、like 等等。 还可以对查询条件使用 or 和 and 进行组合查询, 以后还会学到更加高级的条件查询方式, 这里不再多做介绍。
示例:
查询年龄在 21 岁以上的所有人信息: select * from students where age > 21;
查询名字中带有 "王" 字的所有人信息: select * from students where name like "% 王 %";
查询 id 小于 5 且年龄大于 20 的所有人信息: select * from students where id<5 and age>20;
delete from 表名 [删除条件];
删除表中所有数据:delete from students;
删除 id 为 10 的行: delete from students where id=10;
删除所有年龄小于 88 岁的数据: delete from students where age<88;
update 语句可用来修改表中的数据, 基本的使用形式为:
update 表名称 set 列名称 = 新值 where 更新条件;
Update 表名 set 字段 = 值 列表 更新条件
使用示例:
将 id 为 5 的手机号改为默认的 "-": update students set tel=default where id=5;
将所有人的年龄增加 1: update students set age=age+1;
将手机号为 13723887766 的姓名改为 "张果", 年龄改为 19: update students set name="张果", age=19 where tel="13723887766";
alter table 语句用于创建后对表的修改, 基础用法如下:
基本形式: alter table 表名 add 列名 列数据类型 [after 插入位置];
示例:
在表的最后追加列 address: alter table students add address char(60);
在名为 age 的列后插入列 birthday: alter table students add birthday date after age;
基本形式: alter table 表名 change 列名称 列新名称 新数据类型;
示例:
将表 tel 列改名为 phone: alter table students change tel phone char(12) default "-";
将 name 列的数据类型改为 char(9): alter table students change name name char(9) not null;
基本形式: alter table 表名 drop 列名称;
示例:
删除 age 列: alter table students drop age;
基本形式: alter table 表名 rename 新表名;
示例:
重命名 students 表为 temp: alter table students rename temp;
基本形式: drop table 表名;
示例: 删除 students 表: drop table students;
基本形式: drop database 数据库名;
示例: 删除 lcoa 数据库: drop database lcoa;
- /*==============================================================*/
- /* DBMS name: MySQL 5.0 */
- /* Created on: 2017/3/5 10:29:05 */
- /*==============================================================*/
- drop table if exists Address;
- drop table if exists ArticleComment;
- drop table if exists ArticleType;
- drop table if exists Articles;
- drop table if exists DictSub;
- drop table if exists DictTop;
- drop table if exists OrderPdt;
- drop table if exists Orders;
- drop table if exists ProductComment;
- drop table if exists Products;
- drop table if exists Users;
- /*==============================================================*/
- /* Table: Address */
- /*==============================================================*/
- create table Address
- (
- `AddressId` int not null auto_increment comment '收货地址编号',
- `UserId` int not null comment '用户编号',
- `Province` varchar(50) not null comment '省',
- `City` varchar(50) not null comment '市',
- `County` varchar(50) not null comment '县/区',
- `Street` varchar(300) not null comment '详细地址',
- `RevName` varchar(30) not null comment '收货人姓名',
- `PostCode` varchar(20) comment '邮政编码',
- `Mobile` varchar(50) not null comment '手机',
- `Phone` varchar(50) comment '电话',
- `IsDefault` bool comment '是否为默认地址',
- primary key (AddressId)
- );
- alter table Address comment '收货地址';
- /*==============================================================*/
- /* Table: ArticleComment */
- /*==============================================================*/
- create table ArticleComment
- (
- `ArticleCommentId` int not null auto_increment comment '文章评论编号',
- `ArticleId` int not null comment '文章编号',
- `UserId` int not null comment '用户编号',
- `ArticleCommentContent` varchar(4000) not null comment '文章评论内容',
- `ArticleCommentDate` timestamp default CURRENT_TIMESTAMP comment '文章评论时间',
- `ArticleCommentState` int default 1 comment '状态',
- `ArticleRemark` int comment '打分',
- `ArticleCommentReserver1` varchar(4000) comment '备用1',
- `ArticleCommentReserver2` varchar(4000) comment '备用2',
- primary key (ArticleCommentId)
- );
- alter table ArticleComment comment '文章评论';
- /*==============================================================*/
- /* Table: ArticleType */
- /*==============================================================*/
- create table ArticleType
- (
- `ArticleTypeId` int not null auto_increment comment '文章栏目编号',
- `ArticleTypeName` varchar(200) comment '文章栏目名称',
- `ArticleTypeState` int default 1 comment '状态',
- `ArticleTypeDesc` varchar(4000) comment '文章栏目描述',
- `ArticleTypePicture` varchar(400) comment '文章栏目图片',
- `ArticleTypeReserve1` varchar(4000) comment '备用1',
- `ArticleTypeReserve2` varchar(4000) comment '备用2',
- primary key (ArticleTypeId)
- );
- alter table ArticleType comment '文章栏目';
- /*==============================================================*/
- /* Table: Articles */
- /*==============================================================*/
- create table Articles
- (
- `ArticleId` int not null auto_increment comment '文章编号',
- `ArticleTypeId` int not null comment '文章栏目编号',
- `ArticleTitle` varchar(400) not null comment '文章标题',
- `ArticleContent` text comment '文章内容',
- `ArticleDate` timestamp default CURRENT_TIMESTAMP comment '文章发布时间',
- `ArticleAuthor` varchar(200) comment '文章发布者',
- `ArticleFileName` varchar(100) comment '静态文件名',
- `ArticleThumbNail` varchar(200) comment '缩略图片',
- `ArticleAddition` varchar(200) comment '附件名称',
- `ArticleLevel` int comment '显示的优先级',
- `ArticleIsAllowComment` integer default 1 comment '是否允许评论',
- `ArticleState` int default 1 comment '状态',
- `ArticleHotCount` int comment '点击次数',
- `ArticleReserve1` varchar(4000) comment '备用1',
- `ArticleReserve2` varchar(4000) comment '备用2',
- `ArticleReserve3` numeric(8,0) comment '备用3',
- primary key (ArticleId)
- );
- alter table Articles comment '文章';
- /*==============================================================*/
- /* Table: DictSub */
- /*==============================================================*/
- create table DictSub
- (
- `SubId` int not null auto_increment comment '子项编号',
- `DictId` int not null comment '字典编号',
- `SubName` varchar(200) not null comment '子项名称',
- `SubDesc` varchar(4000) comment '子项描述',
- `SubReserve1` varchar(4000) comment '保留备用1',
- primary key (SubId)
- );
- alter table DictSub comment '字典子项';
- /*==============================================================*/
- /* Table: DictTop */
- /*==============================================================*/
- create table DictTop
- (
- `DictId` int not null auto_increment comment '字典编号',
- `DictName` varchar(100) not null comment '字典名称',
- `DictDesc` varchar(4000) comment '字典描述',
- `DictReserve1` varchar(4000) comment '保留备用',
- primary key (DictId)
- );
- alter table DictTop comment '字典';
- /*==============================================================*/
- /* Table: OrderPdt */
- /*==============================================================*/
- create table OrderPdt
- (
- `OrderPdtId` int not null auto_increment comment '订单商品编号',
- `Id` int not null comment '编号',
- `UserId` int not null comment '用户编号',
- `OrderId` int comment '订单号',
- `PdtAmount` int comment '订购数量',
- `PdtPrice` decimal comment '单价',
- `PdtReserve1` varchar(2000) comment '备用1',
- `PdtReserve2` varchar(4000) comment '备用2',
- primary key (OrderPdtId)
- );
- alter table OrderPdt comment '订单商品';
- /*==============================================================*/
- /* Table: Orders */
- /*==============================================================*/
- create table Orders
- (
- `OrderId` int not null auto_increment comment '订单号',
- `AddressId` int not null comment '收货地址编号',
- `OrderState` int default 1 comment '订单状态',
- `ExpressNO` varchar(50) comment '快递编号',
- `ExpressName` varchar(50) comment '快递名称',
- `PayMoney` decimal comment '应支付',
- `PayedMoney` decimal comment '已支付',
- `SendInfo` varchar(300) comment '发货人信息',
- `BuyDate` timestamp default CURRENT_TIMESTAMP comment '下单时间',
- `PayDate` datetime comment '支付时间',
- `SendDate` datetime comment '发货时间',
- `ReceivDate` datetime comment '收货时间',
- `OrderMessage` varchar(4000) comment '附言',
- `UserId` integer comment '用户编号',
- `OrderReserve1` varchar(4000) comment '备用1',
- `OrderReserve2` varchar(4000) comment '备用2',
- `OrderReserve3` decimal comment '备用3',
- primary key (OrderId)
- );
- alter table Orders comment '订单';
- /*==============================================================*/
- /* Table: ProductComment */
- /*==============================================================*/
- create table ProductComment
- (
- `ProductCommentId` int not null auto_increment comment '商品评论编号',
- `ProductId` int not null comment '商品编号',
- `UserId` int not null comment '用户编号',
- `ProductCommentContent` varchar(4000) comment '商品评论内容',
- `ProductCommentDate` timestamp default CURRENT_TIMESTAMP comment '商品评论时间',
- `ProductCommentState` int comment '状态',
- `ProductCommentRemark` int comment '打分',
- `ProductCommentReserve1` varchar(4000) comment '备用1',
- `ProductCommentReserve2` varchar(4000) comment '备用2',
- primary key (ProductCommentId)
- );
- alter table ProductComment comment '商品评论';
- /*==============================================================*/
- /* Table: Products */
- /*==============================================================*/
- create table Products
- (
- `Id` int not null auto_increment comment '编号',
- `Name` varchar(200) not null comment '名称',
- `SubIdColor` int not null comment '所属颜色',
- `SubIdBrand` int not null comment '所属品牌',
- `SubIdInlay` int not null comment '所属镶嵌',
- `SubIdMoral` int not null comment '所属寓意',
- `SubIdMaterial` int not null comment '所属种水',
- `SubIdTopLevel`
来源: http://www.cnblogs.com/best/p/6517755.html