注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

jiwenxu的博客

CODE

 
 
 

日志

 
 

mysql5入门  

2009-02-13 16:21:00|  分类: 数据库 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

一、启停MySQL数据库服务

假如安装的时候取的服务名是mysql,那么起停数据库服务的命令是:

D:\>net stop mysql

The MySQL service is stopping.

The MySQL service was stopped successfully.

D:\>net start mysql

The MySQL service is starting.

The MySQL service was started successfully.

当然也可以到windows的服务管理里手工起停了。

当直接敲入mysql的时候遇到如下错误,说明数据库服务还未启动:

D:\>mysql

ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)

二、连接和退出MySQL

格式: mysql -h主机地址 -u用户名 -p用户密码

1、连接到本机上的MYSQL。

首先在打开DOS窗口,然后进入目录C:\Program Files\MySQL\MySQL Server 5.0\bin(安装的时候如果已经把该目录设置到了环境变量PATH里,就不用进入该目录也可以),再键入命令mysql -uroot -p,回车后提示你输密码,输入密码直接回车即可进入到MYSQL中,MYSQL的提示符是:

mysql>

2、连接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令:

D:\>mysql -h110.110.110.110 -uroot -pabcd123

注:u与root可以不用加空格,其它也一样。

3、退出MYSQL命令:

D:\>exit(回车)

D:\>quit(回车)

你也可以用control-D退出。

三、修改用户密码

格式:mysqladmin -u用户名 -p旧密码 password 新密码

D:\>mysqladmin -uroot -piamwangnc password newpwd

也可以直接修改user表的root用户口令:

mysql> use mysql;    --用名字叫mysql的库当作当前库

Database changed

mysql> update user set password=password('21century') where user='root';

Query OK, 1 row affected (0.00 sec)

Rows matched: 1 Changed: 1 Warnings: 0

mysql> flush privileges;

Query OK, 0 rows affected (0.14 sec)

注:flush privileges的意思是强制刷新内存授权表,否则用的还是缓冲中的口令。

四、增加新用户

注:MySQL环境中的命令后面都带一个分号作为命令结束符。但是use、exit、quit几个命令不用分号结尾也可以的。

例1、增加一个用户admin密码为oss,可以从任何地方连接服务器的一个完全的超级用户。首先用以root用户连入MySQL,然后键入以下命令:

mysql> grant all privileges on *.* to root@localhost | 2008-03-26 11:58:54 |

+----------------+---------------------+

1 row in set (0.00 sec)

mysql> select user();select now();

+----------------+

| user()         |

+----------------+

| root@localhost |

+----------------+

1 row in set (0.00 sec)

+---------------------+

| now()               |

+---------------------+

| 2008-03-26 11:59:08 |

+---------------------+

1 row in set (0.00 sec)

mysql> select * from user limit 3;    #返回前3行

mysql> select * from user limit 0,3;    #返回前3行

mysql> select * from user limit 3,5;    #返回从第4行开始的前5行,即4-8行

第一个参数指定返回的第一行在所有数据中的位置,从0开始(注意不是1),第二个参数指定最多返回行数。

九、将文本数据转到数据库中

1、文本数据应符合的格式:字段数据之间用tab键隔开,null值用\n来代替。

例:

3 rose 深圳二中 1976-10-10

4 mike 深圳一中 1975-12-23

2、数据传入命令 load data local infile "文件名" into table 表名。

注意:你最好将文件复制到C:\Program Files\MySQL\MySQL Server 5.0\bin目录下,并且要先用use命令打表所在的库。

十、备份数据库

导出meeting数据库:

D:\>mysqldump -uroot -p21century school > school.sql

导人dbname数据库:

D:\>mysqldump -uroot -p21century dbname < xxx.sql

导入数据库还可用类似于oracle中@my_script.sql的方式一次执行大量sql语句,这在使用mysqldump不起作用时非常有用。

例:

D:\>mysql -uroot -p < db_meeting_2003.sql

(注:create database、use databasename、create table和insert into语句都可写在上面的脚步文件中)

十一、优化命令

mysql >show status;

该命令将显示出一长列状态变量及其对应的值,其中包括:被中止访问的用户数量,被中止的连接数量,尝试连接的次数,并发连接数量最大值,以及其他许多有用的信息。这些信息对于确定系统问题和效率低下的原因是十分有用的。SHOW命令除了能够显示出MySQL服务器整体状态信息之外,它还能够显示出有关日志文件、指定数据库、表、索引、进程和许可权限表的宝贵信息。

mysql> explain select * from user;

+----+-------------+-------+------+---------------+------+---------+------+------+-------+

| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

+----+-------------+-------+------+---------------+------+---------+------+------+-------+

| 1 | SIMPLE      | user | ALL | NULL          | NULL | NULL    | NULL |    7 |       |

+----+-------------+-------+------+---------------+------+---------+------+------+-------+

1 row in set (0.11 sec)

EXPLAIN能够分析SELECT命令的处理过程。这不仅对于决定是否要为表加上索引很有用,而且对于了解MySQL处理复杂连接的过程也很有用。

十二、MySQL5的新特性:存储过程和函数

从MySQL5开始增加了存储过程特性。下面是一个包括存储过程的实例声明:

CREATE PROCEDURE procedure1 /* name存储过程名*/

(IN parameter1 INTEGER) /* parameters参数*/

BEGIN /* start of block语句块头*/

DECLARE variable1 CHAR(10); /* variables变量声明*/

IF parameter1 = 17 THEN /* start of IF IF条件开始*/

   SET variable1 = 'birds'; /* assignment赋值*/

ELSE

   SET variable1 = 'beasts'; /* assignment赋值*/

END IF; /* end of IF IF结束*/

INSERT INTO table1 VALUES (variable1);/* statement SQL语句*/

END /* end of block语句块结束*/

什么样的SQL语句在Mysql存储过程中才是合法的呢?你可以创建一个包含INSERT, UPDATE,DELETE, SELECT, DROP, CREATE, REPLACE等的语句。你唯一需要记住的是如果代码中包含MySQL扩充功能,那么代码将不能移植。在标准SQL语句中:任何数据库定义语言都是合法的。

下面从简单的开始:

mysql> create procedure sp1() create table t_test (c1 date);

Query OK, 0 rows affected (0.00 sec)

mysql> create procedure sp2() select * from t_test;

Query OK, 0 rows affected (0.00 sec)

mysql> create procedure sp3() drop table t_test;

Query OK, 0 rows affected (0.00 sec)

mysql> call sp1;

Query OK, 0 rows affected (0.15 sec)

mysql> call sp2;

Empty set (0.00 sec)

Query OK, 0 rows affected (0.01 sec)

mysql> call sp3;

Query OK, 0 rows affected (0.03 sec)

mysql> drop procedure sp1;

Query OK, 0 rows affected (0.00 sec)

mysql> drop procedure sp2;

Query OK, 0 rows affected (0.00 sec)

mysql> drop procedure sp3;

Query OK, 0 rows affected (0.00 sec)

mysql>

复杂一点的,Characteristics Clauses 特征子句。

CREATE PROCEDURE sp()

LANGUAGE SQL <--

NOT DETERMINISTIC <--

SQL SECURITY DEFINER <--

COMMENT 'A Procedure' <--

SELECT CURRENT_DATE, RAND() FROM t;

这里我给出的是一些能反映存储过程特性的子句。子句内容在括号之后,主体之前。这些子句都是可选的。

LANGUAGE SQL <--这个LANGUAGE SQL子句是没有作用的。仅是为了说明下面过程的主体使用SQL语言编写。这条是系统默认的,但你在这里声明是有用的,因为某些DBMS(IBM的 DB2)需要它,如果你关注DB2的兼容问题最好还是用上。此外,今后可能会出现除SQL外的其他语言支持的存储过程。

NOT DETERMINISTIC <--是传递给系统的信息。这里一个确定过程的定义就是那些每次输入一样输出也一样的程序。在这个案例中,既然主体中含有SELECT语句,那返回肯定是未知的因此我们称其NOT DETERMINISTIC。但是MySQL内置的优化程序不会注意这个,至少在现在不注意。

SQL SECURITY DEFINER <--意味着在调用时检查创建过程用户的权限,告诉MySQL服务器检查创建过程的用户就可以了,当过程已经被调用,就不检查执行调用过程的用户了。而另一个选项(INVOKER)则是告诉服务器在这一步仍然要检查调用者的权限。

COMMENT 'A Procedure' <--是一个可选的注释说明。最后,注释子句会跟过程定义存储在一起。

特征子句也有默认值,如果省略了就相当于:

LANGUAGE SQL NOT DETERMINISTIC SQL SECURITY DEFINER COMMENT ''

如上面过程跟下面语句是等效的:

CREATE PROCEDURE sp()

SELECT CURRENT_DATE, RAND() FROM t;

让我们更进一步的研究怎么在存储过程中定义参数,就和Oracle中的一样:

1.CREATE PROCEDURE p5() ... //参数列表是空的

2.CREATE PROCEDURE p5([IN] name data-type) ... //有一个输入参数,这里的词IN可选,因为默认参数为IN(input)

3.CREATE PROCEDURE p5(OUT name data-type) ... //有一个输出参数

4.CREATE PROCEDURE p5(INOUT name data-type) ... //有一个参数,既能作为输入也可以作为输出

举例:

mysql> CREATE PROCEDURE p5(p INT) SET @x = p;

Query OK, 0 rows affected (0.00 sec)

mysql> CALL p5(12345);

Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @x;

+-------+

| @x    |

+-------+

| 12345 |

+-------+

1 row in set (0.00 sec)

mysql> CREATE PROCEDURE p6 (OUT p INT) SET p = -5;

Query OK, 0 rows affected (0.00 sec)

mysql> CALL p6(@y);

Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @y;

+------+

| @y   |

+------+

| -5   |

+------+

1 row in set (0.00 sec)

现在我们展开的详细分析一下过程体:

CREATE PROCEDURE p7 ()

BEGIN

SET @a = 5;

SET @b = 5;

INSERT INTO t VALUES (@a);

SELECT s1 * @a FROM t WHERE s1 >= @b;

END;

完成过程体的构造就是BEGIN/END块。这个BEGIN/END语句块和 Pascal语言中的BEGIN/END是基本相同的,和C语言的框架是很相似的。我们可以使用块去封装多条语句。在这个例子中,我们使用了多条设定会话变量的语句,然后完成了一些insert和select语句。如果你的过程体中有多条语句,那么你就需要BEGIN/END块了。BEGIN/END块也被称为复合语句,在这里你可以进行变量定义和流程控制。

--End--

  评论这张
 
阅读(57)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018