美文网首页
区块链Two——数据库(1)

区块链Two——数据库(1)

作者: 秃头小公主 | 来源:发表于2020-11-10 09:59 被阅读0次

依旧是疯狂往脑子里灌输知识的一天,这些文章都是笔记。会在网站上搜索有关知识让后进行笔记摘要,主要以看简书某知名up主(简书说我营销没办法发出来了)为主,结合自己个人情况进行的笔记归纳总结。

下面关于gorm来自于GORM文档的笔记和总结,gorm一共四篇


为什么要使用数据库?

        因为不使用数据库只是简单地将区块链存储在内存中,一旦退出所有的内容都消失。我们就没办法使用这条链也没办法与他人分享。

要使用哪种数据库呢?

任何数据库都可以,这里我用的mysql并且会使用gorm,实习需要其他的可能我也不知道太多。就只做这部分数据库的笔记,想看BoltDB的可以去↑up主那里看。

那我们如何去做呢?(先整体的代码,之后分开来说)

快速开始

package main

import("

    github.com/jinzhu/gorm"

    _"github.com/jinzhu/gorm/dialects/sqlite"

)

typeProductstruct{

 gorm.Model 

 Code string

Price uint

}

func main(){ 

     db, err := gorm.Open("sqlite3","test.db")

if err !=nil{

    panic("连接数据库失败") 

}

deferdb.Close()

db.AutoMigrate(&Product{}) //自动迁移模式

db.Create(&Product{Code:"L1212", Price:1000}) //创建

var product Product //读取

db.First(&product,1) //查询id为1的product

productdb.First(&product,"code = ?","L1212")// 查询code为l1212的product

db.Model(&product).Update("Price",2000) //更新product的price为2000

productdb.Delete(&product) //删除product

}

1.连接数据库(导入驱动程序)

import(

"github.com/jinzhu/gorm"

_"github.com/jinzhu/gorm/dialects/mysql"

)

funcmain(){ 

db, err := gorm.Open("mysql","user:password@/dbname?charset=utf8&parseTime=True&loc=Local")

deferdb.Close()

}

2.迁移

(1)自动迁移(该模式保持更新到最新)

注意:自动迁移只会创建表,缺少列和索引,并且不会改变现有列的类型或删除未使用的列。

db.AutoMigrate(&User{})

db.AutoMigrate(&User{}, &Product{}, &Order{})

db.Set("gorm:table_options","ENGINE=InnoDB").AutoMigrate(&User{}) // 创建表时添加表后缀

(2)检查表是否存在

db.HasTable(&User{}) //检查模型`User`表是否存在

db.HasTable("users") //检查表`users`是否存在

(3)创建表

db.CreateTable(&User{}) // 为模型`User`创建表

db.Set("gorm:table_options","ENGINE=InnoDB").CreateTable(&User{}) // 创建表`users'时将“ENGINE = InnoDB”附加到SQL语句

/*

ENGINE = InnoDB的意思为:存储引擎是innodb;

innobd是一套放在mysql后台的完整数据库系统

*/

(4)删除表

db.DropTable(&User{}) //删除模型`User`的表

db.DropTable("users") //删除表`users`

db.DropTableIfExists(&User{},"users") //删除模型`User`的表和表`users`

(5)修改列

db.Model(&User{}).ModifyColumn("description","text") //修改模型`User`的description列的数据类型为`text`

(6)删除列

db.Model(&User{}).DropColumn("description") //删除模型`User`的description列

(7)添加外键

db.Model(&User{}).AddForeignKey("city_id","cities(id)","RESTRICT","RESTRICT") //第一个值:外键字段;第二个值:外键表(字段);第三个值:on_delete;第四个值:on_update

/*

on_delete(on_update与它相似为修改):它是指通过ForeignKey连接起来的对象被删除后,当前字段怎么变化。常使用的选项:

       No Action:父表(外键来源表)中删除对用记录时,先检查是否有对应外键,如果有则不许删除

       Restrict:同上

       Cascade:父表(外键来源表)中删除对应记录时,先检查是否有对应外键,如果有则删除外键在子表中的记录

       Set Null:父表(外键来源表)中删除对应记录时,先检查是否有对应外键,如果有则设置子表中外键为null(前提是该外键允许为null)

*/

(8)索引

db.Model(&User{}).AddIndex("idx_user_name","name") //为`name`列添加索引`idx_user_name`

db.Model(&User{}).AddIndex("idx_user_name_age","name","age") //为`name`, `age`列添加索引`idx_user_name_age`

db.Model(&User{}).AddUniqueIndex("idx_user_name","name") //添加唯一索引

db.Model(&User{}).AddUniqueIndex("idx_user_name_age","name","age") //为多列添加唯一索引

db.Model(&User{}).RemoveIndex("idx_user_name") //删除索引

相关文章

  • 区块链Two——数据库(1)

    依旧是疯狂往脑子里灌输知识的一天,这些文章都是笔记。会在网站上搜索有关知识让后进行笔记摘要,主要以看简书某知名up...

  • 李笑来分享笔记

    区块链生存指南: 区块链:历史数据不可篡改的数据库。 1.未来绝大多数的数据库应用都是区块链数据库,如:大数据,深...

  • 区块链基础知识问答

    什么是区块链 区块链是由区块组成的链。 本质上讲区块链是一个记账数据库。 这个数据库有两个特点: 1,去中心化。 ...

  • 区块链学习笔记整理

    区块链的技术定义: 区块链的存储基于分布式数据库; 数据库是区块链的数据载体,区块链是交易的业务逻辑载体; 区块链...

  • 区块链-3.区块链技术基础

    1.区块链定义 区块链可以理解为是基于区块链技术形成的公共数据库。而区块链技术是比特币的底层技术,包含现代密码学、...

  • 区块链技术基础(一)

    技术定义 区块链的存储基于分布式数据库; 数据库是区块链的数据载体,区块链是交易的业务逻辑载体; 区块链按时间序列...

  • 什么是区块链?

    区块链是一个分布式的数据库,实现了不可篡改的价值传递 1、区块链是个数据库。它是一个一个区块连接成的链,一个区块内...

  • 什么是区块链技术,区块链技术是什么意思

    技术1:区块+链 关于如何建立一个严谨数据库的问题,区块链的办法是:将数据库的结构进行创 新,把数据分成不同的区块...

  • 2018-07-20全球区块链联盟系列报道:区块链架构(一)

    区块链是什么: 1.区块链是一种不可篡改的分布式数据库。 2.数据库由区块按时间顺序连接而成 3.每个区块保存了一...

  • 2018-08-06 全球区块链联盟系列报道:区块链架构(一)

    区块链是什么: 1.区块链是一种不可篡改的分布式数据库。 2.数据库由区块按时间顺序连接而成 3.每个区块保存了一...

网友评论

      本文标题:区块链Two——数据库(1)

      本文链接:https://www.haomeiwen.com/subject/bzjlbktx.html