目录
一、数据库编码
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:表示输出输入参数,可以多功能输入,可以多功能输出
二、数据库实现注意事项
主键
作用:唯一 + 非空
外键
- 作用:约束两种表的数据使两张表形成关联 本质是维护数据的一致性和完整性
- 出现两种表的情况 解决数据冗余高问题: 独立出一张表
- 被约束的表称为副表,约束别表的表称为主表,外键设置在副表上的
- 主表的参考字段通用为主键
- 存在外键约束,添加数据: 先添加主表,再添加副表
- 存在外键约束,修改数据: 先修改副表,再修改主表
- 存在外键约束,删除数据: 先删除副表,再删除主表