MySQL的常用命令集锦
下面是我们经常会用到且非常有用的MySQL命令。下面你看到#表示在Unix命令行下执行命令,看到mysql>表示当前已经登录MySQL服务器,是在mysql客户端执行mysql命令。
登录MySQL,如果连接远程数据库,需要用-h指定hostname。
登录MySQL,如果连接远程数据库,需要用-h指定hostname。
#[mysqldir]/bin/mysql-hhostname-uroot-p
创建一个数据库。
mysql>createdatabase[databasename];
列出所有数据库。
mysql>showdatabases;
切换到一个数据库。
mysql>use[dbname];
显示一个数据库的所有表。
mysql>showtables;
查看数据表的字段格式。
mysql>describe[tablename];
删除一个数据库。
mysql>dropdatabase[databasename];
删除一个数据表。
mysql>droptable[tablename];
显示一个数据表的所有数据。
mysql>SELECT*FROM[tablename];
返回指定数据表的各列信息。
mysql>showcolumnsfrom[tablename];
使用值“whatever”过滤显示选定的某些行。
mysql>SELECT*FROM[tablename]WHERE[fieldname]="whatever";
显示所有包含name为”Bob”和phonenumber为“3444444”的记录。
mysql>SELECT*FROM[tablename]WHEREname="Bob"ANDphone_number='3444444';
显示所有不包含name为”Bob”和phonenumber为“3444444”的记录,并以phone_number字段排序。
mysql>SELECT*FROM[tablename]WHEREname!="Bob"ANDphone_number='3444444'orderbyphone_number;
显示所有的name以字母“bob”开头和phonenumber为“3444444”的记录。
mysql>SELECT*FROM[tablename]WHEREnamelike"Bob%"ANDphone_number='3444444';
显示name以字母“bob”开头和phonenumber为“3444444”的第1至第5条记录。
mysql>SELECT*FROM[tablename]WHEREnamelike"Bob%"ANDphone_number='3444444'limit1,5;
使用正则表达式查找记录。使用“正则表达式二进制”强制区分大小写。此命令查找以a开头的任何记录。
mysql>SELECT*FROM[tablename]WHERErecRLIKE"^a";
返回唯一不同的记录。
mysql>SELECTDISTINCT[columnname]FROM[tablename];
以升序或降序显示选定的记录。
mysql>SELECT[col1],[col2]FROM[tablename]ORDERBY[col2]DESC;
返回行数。
mysql>SELECTCOUNT(*)FROM[tablename];
统计指定列值的总和。
mysql>SELECTSUM(*)FROM[tablename];
联结表。
mysql>selectlookup.illustrationid,lookup.personid,person.birthdayfromlookupleftjoinpersononlookup.personid=person.personid=statementtojoinbirthdayinpersontablewithprimaryillustrationid;
新建一个用户。以root登录。切换到mysql数据库,创建用户,刷新权限。
#mysql-uroot-p mysql>usemysql; mysql>INSERTINTOuser(Host,User,Password)VALUES('%','username',PASSWORD('password')); mysql>flushprivileges;
从unix命令行更改用户密码。
#[mysqldir]/bin/mysqladmin-uusername-hhostname.blah.org-ppassword'new-password'从mysql命令行更改用户密码。以root登录,设置密码,更新权限。
#/etc/init.d/mysqlstop #mysqld_safe--skip-grant-tables& #mysql-uroot
mysql>usemysql; mysql>updateusersetpassword=PASSWORD("newrootpassword")whereUser='root'; mysql>flushprivileges; mysql>quit
#/etc/init.d/mysqlstop #/etc/init.d/mysqlstartroot密码为空时,设置root密码。
#mysqladmin-urootpasswordnewpassword更新root密码。
#mysqladmin-uroot-poldpasswordnewpassword允许用户“bob”从localhost以密码“passwd”连接服务器。以root登录,切换mysql数据库。设置权限,更新权限。
#mysql-uroot-p
mysql>usemysql; mysql>grantusageon*.*tobob@localhostidentifiedby'passwd'; mysql>flushprivileges;如果不想手工输入密码请使用--password参数
mysqldump-hdatabase_ip-uUsername--password=123456--optdatabasename>backup-file.sql mysqldump-hdatabase_ip-d-uUsername--password=123456databasename>database_structure.sql为数据库db设置权限。以root登录,切换到mysql数据库,授予权限,更新权限。
#mysql-uroot-p
mysql>usemysql; mysql>INSERTINTOdb(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv)VALUES('%','databasename','username','Y','Y','Y','Y','Y','N'); mysql>flushprivileges;或者
mysql>grantallprivilegesondatabasename.*tousername@localhost; mysql>flushprivileges;更新已存在表的数据。
mysql>UPDATE[tablename]SETSelect_priv='Y',Insert_priv='Y',Update_priv='Y'where[fieldname]='user';删除表中[fieldname]=‘whatever'的行。
mysql>DELETEfrom[tablename]where[fieldname]='whatever';更新数据库的权限/特权。
mysql>flushprivileges;删除列。
mysql>altertable[tablename]dropcolumn[columnname];新增列到db。
mysql>altertable[tablename]addcolumn[newcolumnname]varchar(20);更改列名。
mysql>altertable[tablename]change[oldcolumnname][newcolumnname]varchar(50);增加唯一的列。
mysql>altertable[tablename]addunique([columnname]);设置列值大点。
mysql>altertable[tablename]modify[columnname]VARCHAR(3);删除唯一列。
mysql>altertable[tablename]dropindex[colmnname];导入一个CSV文件到表。
mysql>LOADDATAINFILE'/tmp/filename.csv'replaceINTOTABLE[tablename]FIELDSTERMINATEDBY','LINESTERMINATEDBY'\n'(field1,field2,field3);导出所有数据库到sql文件。
#[mysqldir]/bin/mysqldump-uroot-ppassword--opt>/tmp/alldatabases.sql导出一个数据库。
#[mysqldir]/bin/mysqldump-uusername-ppassword--databasesdatabasename>/tmp/databasename.sql从一个数据库导出一个表。
#[mysqldir]/bin/mysqldump-c-uusername-ppassworddatabasenametablename>/tmp/databasename.tablename.sql从sql文件还原数据库(数据表)。
#[mysqldir]/bin/mysql-uusername-ppassworddatabasename</tmp/databasename.sql创建数据表例1。
mysql>CREATETABLE[tablename](firstnameVARCHAR(20),middleinitialVARCHAR(3),lastnameVARCHAR(35),suffixVARCHAR(3),officeidVARCHAR(10),useridVARCHAR(15),usernameVARCHAR(8),emailVARCHAR(35),phoneVARCHAR(25),groupsVARCHAR(15),datestampDATE,timestamptime,pgpemailVARCHAR(255));创建数据表例2。
mysql>createtable[tablename](personidint(50)notnullauto_incrementprimarykey,firstnamevarchar(35),middlenamevarchar(50),lastnamevarchar(50)default'bato');将查询结果保存到文件
selecttitlefrombookintooutfile'/tmp/outfile.txt';查找表中多余的重复记录,重复记录是根据某个字段(peopleId)来判断
select*frompeoplewherepeopleIdin(selectpeopleIdfrompeoplegroupby peopleIdhavingcount(peopleId)>1);查询表中不重复记录(排除重复记录)
select*fromphome_ecms_wmawheretitlein(selectdistincttitlefromphome_ecms_wma);删除表中重复记录,重复记录是根据某个字段(title)来判断
select*,count(distincttitle)INTOOUTFILE'/tmp/table.bak'fromphome_ecms_wmagroupbytitle; deletefromphome_ecms_wma; LOADDATAINFILE'/tmp/table.bak'REPLACEINTOTABLEphome_ecms_wmacharactersetutf8;随机选取记录
SELECT*FROMurlORDERBYRAND()LIMIT5;查询数据库当前编码
mysql>showvariableslike"character_set%";修改表字段类型
mysql>altertabletable_namechangelast_actionlast_actiondatetimeNOTNULLdefault'0000-00-0000:00:00';给表添加一个新字段
mysql>ALTERTABLEhostADDks_macVARCHAR(100);从表中删除一个字段
mysql>ALTERTABLEtable_nameDROPfield_name;重命名表
mysql>altertablet1renamet2;给字段加索引
mysql>altertabletablenameaddindex索引名(字段名1[,字段名2…]); mysql>altertabletablenameaddindexemp_name(name);加主关键字的索引
mysql>altertabletablenameaddprimarykey(id);加唯一限制条件的索引
mysql>altertabletablenameadduniqueemp_name2(cardnumber);删除某个索引
mysql>altertabletablenamedropindexemp_name;远程访问mysql设置
mysql>GRANTALLPRIVILEGESONdatabase_test.*toroot@192.168.1.9IDENTIFIEDBY'123456'; mysql>FLUSHPRIVILEGES;