昨天晚上,受朋友之托解决一个 sql 问题。
然而。。。虽然是科班出身,对于 mysql 用的并不多。
问题倒是不难,由于对环境不够熟悉,花去了我一点时间。
如何在一个字段中插入100个 0-10 的随机数?
- 这个问题一看是要采用循环的,被提示到
存储过程
这个名词。 - 那么,存储过程怎么建立,怎么调用呢?
- 尼玛,科班不能怂啊。赶紧查查。
一、 Ubuntu 环境
昨天晚上回家没带 win7,win10环境有点麻烦,就开了 ubuntu。
没想到被 mysql 的用户名密码给折腾了一下。
控制台输入 mysql -uroot -p
,提示输入密码,然后怎么都输不对。
懵逼几秒中...
好吧,马上来解决这个问题。
问题:Ubuntu 系统忘记了 mysql 的用户名密码怎么进入?
解答:让我们来谷度一下。
- 查看 /etc/mysql/debian.cnf 文件,命令为
vi /etc/mysql/debian.cnf
,哇嘎达!找到了用户名密码! - 命令行输入
mysql -u刚才的用户名 -p
,然后输入密码。
二、 Window7 环境
为什么又切换环境了呢?昨晚太困睡着了,没解决完问题。
早上一上班赶紧来弄。
好的,现在 Windows 有图了!
废话少说,先进数据库 mysql -uroot -p
。
三、 命令行的 mysql 咋用?
既然生疏了,重新用用就好了嘛。
朋友让表名写 ceshibiao
,字段名写 time
。
提醒一下,以下的 sql 语句都要记得加分号,否则会错哦,特殊的我会说。
- 切换数据库
mysql>use mysql;
- 查看数据库可以用
mysql>show databases;
- 先来建个表(至于英文还是拼音的名称就不要在意了)
mysql>create table ceshibiao(time real);
- 查看表可以用
mysql>show tables;
- sql 的类型科普:integer 表示整型,real 表示浮点型,text 表示文本类型
这样,mysql 基本的命令行使用就了解了。
四、存储过程咋写?
我写完以后的长这样:
- 先来解释一下这个
delimiter
。
- 这个词其实是 `分隔符` 的意思,mysql 中默认为分号,分号结尾,回车后自动执行。
- 如果写一句加一个分号立即执行了,那就没法写存储过程啊。
- 所以,`mysql>delimiter //` 这句表示,将`;`转换为`//`,只有收到 `//` 这个符号时,才认为指令结束。
- 这样,我们在存储过程内部就可以尽情地使用分号啦!
- 然后解释下取随机数的式子
ceiling(rand()*10))
。
- `ceiling` 和 `floor` 对应,前者表示向上取整(天花板嘛),后者表示向下取整(地板咯)。
- `rand()` 函数表示在 0 和 1 之间产生一个随机数。
- 所以,这个表达式的意思是,在 1-10 之间产生随机数。
- 至于数据库基本的 CURD 操作,这里就不用介绍了吧:)
五、 看一下运行结果
调用存储过程,直接 call 名称
。