mysql的一些实用命令.docx
《mysql的一些实用命令.docx》由会员分享,可在线阅读,更多相关《mysql的一些实用命令.docx(18页珍藏版)》请在冰豆网上搜索。
![mysql的一些实用命令.docx](https://file1.bdocx.com/fileroot1/2023-2/6/a3652966-59fd-462d-982b-33acbe74c9cc/a3652966-59fd-462d-982b-33acbe74c9cc1.gif)
mysql的一些实用命令
1、连接Mysql
1、连接到本机上的MYSQL。
首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql-uroot-p,
回车后提示你输密码.注意用户名前可以有空格也可以没有空格,但是密码前必须没有空格,否则让你重新输入密码。
如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,
MYSQL的提示符是:
mysql>
2、连接到远程主机上的MYSQL。
假设远程主机的IP为:
110.110.110.110,用户名为root,密码为abcd123。
则键入以下命令:
mysql-h110.110.110.110-uroot-p123;(注:
u与root之间可以不用加空格)
3、退出MYSQL命令:
exit(回车)
2、修改密码
1、给root加个密码ab12。
首先在DOS下进入目录mysql\bin,然后键入以下命令
mysqladmin-uroot–ppasswordab12
mysqladmin–u用户名–p旧密码新密码
注:
因为开始时root没有密码,所以-p旧密码一项就可以省略了。
2、再将root的密码改为djg345。
mysqladmin-uroot-pab12passworddjg345
3、为匿名帐号指定密码
(1)使用PASSWORD的方法
a.windows:
shell>mysql-uroot
mysql>SETPASSWORDFOR''@'localhost'=PASSWORD('newpwd');
mysql>SETPASSWORDFOR''@'%'=PASSWORD('newpwd');
b.unix:
shell>mysql-uroot
mysql>SETPASSWORDFOR''@'localhost'=PASSWORD('newpwd');
mysql>SETPASSWORDFOR''@'host_name'=PASSWORD('newpwd');
如果你不知道是哪个主机名,在SETPASSWORD之前执行下面的语句:
mysql>SELECTHost,UserFROMmysql.user;
(2)UPDATE直接修改用户表
用root连接服务器,运行UPDATE语句为相应user表记录的Password列指定一个值。
在Windows和Unix中的过程是相同的。
下面的UPDATE语句同时为两个匿名账户指定密码:
shell>mysql-uroot
mysql>UPDATEmysql.userSETPassword=PASSWORD('newpwd')WHEREUser='';
mysql>FLUSHPRIVILEGES;
在user表中直接使用UPDATE更新密码后,必须让服务器用FLUSHPRIVILEGES重新读授权表。
否则,重新启动服务器前,不会使用更改。
4、删除匿名帐户
shell>mysql-uroot
mysql>DELETEFROMmysql.userWHEREUser='';
mysql>FLUSHPRIVILEGES;
可以在Windows和Unix中使用DELETE语句。
在Windows中,如果你只想删掉具有与root相同权限的匿名账户,方法为:
shell>mysql-uroot
mysql>DELETEFROMmysql.userWHEREHost='localhost'ANDUser='';
mysql>FLUSHPRIVILEGES;
该账户允许匿名访问,但是拥有全部的权限,因此删掉它可以提高安全。
5、为root帐户指定密码
(1)使用SETPASSWORD语句
用root连接服务器并执行两个SETPASSWORD语句。
一定要使用PASSWORD()函数来加密密码。
在Windows中的语句:
shell>mysql-uroot
mysql>SETPASSWORDFOR'root'@'localhost'=PASSWORD('newpwd');
mysql>SETPASSWORDFOR'root'@'%'=PASSWORD('newpwd');
在Unix中的语句:
shell>mysql-uroot
mysql>SETPASSWORDFOR'root'@'localhost'=PASSWORD('newpwd');
mysql>SETPASSWORDFOR'root'@'host_name'=PASSWORD('newpwd');
用服务器主机名替换第二个SETPASSWORD语句中的host_name。
这是你指定匿名账户密码的主机名。
(2)使用mysqladmin命令行客户端程序
shell>mysqladmin-urootpassword"newpwd"
shell>mysqladmin-uroot-hhost_namepassword"newpwd"
上述命令适用于Windows和Unix。
用服务器主机名替换第二个命令中的host_name。
不一定需要将密码用双引号引起来,但是你如果密码中包含空格或专用于命令解释的其它字符,则需要用双引号引起来。
(3)使用UPDATE语句
直接修改user表。
同时为两个root账户指定密码:
shell>mysql-uroot
mysql>UPDATEmysql.userSETPassword=PASSWORD('newpwd')WHEREUser='root';
mysql>FLUSHPRIVILEGES;
UPDATE语句适用于Windows和Unix。
设置完密码后,当你连接服务器时你必须提供相应密码。
例如,如果你想要用mysqladmin关闭服务器,可以使用下面的命令:
shell>mysqladmin-uroot-pshutdown
Enterpassword:
(enterrootpasswordhere)
3、增加新用户
1、增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。
首先用root用户连入MYSQL,然后键入以下命令:
grantselect,insert,update,deleteon*.*to[email=test1@”%]test1@”%[/email]”Identifiedby“abc”;
但增加的用户是十分危险的,你想如某个人知道test1的密码,那么他就可以在internet上的任何一台电脑上登录你的mysql数据库并对你的数据可以为所欲为了,解决办法见2。
2、增加一个用户test2密码为abc,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作(localhost指本地主机,即MYSQL数据库所在的那台主机),这样用户即使用知道test2的密码,他也无法从internet上直接访问数据库,只能通过MYSQL主机上的web页来访问了。
grantselect,insert,update,deleteonmydb.*to[email=test2@localhost]test2@localhost[/email]identifiedby“abc”;
如果你不想test2有密码,可以再打一个命令将密码消掉。
grantselect,insert,update,deleteonmydb.*to[email=test2@localhost]test2@localhost[/email]identifiedby“”;
可以用两种方式创建MySQL账户:
(1)使用GRANT语句
(2)直接操作MySQL授权表
最好的方法是使用GRANT语句,因为这样更精确,错误少
为了更改,你必须以MySQLroot用户连接MySQL服务器,
并且root账户必须有mysql数据库的INSERT权限和RELOAD管理权限。
首先,使用MySQL程序以MySQLroot用户来连接服务器:
shell>mysql–uroot-p密码
如果你为root账户指定了密码,还需要为该MySQL命令和本节中的其它命令提供--password或-p选项。
以root连接到服务器上后,可以添加新账户。
下面的语句使用GRANT来设置四个新账户:
mysql>GRANTALLPRIVILEGESON*.*TO'monty'@'localhost'IDENTIFIEDBY'some_pass'WITHGRANTOPTION;
mysql>grantallprivilegeson*.*to‘monty’@’localhost’identifiedby‘some_pass’withgrantoption;
mysql>GRANTALLPRIVILEGESON*.*TO'monty'@'%'IDENTIFIEDBY'some_pass'WITHGRANTOPTION;
mysql>grantallprivilegeson*.*to‘monty’@’%’identifiedby‘some_pass’withgrantoption;
mysql>GRANTRELOAD,PROCESSON*.*TO'admin'@'localhost';
mysql>grantreload,processon*.*to‘admin’@’localhost’;
mysql>GRANTUSAGEON*.*TO'dummy'@'localhost';
mysql>grantusageon*.*to‘dummy’@’localhost’;
用GRANT语句创建的账户有下面的属性:
·其中两个账户有相同的用户名monty和密码some_pass。
两个账户均为超级用户账户,具有完全的权限可以做任何事情。
一个账户('monty'@'localhost')只用于从本机连接时。
另一个账户('monty'@'%')可用于从其它主机连接。
请注意monty的两个账户必须能从任何主机以monty连接。
没有localhost账户,当monty从本机连接时,mysql_install_db创建的localhost的匿名用户账户将占先。
结果是,monty将被视为匿名用户。
原因是匿名用户账户的Host列值比'monty'@'%'账户更具体,这样在user表排序顺序中排在前面。
·一个账户有用户名admin,没有密码。
该账户只用于从本机连接。
授予了RELOAD和PROCESS管理权限。
这些权限允许admin用户执行mysqladminreload、mysqladminrefresh和mysqladminflush-xxx命令,以及mysqladminprocesslist。
未授予访问数据库的权限。
你可以通过GRANT语句添加此类权限。
·一个账户有用户名dummy,没有密码。
该账户只用于从本机连接。
未授予权限。
通过GRANT语句中的USAGE权限,你可以创建账户而不授予任何权限。
它可以将所有全局权限设为'N'。
假定你将在以后将具体权限授予该账户。
除了GRANT,你可以直接用INSERT语句创建相同的账户,然后使用FLUSHPRIVILEGES告诉服务器重载授权表:
shell>mysql--user=rootmysql
mysql>INSERTINTOuserVALUES('localhost','monty',PASSWORD('some_pass'),'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
mysql>INSERTINTOuserVALUES('%','monty',PASSWORD('some_pass'),'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
mysql>INSERTINTOuserSETHost='localhost',User='admin',Reload_priv='Y',Process_priv='Y';
mysql>INSERTINTOuser(Host,User,Password)VALUES('localhost','dummy','');
mysql>FLUSHPRIVILEGES;
当你用INSERT创建账户时使用FLUSHPRIVILEGES的原因是告诉服务器重读授权表。
否则,只有重启服务器后更改方会被注意到。
使用GRANT,则不需要使用FLUSHPRIVILEGES。
用INSERT使用PASSWORD()函数是为了加密密码。
GRANT语句为你加密密码,因此不需要PASSWORD()。
'Y'值启用账户权限。
对于admin账户,还可以使用更加可读的INSERT扩充的语法(使用SET)。
在为dummy账户的INSERT语句中,只有user表中的Host、User和Password列记录为指定的值。
没有一个权限列为显式设置,因此MySQL将它们均指定为默认值'N'。
这样等同于GRANTUSAGE的操作。
请注意要设置超级用户账户,只需要创建一个权限列设置为'Y'的user表条目。
user表权限为全局权限,因此其它授权表不再需要条目。
下面的例子创建3个账户,允许它们访问专用数据库。
每个账户的用户名为custom,密码为obscure。
要想用GRANT创建账户,使用下面的语句:
shell>MySQL--user=rootMySQL
shell>mysql--user=rootmysql
mysql>GRANTSELECT,INSERT,UPDATE,DELETE,CREATE,DROPONbankaccount.*TO'custom'@'localhost'IDENTIFIEDBY'obscure';
mysql>GRANTSELECT,INSERT,UPDATE,DELETE,CREATE,DROPONexpenses.*TO'custom'@'whitehouse.gov'IDENTIFIEDBY'obscure';
mysql>GRANTSELECT,INSERT,UPDATE,DELETE,CREATE,DROPONcustomer.*TO'custom'@'server.domain'IDENTIFIEDBY'obscure';
这3个账户可以用于:
·第1个账户可以访问bankaccount数据库,但只能从本机访问。
·第2个账户可以访问expenses数据库,但只能从主机whitehouse.gov访问。
·第3个账户可以访问customer数据库,但只能从主机server.domain访问。
格式:
grantselecton数据库.*to用户名@登录主机identifiedby“密码”
4.1创建数据库
命令:
createdatabase<数据库名>
例1:
建立一个名为xhkdb的数据库
mysql>createdatabasexhkdb;
例2:
创建数据库并分配用户
①CREATEDATABASE数据库名;
②GRANTSELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTERON数据库名.*TO数据库名@localhostIDENTIFIEDBY'密码';
③SETPASSWORDFOR '数据库名'@'localhost'=OLD_PASSWORD('密码');
依次执行3个命令完成数据库创建。
注意:
中文“密码”和“数据库”是户自己需要设置的。
4.2显示数据库
命令:
showdatabases(注意:
最后有个s)
mysql>showdatabases;
注意:
为了不再显示的时候乱码,要修改数据库默认编码。
以下以GBK编码页面为例进行说明:
1、修改MYSQL的配置文件:
my.ini里面修改default-character-set=gbk
2、代码运行时修改:
①Java代码:
jdbc:
mysql:
//localhost:
3306/test?
useUnicode=true&characterEncoding=gbk
②PHP代码:
header("Content-Type:
text/html;charset=gb2312");
③C语言代码:
intmysql_set_character_set(MYSQL*mysql,char*csname);
该函数用于为当前连接设置默认的字符集。
字符串csname指定了1个有效的字符集名称。
连接校对成为字符集的默认校对。
该函数的工作方式与SETNAMES语句类似,但它还能设置mysql->charset的值,从而影响了由mysql_real_escape_string()设置的字符集。
4.3删除数据库
命令:
dropdatabase<数据库名>
例如:
删除名为xhkdb的数据库
mysql>dropdatabasexhkdb;
例子:
删除一个不确定存在的数据库
mysql>dropdatabasedrop_database;
ERROR1008(HY000):
Can'tdropdatabase'drop_database';databasedoesn'texist
//发生错误,不能删除'drop_database'数据库,该数据库不存在。
mysql>dropdatabaseifexistsdrop_database;//ifexists判断数据库是否存在,不存在也不产生错误
4.4连接数据库
命令:
use<数据库名>
例如:
如果xhkdb数据库存在,尝试存取它:
mysql>usexhkdb;
屏幕提示:
Databasechanged
use语句可以通告MySQL把db_name数据库作为默认(当前)数据库使用,用于后续语句。
该数据库保持为默认数据库,直到语段的结尾,或者直到发布一个不同的USE语句:
mysql>USEdb1;
mysql>SELECTCOUNT(*)FROMmytable; #selectsfromdb1.mytable
mysql>USEdb2;
mysql>SELECTCOUNT(*)FROMmytable; #selectsfromdb2.mytable
使用USE语句为一个特定的当前的数据库做标记,不会阻碍您访问其它数据库中的表。
下面的例子可以从db1数据库访问作者表,并从db2数据库访问编辑表:
mysql>USEdb1;
mysql>SELECTauthor_name,editor_nameFROMauthor,db2.editor
-> WHEREauthor.editor_id=db2.editor.editor_id;
USE语句被设立出来,用于与Sybase相兼容。
use数据库后,使用showdatabases就能查询所有数据库,如果想跳到其他数据库,用 use其他数据库名字就可以了。
4.5当前选择的数据库
命令:
mysql>selectdatabase();
MySQL中SELECT命令类似于其他编程语言里的print或者write,
你可以用它来显示一个字符串、数字、数学表达式的结果等等。
如何使用MySQL中SELECT命令的特殊功能?
1.显示MYSQL的版本
mysql>selectversion();
2.显示当前时间
mysql>selectnow();
3.显示年月日
(1)SELECTDAYOFMONTH(CURRENT_DATE);
(2)SELECTMONTH(CURRENT_DATE);
(3)SELECTYEAR(CURRENT_DATE);
4.查询当前用户:
selectuser();/SELECTCURRENT_USER();
5.查询数据库版本:
selectversion();
6.查询当前使用的数据库:
selectdatabase();
7.显示字符串
mysql>SELECT"welecometomyblog!
";
5.当计算器用
select((4*4)/10)+25;
6.串接字符串
注意:
这里用到CONCAT()函数,用来把字符串串接起来。
另外,我们还用到以前学到的AS给结果列'CONCAT(f_name,"",l_name)'起了个假名。
5.1创建数据表
命令:
createtable<表名>(<字段名1><类型1>[,..<字段名n><类型n>]);
例如,建立一个名为MyClass的表,
字段名
数字类型
数据宽度
是否为空
是否主键
自动增加
默认值
id
int
4
否
primarykey
auto_increment
name
char
20
否
sex
int
4
否
0
degree
double
16
是
mysql>createtableMyClass(
>idint(4)notnullprimarykeyauto_increment,
>namechar(20)notnull,
>sexint(4)notnulldefault'0',
>degreedouble(16,2));
5.2获取表结构
命令:
desc表名,或者showcolumnsfrom表名
mysql>descMyClass;
mysql>showcolumnsfromMyClass;
使用MySQL数据库desc表名时,我们看到Key那一栏,可能会有4种值,即'','PRI','UNI','MUL'。
1.如果Key是空的,那么该列值的可以重复,表示该列没有索引,或者是一个非唯一的复合索引的非前导列;
2.如果Key是PRI, 那么该列是主键的组成部分;
3.如果Key是UNI, 那么该列是一个唯一值索引的第一列(前导列),并别不能含有空值(NULL);
4.如果Key是MUL, 那么该列的值可以重复,该列是一