aardio 官方社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 44537|回复: 13

MySQL,MariaDB数据库操作

[复制链接]

166

主题

2154

回帖

1万

积分

管理员

积分
13056
发表于 2013-7-14 18:23:09 | 显示全部楼层 |阅读模式

MariaDB实际上是MySQL的兼容分支, 下面的代码都可以支持。
mysql.client使用MariaDB提供的客户端组件(已内嵌在支持库中)

  1. import console;
  2. import mysql.client;

  3. console.showLoading(" 正在连接测试数据库" )
  4. var dbClient,err = mysql.client(
  5.     server = "db4free.net"; //数据库服务器,可省略默认为localhost
  6.     uid = "aardio_mysql";//用户名,可省略默认为root
  7.     pwd = "aardio.com";
  8. );

  9. if(!dbClient){
  10.     console.log("如果是有人无聊修改了密码,请自行到db4free.net申请免费数据库")
  11.     return console.logPause(err);
  12. }

  13. //选择数据库
  14. dbClient.selectDb("aardio_mysql")  

  15. //查询数据并返回记录集
  16. var result = dbClient.stepQuery("select version()");
  17. console.dump(result)

  18. /*
  19. dbClient.query(sql,...) 等所有需要格式化SQL语句的函数,
  20. 内部都是调用 dbClient.format(sql,...) 函数转换 SQL 语句。

  21. 如果SQL参数后面的格式化参数是一个数组,SQL中的占位符请使用?或??,
  22. 如果格式化参数是非数组的表参数,SQL中的占位符请使用@开头的命名参数。
  23. 如果格式化参数不是表,则调用  string.format(sql,...) 格式化。

  24. dbClient.format()对于数值和布尔值不作转换,
  25. 字符串会进行安全转义处理(可避免SQL非法注入),buffer会转换为16进制编码。
  26. 如果参数值是数组则展开为列表,例如 'a','b',
  27. 如果是嵌套数组则展开为分组列表, 例如('a','b'),('c','d')
  28. 如果参数值是命名表对象(非数组),则格式化为SQL键值对(键调用dbMysql.escapeId 函数格式化 )。
  29. */

  30. //为避免有人乱改测试数据库表结构又没有删除,先删除旧的表
  31. dbClient.query("DROP TABLE IF EXISTS ??",{library});
  32. //上面的SQL会格式化为 "DROP TABLE IF EXISTS `library`"

  33. //执行SQL语句,注意mysql表名、字段名可包含于反引号内(用键盘左上角ESC下方的按键内)
  34. var ret,err = dbClient.query("CREATE TABLE IF NOT EXISTS `library` (
  35.     `id` int NOT NULL AUTO_INCREMENT,
  36.     `name` VARCHAR(100) NOT NULL,
  37.     `auditing` TINYINT(1) DEFAULT '0',
  38.     `bytes` BLOB,
  39.     `time` DATETIME DEFAULT CURRENT_TIMESTAMP,
  40.     PRIMARY KEY (`id`),
  41.     UNIQUE KEY `id` (`id`)
  42. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;");
  43. console.dump(ret,err)

  44. var dbTable,err  = dbClient.listTables()
  45. for tbl in dbTable.each(){
  46.     console.log("发现数据表:",tbl);
  47. }
  48.    
  49. var ret,err = dbClient.query("INSERT `library` VALUES(null,'测试',@num,@str,@time)",{
  50.     num = 123;
  51.     str = raw.buffer("测试:'这是字符串!'命名参数可以自动处理字符串转义");
  52.     time = time();
  53. } )

  54. console.dump(ret)

  55. //如果是占位符对应的格式化参数是嵌套数组则展开为分组列表, 例如('a','b'),('c','d')
  56. var ret,err = dbClient.query("INSERT `library`(`name`,`auditing`,`bytes`,`time`) VALUES ?",{ {
  57.     {'嵌套数组1',123,"测试xx",time()}
  58.     {'嵌套数组2',123,raw.buffer("测试xxx2"),time()}
  59. } } )
  60. console.dump(ret,err);

  61. var ret,err = dbClient.query("INSERT `library`(`name`,`auditing`,`bytes`,`time`) VALUES('测试2',@num,@str,@time)",{
  62.     num = 123;
  63.     str = "测试2";
  64.     time = time().addday(-2);
  65. } )
  66. console.dump(ret,err);

  67. //如果格式化参数值是数组则展开为列表,例如 'a','b',示例如下:
  68. dbClient.query("DELETE FROM `library` WHERE `name` IN (?)",{{'嵌套数组1','嵌套数组2'}})

  69. //查询数据并返回记录集
  70. var result = dbClient.query("SELECT * FROM `library` WHERE time >=@time",{
  71.     time = tostring(time().addday(-3),"%Y/%m/%d")
  72. });
  73. for name,auditing,bytes in result.each(){
  74.     console.log("输出", name,auditing,bytes ); //逐行输出所有记录
  75. }

  76. //查询数据并返回全部记录集到一个表
  77. var result = dbClient.query("SELECT * FROM `library` WHERE time >= (
  78.     SELECT DATE(`time`) FROM `library` ORDER BY `time` DESC LIMIT 0,1
  79. )");
  80. console.dumpJson(result.getTable())

  81. //创建存储过程
  82. var ret,err = dbClient.query("
  83. CREATE PROCEDURE demo(IN n int)  
  84. BEGIN     
  85.     SET n=123;   
  86.     SELECT n;  
  87. END;   
  88. ")

  89. //调用存储过程
  90. var ret,err = dbClient.getTable("CALL demo(@n)",{
  91.     n=123 //传入命名参数
  92. });

  93. console.dump(ret);

  94. //移除存储过程
  95. console.dump( dbClient.query("DROP PROCEDURE IF EXISTS `demo`") );

  96. //移除数据库
  97. dbClient.query("DROP TABLE IF EXISTS `library`");
  98. console.pause();
复制代码
mysql.client 连接数据库的参数参考了sqlServer连接参数的用法,
用sever参数指定数据库服务器、用uid指定数据库用户名、pwd指定用户密码,而可选的参数database可用于指定数据库

注意MySQL用重音号`包含表名(重音号也就是键盘左上角波浪号下面的符号, 英文 backquote,有些人叫反勾号、反引号、倒引号、后引号等等比较乱) , mysql 与 sqlite 一样都支持比较好用的limit语句、replace into语句(MSSQL都不支持 ), sqlite也可以使用重音号`包含表名。参考帖子 MSSQL,MySQL 语法区别

6

主题

51

回帖

574

积分

三级会员

积分
574
发表于 2013-7-14 18:59:37 | 显示全部楼层
学习中,先抢个板凳

7

主题

72

回帖

554

积分

三级会员

积分
554
发表于 2013-7-14 19:19:27 | 显示全部楼层
支持一下,学习了!

7

主题

293

回帖

1900

积分

新手入门

积分
1900
QQ
发表于 2013-7-15 14:35:21 | 显示全部楼层
学习!

3

主题

41

回帖

393

积分

二级会员

积分
393
发表于 2013-7-16 08:17:51 | 显示全部楼层
与时俱进的速度真快,MariaDB都引入了。

2

主题

10

回帖

90

积分

一级会员

积分
90
发表于 2013-7-21 23:21:06 | 显示全部楼层
我滴个神!太帅了!!学习。。。

16

主题

117

回帖

914

积分

三级会员

积分
914
发表于 2013-7-27 15:50:54 | 显示全部楼层
MDB、MSSQL、SQLite才上手练习过,又出Mysql真是太给力了!支持aardio!

0

主题

18

回帖

144

积分

一级会员

积分
144
发表于 2013-8-2 02:39:01 | 显示全部楼层
给力,学习中

2

主题

4

回帖

57

积分

一级会员

积分
57
发表于 2013-8-17 13:01:13 | 显示全部楼层
小型数据库,用sqlite比较方便

1

主题

37

回帖

282

积分

二级会员

积分
282
发表于 2013-8-29 17:06:13 | 显示全部楼层
好久没来了,又多了好多要学习的东西。支持老大!

0

主题

3

回帖

40

积分

新手入门

积分
40
发表于 2014-8-19 09:12:03 | 显示全部楼层
非常好的内容,学习了。

0

主题

9

回帖

48

积分

新手入门

积分
48
发表于 2016-5-1 13:27:07 | 显示全部楼层
学习一下

0

主题

1

回帖

6

积分

新手入门

积分
6
发表于 2016-10-23 16:14:36 | 显示全部楼层
怎么向表中增加数据?

0

主题

12

回帖

71

积分

一级会员

积分
71
发表于 2017-6-2 16:51:42 | 显示全部楼层
好,学习学习!
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|aardio.com|aardio 官方社区 ( 皖ICP备09012014号 )

GMT+8, 2025-2-13 17:31 , Processed in 0.067293 second(s), 26 queries .

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表