用户:
小熊与雪查看:409 回复:13 评论:16 创建时间:2021-03-11T20:10:51
你在做BOX3.0是,是不是想做存档功能?
你在游玩别人的地图时,是不是十分羡慕?
如果是,那么这篇教程十分适合你!
闲话少说,进入主题!
1、注意
使用SQL语句时,将语句包含在反引号 ` ` 里面。反引号前添上db.sql如:
db.sql`SELECT * FROM users`
2、技巧
用${}可以将大括号内的值转变为适用语句的类型,可以与字符串相拼接,注:要用反引号引起来。如:
console.log(`${entity.player.name}进入地图`)//益智作者进入地图
`SELECT * FROM users WHERE name=${entity.player.name}` //
3、类型
可以存入表中的类型有:
TEXT字符串 'abc' 、`${entity.player.name}`
INTEGER整数 3、157、-21
REAL浮点(小数) 3.42 、 5.18 、-0.09
NUMERIC其余类型 true、flase
以上是SQL常用的类型
4、表
这是一个SQL表格:
序号 用户名 钱
—————————————
1 '益智作者' 500
2 '吉吉喵' 3000
async function createTable() {
await db.sql`CREATE TABLE IF NOT EXISTS players (
name VARCHAR(50) PRIMARY KEY UNIQUE NOT NULL,
money INTEGER DEFAULT ''
)`;
}
//普通键的创建方法:属性名 类型 DEFAULT 初始值
1、因为要用到await,所以要用async function
2、IF NOT EXISTS players 当不存在players表时,EXISTS存在
3、除搜索键外其他都是普通键 如:
async function createTable() {
await db.sql`CREATE TABLE IF NOT EXISTS players (
name VARCHAR(50) PRIMARY KEY UNIQUE NOT NULL,
money INTEGER DEFAULT '',
ifBig NUMERIC DEFAULT true,
say TEXT DEFAULT ''
)`;
}
//name是搜索键,以后会讲
4、赋值后要加逗号,最后一行不能加,见上代码3-6行末尾(这也是我经常犯的错误)
可以看到,表格主要分为 序号、属性与数值,SQL表创建出来后,里面是没有数据的,这个我们以后再说
这节课,我们主要学了类型与技巧,请大家多多复习~
具体怎么创建,我们在下节课将会运用今天的知识来解决!
留个作业:
1、在上表中,用户名、钱分别是什么类型?
2、用普通键的创建方法:属性名 类型 DEFAULT 初始值 的方法分别创建一个整数、浮点、字符串、其他类型的普通键
FML饭米粒async function createTable() {
await db.sql`CREATE TABLE IF NOT EXISTS players (
name VARCHAR(50) PRIMARY KEY UNIQUE NOT NULL,
money INTEGER DEFAULT ''
)`;
}
这里的money是整数类型,默认值应该为0,不是‘’
点赞0
评论
OK
FML饭米粒求助!!!
db.sql`CREATE TABLE IF NOT EXISTS VIP(
id TEXT PRIMARY KEY UNIQUE NOT NULL,
vip NUMERIC DEFAULT false
)`
world.onPlayerJoin(async ({entity})=>{
const data = await db.sql`SELECT vip FROM VIP WHERE id = ${entity.player.userKey}`
for (const vip of data) {
const data = JSON.stringify(vip)
}
console.log(data)
if(data == 1){
entity.player.invisible=true;
entity.player.canFly=true;
textDialog(entity,'您好,尊贵的VIP用户,您已获得飞行及隐身权限!','VIP系统')
}else{
if(data && !data.length){
await db.sql`INSERT INTO VIP(id, vip) VALUES (${entity.player.userKey}, false)`
}
await db.sql`UPDATE vip SET vip = "true" WHERE id = ${entity.player.userKey}`
………………
为什么我执行了以后告诉我data是[object Object]?请问如何修改?
点赞0
评论
db.sql必须用async函数包起来,db前要加await
这只是创建函数,用户还没存过档,调取不到资料
需要确保用户保存过才能用来调取
我之前db.sql都不用函数包的
用户的我确保他是存过档的,我打错了,console.log确认有用户数据时打印的
SKQAPRIMARY KEY到底是干嘛用的
还有讲一下ALTER和SELECT
点赞0
评论
SELECT在调用一讲会讲到,ALTER我还要学学
PRIMARY KEY 就是将数据设置为主键 所谓主键 就是可以唯一标识表中某一行的属性(或属性组),说白了 就是可以确保执行数据更新、删除灯操作的时候不会出现这种搞错对象分不清,张冠李戴的错误
SKQA作业:
1.用户名是字符串,钱是整数
2.
async function createTable(){
await db.sql`CREATE TABLE IF NOT EXISTS table(
int INTEGER DEFAULT 0
fl REAL DEFAULT 0.1 --初始值的类型必须是值的类型吗?
str TEXT DEFAULT '' --和VARCHAR类型有什么区别?
bool NUMERIC DEFAULT true
)
`
}
createTable()//这个已经是异步函数了,需要再套async吗?点赞0
评论
我学废啦
异步函数调用时不用async了哦~
其他问题下一集讲 搜索【box3.0】SQL教程,我都会以这个开头,便于查询呢~
第2期出来了! https://shequ.codemao.cn/community/370518
后面没加“,”哦。没有搜索键,你看看第二期教程,顶置了。VARCHAR不是类型哦,第二期也有讲。是的,初始值得是值的类型,否则会报错的~