目录

 

一、数据库编码

1.1、建库de几种方式

1.2、建表代码

1.3、触发器

1.4、存储过程

二、数据库实现注意事项


一、数据库编码

1.1、建库de几种方式

1、创建数据库并设置默认字符集为utf-8.
CREATE DATABASE hotel DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

2、建库并设置字符集为utf-8.   使用此种建库方式
CREATE DATABASE hotel CHARACTER SET utf8;

3、创建数据库并设置默认字符集为gbk.
CREATE DATABASE hotel DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;

4、建库并设置字符集为gbk.
CREATE DATABASE hoe CHARACTER SET gbk;

1.2、建表代码

使用hotel库

use hotel

餐桌表  dinnerTable   

/*餐桌表*/
CREATE TABLE dinnerTable(
id INT PRIMARY KEY AUTO_INCREMENT,  /* 餐桌id  主键 = 非空 + 唯一*/
tableName VARCHAR(20) NOT NULL,     /* 餐桌名 非空约束*/
tableStatus INT DEFAULT 0,          /*餐桌状态  默认约束 0 空闲  1预定 不插入数据默认为0空闲*/
orderDate  DATETIME                 /*订桌时间*/
)

菜系表  foodType

/*菜系表*/
CREATE TABLE foodType(
id INT PRIMARY KEY AUTO_INCREMENT /*菜系主键*/
typeName VARCHAR(20)              /*类别名称*/
)

菜品种类  food

/*菜品种表*/
CREATE TABLE food(
id INT PRIMARY KEY AUTO_INCREMENT, /*主键*/
foodName VARCHAR(20) NOT NULL,     /*菜名称*/
foodType_id INT,                  /*所属菜系,外键字段*/
price DOUBLE,                     /*价格*/
mprice DOUBLE,                    /*会员价格*/
remark VARCHAR(200),              /*简介*/
img VARCHAR(100)                 /*图片*/
)

订单表 orders

/*订单表*/
CREATE TABLE orders(
id INT PRIMARY KEY AUTO_INCREMENT, /*主键*/
orderDate DATETIME,                /*下单日期*/
totalPrice DOUBLE,                 /*订单所有菜需要的金额*/
orderStatus INT DEFAULT 0,         /*订单状态 0 为结账 1 已结账*/
table_id INT,                      /*餐桌编号 外键*/ 
CONSTRAINT  orders_dinnerTable_fk FOREIGN KEY(table_id) REFERENCES dinnerTable(id) ON UPDATE CASCADE ON DELETE CASCADE 
/*订单表与餐桌表的关系约束(级联更新,级联删除、外键约束) */
)

订单明细表  orderDetail

/*订单明细表*/
CREATE TABLE orderDetail(
id INT PRIMARY KEY AUTO_INCREMENT, /*主键*/
order_id INT,                      /*外键*/
food_id INT,                      /*外键*/
foodCount INT,                    /*菜的数量*/
/*表内添加的约束 订单表与订单明细表*/
CONSTRAINT orderDetail_orders_fk FOREIGN KEY(order_id) REFERENCES orders(id) ON UPDATE CASCADE ON DELETE CASCADE,
/*菜品表与订单明细表的约束*/
CONSTRAINT orderDatail_food_fk   FOREIGN KEY(food_id)  REFERENCES food(id) ON UPDATE CASCADE ON DELETE CASCADE
)

登录注册表  Login

create table longin(
id int primary key auto_increment, /*用户ID 主键*/
userName varchar(12) not null,     /*用户名*/
age int,                           /*年龄*/
sex varchar(2) default '男',      /* 性别 默认为男*/
address varchar(20)               /*地址*/
)

约束关系

1、菜品表(food)与菜系表(foodType)的约束关系。
ALTER TABLE food ADD CONSTRAINT food_foodType_fk FOREIGN KEY(foodType_id) REFERENCES foodType(id)

2、订单表(orders)与餐桌表(dinnerTable)的约束关系。         在orders表中已经添加
3、订单明细表(orderDetail)与订单表(orders)的约束关系。     在orderDetail表中已经添加
4、订单明细表(orderDetail)与菜系表(foodType)的约束关系。   在orderDetail表中已经添加

1.3、触发器

概念:当操作了某张表时,希望同时触发一些动作/行为,可以使用触发器完成

特点:是一组操作单元(事物)。  事物特性:原子性,隔离性,永久性,一致性。

弊端:增加程序复杂度,维护困难。

优点:数据完整性得到保障,起约束作用

有六种触发器类型:

BEFORE INSERT(插入操作前触发器类型)

BEFORE UPDATE(修改操作前触发器类型)

BEFORE DELETE(删除操作前触发器类型)

AFTER INSERT(插入操作后的触发器类型)

AFTER UPDATE(修改操作后的触发器类型)

AFTER DELETE(删除操作后的触发器类型)

1.4、存储过程

概念:带逻辑的sql语句

优点:执行行在服务器端,效率高;减轻网络通信负担。

缺点:可移植性差,受不同厂商出版的数据库约束。存储过程的编写与调试,受不同数据库的限制。

语法:

delimiter $    声明存储过程的结束符

create procedure pro_test()        创建存储过程     pro_test()=>>存储过程的名字(参数列表) 

begin     开始

select * from employee;    

/*可以有多个sql语句                 sql语句+流程控制*/

end $                                     结束

CAll pro_test()      执行存储过程      call 存储过程名称(参数)

参数

IN: 表示输入数,可以携带数据的存储过程

OUT:表示输出参数可以从存储过程中返回结果

INOUT:表示输出输入参数,可以多功能输入,可以多功能输出

二、数据库实现注意事项

主键

作用:唯一 + 非空

外键

  • 作用:约束两种表的数据使两张表形成关联     本质是维护数据的一致性和完整性
  • 出现两种表的情况      解决数据冗余高问题: 独立出一张表
  • 被约束的表称为副表,约束别表的表称为主表,外键设置在副表上的
  • 主表的参考字段通用为主键
  • 存在外键约束,添加数据: 先添加主表,再添加副表
  • 存在外键约束,修改数据: 先修改副表,再修改主表
  • 存在外键约束,删除数据: 先删除副表,再删除主表