初识MySql

    第一次在优快云上写东西,主要是这些天学习MySql遇到一些问题,解决了一些问题,拿出来分享一下,让后来的同志们少走一点弯路,所以我写的这个就是一些入门级的东西了.

   到www.mysql.org上去下个MySql win32平台,最好是5.0以上的版本,因为MySQL只在5.0以后才开始对存储过程的支持,我在下面讲的也是我在这个上面所遇到的一些问题.

   开始->运行->cmd.输入命令mysql -u root -p,然后提示你输入密码,Enter password:****正确输入完毕显示:

Welcome to the MySQL monitor.  Commands end with ; or /g.
Your MySQL connection id is 2
Server version: 5.0.45-community-nt MySQL Community Edition (GPL)

Type 'help;' or '/h' for help. Type '/c' to clear the buffer.

mysql>

   恭喜安装成功了,这里的root 用户不是Linux的那个超级用户,只是MySql 的一个默认安装用户,在Linux下的MySql 中 root默认是没有密码的,所以最好去给它设一个密码,mysqladmin -u root -p oldpassword newpasswd,由于默认没有密码,所以命令中oldpassword就省了.win32下安装的过程中会提示你设置root密码,很不错.

C:/Documents and Settings/you>netstat

Active Connections

  Proto   Local Address                   Foreign Address       State
  TCP    0f0cac4f05aa48c:3306   localhost:3313            TIME_WAIT  //MySql已经运行,占用的默认端口是3306
  TCP    0f0cac4f05aa48c:3011   60.28.223.101:http     CLOSE_WAIT
  TCP    0f0cac4f05aa48c:3015   60.28.223.101:http     CLOSE_WAIT

  登陆成功以后,先随便看看,

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mydata             |
| mysql              |
| test               |
+--------------------+
4 rows in set (0.03 sec)显示出了已经存在的所有数据库.

   创建一个新的用户可以用下面这个命令: grant   权限  on 数据库名.表名 to   新用户名@终端 identified by 密码.在权限设置中如果是all的话,就代表是把所有的权限都赋予这个用户了,在windows平台下设置的新用户名必须为这样的格式 'user_name',要用单引号括起来,后面终端名如 'localhost' 也要是这样的格式,密码亦如是.例如:grant all on mydata.* to 'nobleqiao'@'localhost' identified by 'password',就表示将对数据库mydata中所有表的所有权限赋予用户nobleqiao,登陆密码为'password'.权限仅限于在 localhost上.我也有一个疑惑,按照常理推断,将 数据库名.表名 设置为 *.* 应该是对所有数据库的所有表都有权限,但是这样来创建用户时总是不成功.对于上面那条命令,用户nobleqiao可以创建的数据库只能是名字为mydata,拥有操作其中的所有表有所有权限.用你创建的新用户来登陆吧.

  创建一个新的数据库mysql>create database mydata;(注意分号) ,对于用户nobleqiao来说,只能创建名字为mydata的数据库喽.建完数据库,可以用mysql>show databases; 查看已经存在的数据库,看你新建的在不在里面.然后就建表啦,mysql>create table tablename( col1 type not null primary key , col2... , ........ );这些是SQL的基本命令就不举例了.mysql> show tables;
+------------------+
| Tables_in_mydata |
+------------------+
| info             |
| stu              |
+------------------+
2 rows in set (0.01 sec)显示你已经建立的表.对表的一些操作就是SQL的一些命令了,例如:

mysql> select * from  info;
+-----+--------------+------+---------------+
| id  | name         | age  | addr          |
+-----+--------------+------+---------------+
| 001 | Yaoon Carter |   12 | Backer Street |
| 002 | Niker Carter |   17 | Backer Street |
| 011 | Acer King    |   42 | Scoot land    |
| 101 | Maggie Q     |   20 | Los Angelise |
+-----+--------------+------+---------------+
4 rows in set (0.02 sec)

     存储过程:我十分感兴趣的新东西(对我来说)

a.创建一个新的存储过程:可以先将默认的分隔符(;)修改一下,mysql> delimiter //   将分隔符改为" //  ",因为存储过程中可能会有一些语句必须用 ;  作为结束符例如execute stmt;分隔符修改成哪个字符根据个人习惯吧.来举个存储过程的简单例子:

create procedure testproc(in factor char(1))
begin
 select * from info
 where name like 'A%';
end

b.调用方法

mysql> call testproc('a');
    -> //
+-----+-----------+------+------------+
| id  | name      | age  | addr       |
+-----+-----------+------+------------+
| 011 | Acer King |   42 | Scoot land |
+-----+-----------+------+------------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)其实这里的参数只是示例,没有起实质影响.调用方法就是call  存储过程名;

c.其他命令:                                                                                                                                                                                  mysql> show procedure status;  显示所有的存储过程及其相关的一些信息如: Db   Name  Type  Definer  Modified  Created   Security_type  Comment .

mysql> show create procedure testproc; 显示名为 testproc 的存储过程的内容.

d.表名作为参数的存储过程.

    简单的用set或者declare语句定义变量,然后直接作为sql的表名是不行的,mysql会把变量名当作表名。在其它的sql数据库中也是如此,mssql的解决方法是将整条sql语句作为变量,其中穿插变量作为表名,然后用sp_executesql调用该语句。这在mysql5.0之前是不行的,5.0之后引入了一个全新的语句,可以达到类似sp_executesql的功能(仅对procedure有效,function不支持动态查询):我现在只学到了一个用prepare的,直接来个自己写的例子先:

create procedure qproc(in uid char(10),in tname char(11))
 begin
 set @SqlCmd=concat('select * from ',tname,' where id= ',uid);
 prepare stmt from @SqlCmd;
 execute stmt;
 end

看调用:mysql> delimiter ;   将分隔符改回分号(;)
mysql> call qproc('002','info');
+-----+--------------+------+---------------+
| id  | name         | age  | addr          |
+-----+--------------+------+---------------+
| 002 | Niker Carter |   17 | Backer Street |
+-----+--------------+------+---------------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)调用结果就是这样喽,希望对你有帮助.

e.一个创建函数的例子(有返回参数)

create function p(in_status char(1))
 returns varchar(20)
begin
 declare long_status varchar(20);
 if in_status='O' then set long_status='over due';
 elseif in_status='U' then set long_status='Up to date';
 end if;
 return(long_status);
end

调用:mysql> select p('U');
+------------+
| p('U')     |
+------------+
| Up to date |
+------------+
1 row in set (0.00 sec)注意这里是用select  而不是 call

同样,也可以用mysql> show function status;  mysql> show create function function_name;查看相关信息.

  写的东西都相当基础,这些也是我在学习过程中遇到的一些问题,自己通过查资料解决后,还是很兴奋的,希望对大家有帮助.
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值