MySQL必会基础命令
1.1 登陆数据库。 mysql-uroot-poldboy123-S/data/3306/mysql.sock 1.2 查看数据库版本及当前登录用户是什么。 selectversion(); selectuser(); 1.3 创建GBK字符集的数据库oldboy,并查看已建库的完整语句。 createdatabaseoldboycharactersetgbkcollategbk_chinese_ci; showcreatedatabaseoldboy\G 1.4 创建用户oldboy,使之可以管理数据库oldboy。 grantallonoldboy.*to'oldboy'@'localhost'identifiedby'oldboy123'; 1.5 查看创建的用户oldboy拥有哪些权限。 showgrantsforoldboy@localhost\G 1.6 查看当前数据库里有哪些用户。 selectuser,hostfrommysql.user; 1.7 创建管理员帐户admin grantallon*.*to'admin'@'localhost'identifiedby'admin123'withgrantoption; 1.8 进入oldboy数据库 useoldboy; 1.9 创建test表:innodb引擎,字符集为GBK,字段为id int(4)和name varchar(16),查看建表结构及SQL语句。 createtabletest( idint(4), namevarchar(16) )ENGINE=innodbDEFAULTCHARSET=gbk; desctest;#<==等价于命令:showcolumnsfromtest; showcreatetabletest\G 1.10 插入一条数据 1,oldboy insertintotestvalues('1','oldboy'); 1.11 批量插入数据 2,老男孩,3,etiantian。要求中文不能乱码。 insertintotestvalues('2','老男孩'),('3','etiantian'); 1.12 查询插入的所有记录,查询名字为oldboy的记录。查询id大于1的记录。 select*fromtestwherename='oldboy'; select*fromtestwhereid>1; 1.13 把数据id等于1的名字oldboy更改为oldgirl。 updatetestsetname='oldgirl'whereid=1; 1.14 在字段name前插入age字段,类型tinyint(2)。 alter table test add name tinyint(2) after id; 1.15 备份oldboy库及mysql库。 mysqldump -uroot -poldboy123 -S /data/3306/mysql.sock --events -B oldboy mysql >/opt/bak_$(date +%F).sql egrep -v "#|^$|--|\/" /opt/bak_2017-06-06-13时36分37秒.sql 1.16 删除表中的所有数据,并查看。 truncatetabletest;#<==物理删除,一次性清空,不可以rollback deletefromtest;#<==逻辑删除,一行一行的删,比较慢,可以rollback 1.17 删除表test和oldboy数据库并查看 droptabletest; dropdatabaseoldboy; 1.18 Linux命令行恢复以上删除的数据。 mysql-uroot-poldboy123-S/data/3306/mysql.sock</opt/bak_2017-06-07-22时13分20秒.sql 1.19 把GBK字符集修改为UTF8(可选,注意,此题有陷阱)。 1.先导出表中数据 mysqldump-uroot-poldboy123-S/data/3306/mysql.sock-Boldboy>/opt/test.sql egrep-v"^$|--|\/"/opt/test.sql#<==可以看到这一行:ENGINE=MyISAMDEFAULTCHARSET=gbk; 2.修改字符集 sed-i's#CHARSET=gbk#CHARSET=utf8#g'/opt/test.sql egrep-v"^$|--|\/"/opt/test.sql#<==验证:)ENGINE=MyISAMDEFAULTCHARSET=utf8; 3.恢复数据 在sql文件中添加一条setnamesutf8;并恢复 mysql-uroot-poldboy123-S/data/3306/mysql.sockoldboy</opt/test.sql 1.20 MySQL密码丢了,如何找回实战? [root@db01~]#netstat-tunlp|grep3306#<==先查看服务是否正常 tcp000.0.0.0:33060.0.0.0:*LISTEN62358/mysqld [root@db01~]#kill62358#<==kill掉进程的pid [root@db01~]#netstat-tunlp|grep3306#<==mysql进程已关闭 [root@db01~]#mysqld_safe--help#<==利用mysqld_safe命令指定配置文件,跳过授权表来破密码 [root@db01~]#mysqld_safe--defaults-file=/data/3306/my.cnf--skip-grant-tables2>&1>/dev/null& [root@db01~]#mysql-S/data/3306/mysql.sock#<==无密码登录进多实例3306 mysql>selectuser,host,passwordfrommysql.userwhereuser='root'andhost='localhost'; +------+-----------+-------------------------------------------+ |user|host|password| +------+-----------+-------------------------------------------+ |root|localhost|*FE28814B4A8B3309DAC6ED7D3237ADED6DA1E515| +------+-----------+-------------------------------------------+ 1rowinset(0.00sec)#<==先看下mysql库,user表里的字段内容 mysql>updatemysql.usersetpassword=PASSWORD("oldboy123")whereuser='root'andhost='localhost';#<==利用update命令来更新root@localhost用户的密码 mysql>flushprivileges;#<==记得刷新授权表,否则不会立马生效的 QueryOK,0rowsaffected(0.00sec) [root@db01~]#sed-i's#mysql_pwd="oldboy456"#mysql_pwd="oldboy123"#g'/data/3306/mysql [root@db01~]#grepmysql_pwd=/data/3306/mysql#<==修改启动脚本的密码,才能利用命令来停止服务 mysql_pwd="oldboy123" [root@db01~]#/data/3306/mysqlstop#<==先停掉服务,因为有跳过授权表的参数在 StopingMySQL... [1]+Donemysqld_safe--defaults-file=/data/3306/my.cnf--skip-grant-tables2>&1>/dev/null [root@db01~]#/data/3306/mysqlstart#<==启动 StartingMySQL... [root@db01~]#ss-tunlp|grep3306#<==侦听正常 tcpLISTEN0600*:3306*:*users:(("mysqld",66695,12)) [root@db01~]#mysql-uroot-poldboy123-S/data/3306/mysql.sock#<==成功登录 1.21 MySQL内中文数据乱码的原理及如何防止乱码?(可选)。 保证以下的字符集一致即可 mysql>showVARIABLESlike'character_set%'; +--------------------------+--------------+ |Variable_name|Value| +--------------------------+--------------+ |character_set_client|utf8|#<==客户端字符集 |character_set_connection|utf8|#<==客户端连接字符集,配置文件指定或建库表指定 |character_set_database|utf8|#<==数据库的字符集 |character_set_filesystem|binary|#<==文件系统字符集 |character_set_results|utf8|#<==客户端返回结果字符集 |character_set_server|utf8|#<==服务器字符集,配置文件指定或建库表指定 |character_set_system|utf8|#<==Linux系统的字符集 |character_sets_dir|/application/mysql-5.5.49/share/charsets/| +--------------------------+-------------------------------------------+ 8rowsinset(0.01sec) 1.22 在把id列设置为主键,在name字段上创建普通索引。 altertabletestaddprimarykey(id); altertabletestaddindexindex_name(name); 1.23 在字段name后插入手机号字段(shouji),类型char(11)。 altertabletestaddshoujichar(11); 1.24 所有字段上插入2条记录(自行设定数据) insertintotestval-ues('4','18','chen','15298914487'),('5','19','he','15298913929'); 1.25 在手机字段上对前8个字符创建普通索引。 altertabletestaddindexindex_shouji(shouji(8)); 1.26 查看创建的索引及索引类型等信息。 desctest; showcreatetabletest\G showindexfromtest\G 1.27 删除name,shouji列的索引。 altertabletestdropindexindex_name; altertabletestdropindexindex_shouji; 1.28 对name列的前6个字符以及手机列的前8个字符组建联合索引。 altertabletestdropindexindex_shouji; 1.29 查询手机号以152开头的,名字为chen的记录(此记录要提前插入)。 select * from test where name='chen' and shouji like '152%'; 1.30 查询上述语句的执行计划(是否使用联合索引等)。 explain select * from test where name='chen' and shouji like '152%'\G 1.31 把test表的引擎改成MyISAM。 alter table test ENGINE=MYISAM;