# 个人金融管理系统 ## 一、表结构 ```mssql CREATE DATABASE finance -- 创建储存数据库 ON( NAME=finance, FILENAME='D:\finance.mdf', SIZE=20mb, MAXSIZE=40MB, FILEGROWTH=10% )LOG ON( NAME=finance_log1, FILENAME='D:\finance_log.ldf', SIZE=10mb, MAXSIZE=20MB, FILEGROWTH=10% ); go USE finance; GO CREATE TABLE cost_type( -- 花费类型表 id INT PRIMARY KEY IDENTITY, -- 只是用来排序 cost_type varchar(50) NOT NULL UNIQUE -- 花费类型 ) go CREATE TABLE const_detail( -- 花费详情表 id INT PRIMARY KEY IDENTITY, -- 只是用来排序 detail varchar(100) NOT NULL, -- 花费详情 price FLOAT NOT NULL, -- 花费价格 goods_img IMAGE, cost_type varchar(50) FOREIGN KEY REFERENCES cost_type(cost_type), add_time DATETIME DEFAULT getdate(), cost_time char(20) ) go CREATE TABLE finance.dbo.finance_type -- 金融类型表,描述了我金融的存储区 ( id tinyint PRIMARY KEY IDENTITY, -- id 的类型为tinyint,大小介于0~255 finance_name VARCHAR(50) NOT NULL ) ``` ### 忘记自增数据 ​ 刚开始忘了对两个表的`id`字段进行自增,本来想使用`ALTER`修改`id`字段,后来发现**`T-SQL`只能在创建表时添加`IDENTITY`属性。** ​ 自增列不能直接修改,必须将原有ID列删除,然后重新添加一列具有identity属性的ID字段。 ### 插入外键数据: ```mssql use finance; go INSERT INTO cost_type(cost_type) VALUES ('正餐'), ('零食'), ('网购'), ('生活用品') ``` ### 插入数据 ```mssql use finance; go INSERT INTO dbo.const_detail (detail,price,goods_img,cost_type,cost_time) VALUES ('四个包子+一碗粥',5,'C:\Users\Godest\Desktop\四个包子5块钱.jpg','正餐','上午'), ('民餐:拌面',5,'C:\Users\Godest\Desktop\IMG_20190514_141303.jpg','正餐','中午'), ('一卷卫生纸+牙膏',8,'C:\Users\Godest\Desktop\1557815748121.jpg','生活用品','中午') ``` ### 对象名无效 ​ 在第二次插入数据时,提示:“对象名无效”,该问题当填写`VALUES`值时SSMS出现提示,经排查,发现时因为**字段名加了引号**,将引号去掉就行了。 ## 添加外键时提示“引用的表无效” ​ 添加外键的字段要求为主键或不是候选码,应该添加`UNIQUE`约束: ### 添加UNIQUE约束 ```mssql ALTER TABLE finance.dbo.finance_type ADD CONSTRAINT UQ_fin_name UNIQUE(finance_name) -- UQ_fin_name为约束名 -- finance_name为添加约束的字段列表 ``` ## 创建资金转移表 ```mssql CREATE TABLE finance.dbo.finance_switch ( id INT PRIMARY KEY IDENTITY , -- id 的类型为INT,可以为负数,此次应约束 finance_source VARCHAR(50) NOT NULL, -- 转移方 finance_end VARCHAR(50) NOT NULL, --接受方 CHECK(id>=0), FOREIGN KEY(finance_source) REFERENCES finance.dbo.finance_type(finance_name), FOREIGN KEY(finance_end) REFERENCES finance.dbo.finance_type(finance_name) ) GO INSERT INTO finance.dbo.finance_type (finance_name) VALUES ('农行卡'), ('老爸'), ('一卡通'), ('澡堂卡'), ('洗衣机'), ('饮水机'), ('其他人') -- 但是洗衣机不是充钱的,删除 DELETE FROM finance.dbo.finance_type WHERE finance_name='洗衣机' ``` ## 添加字段 ```mssql ALTER TABLE finance.dbo.finance_switch ADD num INT NOT NULL CHECK(num>=0) ``` ## 查看表结构 ### sp_help查询: ```mssql EXEC sp_help 'finance.dbo.const_detail' ``` 查询结果如下: ![1557817145157](assets/1557817145157.png) ![1557817197840](assets/1557817197840.png)