日期:2014-05-16 浏览次数:20771 次
一个命令不必全在一个单独行给出,所以需要多行的较长命令不是一个问题。mysql
通过寻找终止的分号而不是寻找输入行的结束来决定你的语句在哪儿结束。(换句话说,mysql
接受自由格式输入:它收集输入行但执行他们直到它看见分号。)
这里是一个简单的多行语句的例子:
mysql> SELECT -> USER() -> , -> CURRENT_DATE; +--------------------+--------------+ | USER() | CURRENT_DATE | +--------------------+--------------+ | joesmith@localhost | 1999-03-18 | +--------------------+--------------+
在这个例子中,在你输入一个多行查询的第一行后,要注意提示符如何从mysql>
变为->
,这正是mysql
如何指出它没见到完整的语句并且正在等待剩余的部分。提示符是你的朋友,因为它提供有价值的反馈,如果你使用该反馈,你将总是知道mysql
正在等待什么。
如果你决定,你不想要执行你在输入过程中输入的一个命令,打入\c
取消它:
mysql> SELECT -> USER() -> \c mysql>
这里也要注意提示符,在你打入\c
以后,它切换回到mysql>
,提供反馈以表明mysql
准备接受一个新命令。
下表显示出你可以看见的各个提示符并总结他们意味着mysql
在什么状态下:
提示符 | 意思 |
mysql> |
准备好接受新命令 |
-> |
等待多行命令的下一行 |
'> |
等待下一行,收集以单引号(“'”)开始的字符串 |
"> |
等待下一行,收集以双引号(“"”)开始的字符串 |
?
?
如果你忘记了MySQL的root
用户的口令,你可以用下列过程恢复它。
kill
(不是kill
-9
)到mysqld
服务器来关闭mysqld服务器。pid
被保存在一个.pid
文件中,通常在MySQL数据库目录中:
kill `cat /mysql-data-directory/hostname.pid`
你必须是一个UNIX root
用户或运行服务器的相同用户做这个。
--skip-grant-tables
选项重启mysqld
。
mysql -h hostname
mysql
连接mysqld服务器并且用一条GRANT
命令改变口令。见7.26
GRANT
和REVOKE
句法。你也可以用mysqladmin -h hostname -u user
password 'new password'
进行。
mysqladmin -h hostname flush-privileges
或用SQL命令FLUSH
PRIVILEGES
来装载权限表。?
DATE
列的问题一个DATE
值的格式是'YYYY-MM-DD'
。根据ANSI
SQL,不允许其他格式。你应该在UPDATE
表达式和SELECT
语句的WHERE子句中使用这个格式。例如:
mysql> SELECT * FROM tbl_name WHERE date >= '1997-05-05';
为了方便,如果日期用在数字上下文,MySQL自动变换一个日期到一个数字(并且反过来也如此)。当更新时和将一个日期与TIMESTAMP
、DATE
或DATETIME
列比较的一个WHERE
子句中,也是足够灵活以允许一种“宽松”的字符串格式。(宽松格式意味着任何标点字符用作在部件之间的分割符。例如,'1998-08-15'
和'1998#08#15'
是等价的。)MySQL也能变换不包含分割符的一个字符串(例如
'19980815'
),如果它作为一个日期说得通。
特殊日期'0000-00-00'
可以作为'0000-00-00'
被存储和检索。
当通过MyODBC使用一个'0000-00-00'
日期时,在MyODBC
2.50.12和以上版本,它将自动被转换为NULL
,因为ODBC不能处理这种日期。
因为MySQL实行了上述的变换,下列语句可以工作:
mysql> INSERT INTO tbl_name (idate) VALUES (19970505); mysql> INSERT INTO tbl_name (idate) VALUES ('19970505'); mysql> INSERT INTO tbl_name (idate) VALUES ('97-05-05'); mysql> INSERT INTO tbl_name (idate) VALUES ('1997.05.05'); mysql> INSERT INTO tbl_name (idate) VALUES ('1997 05 05'); mysql> INSERT INTO tbl_name (idate) VALUES ('0000-00-00'); mysql> SELECT idate FROM tbl_name WHERE idate >= '1997-05-05'; mysql> SELECT idate FROM tbl_name WHERE idate >= 19970505; mysql> SELECT mod(idate,100) FROM tbl_name WHERE idate >= 19970505; mysql> SELECT idate FROM tbl_name WHERE idate >= '19970505';
然而,下列将不工作:
mysql> SELECT idate FROM tbl_name WHERE STRCMP(idate,'19970505')=0;
STRCMP()
是字符串函数,因此它将idate
转换为一个字符串并且实施字符串比较。它不将'19970505'
转换为一个日期并实施日期比较。
注意,MySQL不检查日期是否正确。如果你存储一个不正确的日期,例如'1998-2-31'