那些MySQL必会的基础命令(二)
1.登陆数据库
单实例
[root@MySQL ~]# mysql -uroot -p123456
多实例
[root@MySQL ~]# mysql -uroot -p123456 -S /data/3306/mysql.sock
2.查看数据库版本及当前登录用户是什么
查看数据库版本
[root@MySQL ~]# mysql -uroot -p3307 -S /data/3307/mysql.sock
select version();
查看当前登陆用户
select user();
3.创建 GBK 字符集的数据库 AnSheng,并查看已建库的完整语句。
创建库
create database AnSheng CHARACTER SET gbk COLLATE gbk_chinese_ci;
查看语句
show create database confeseur;
4.创建用户AnSheng, 使之可以管理数据库AnSheng
create user 'AnSheng'@'localhost' identified by '123465';
grant all on AnSheng.* to 'AnSheng'@'localhost';
5.查看创建的用户 AnSheng 拥有哪些权限
SHOW GRANTS FOR 'AnSheng'@'localhost';
6.查看当前数据库里有哪些用户
select user,host from mysql.user;
7.进入AnSheng数据库
use AnSheng
select database();
8.创建一个innodb引擎字符集为GBK表test,字段为id和name varchar(16),查看建表结构及SQL 语句
use AnSheng
CREATE TABLE test(`id` int(4) NOT NULL,`name` char(20) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;
show create table test\G
9.插入一条数据 1,AnSheng
insert into test(id,name) values(1,'AnSheng');
select * from test;
10.批量插入数据 2,CON, 3,111。 要求中文不能乱码
insert into test values(1,'CON'),(3,'111');
select * from test;
11.查询插入的所有记录,查询名字为AnSheng的记录。查询id大于1的记录
select id,name from AnSheng.test where name = 'AnSheng';
select id,name from AnSheng.test where id1;
12.把数据 id 等于 1 的名字 AnSheng 更改为 www
update AnSheng.test set name='www' where id = '1' and name = 'AnSheng';
13.在字段 name 前插入 age 字段, 类型 int(4)
alter table test add age int(4) after id;
desc test;
14.备份 AnSheng 库及 MySQL 库
[root@MySQL ~]# mysqldump -uroot -p3306 -B AnSheng AnSheng.sql
[root@MySQL ~]# mysqldump -uroot -p3306 -B --events mysql mysql.sql
15.删除表中的所有数据, 并查看
delete from AnSheng.test;
use AnSheng
select * from test;
16.删除表 test 和 AnSheng 数据库并查看
drop table test;
use AnSheng
show tables;
drop database AnSheng;
show databases;
17.Linux 命令行恢复以上删除的数据
[root@MySQL ~]# mysql -uroot -p3306 <AnSheng.sql
[root@MySQL ~]# mysql -uroot -p3306 -e "show databases;use AnSheng;show把 GBK 字符集修改为 UTF8(可选,注意,此题有陷阱)。
cp AnSheng.sql AnSheng.sql.bak
sed -i 's#GBK#UTF8#g' AnSheng.sql
mysql -uroot -p3306 <AnSheng.sql
18.MySQL 密码丢了,如何找回实战?
killall mysqld
mysqld_safe --defaults-file=/data/3310/my.cnf --skip-grant-table &
mysql -uroot -p -S /data/3310/mysql.sock
update mysql.user set password=password('123456') where user = 'root' and host = 'localhost';
flush privileges;
quit
/data/3310/mysql restart
mysql -uroot -p123456 -S /data/3310/mysql.sock
19.MySQL 内中文数据乱码的原理及如何防止乱码? (可选)
20.在把 id 列设置为主键,在 Name 字段上创建普通索引
ALTER TABLE test ADD PRIMARY KEY (id);
desc test;
ALTER TABLE test ADD INDEX index_name (name);
21.在字段 name 后插入手机号字段(shouji), 类型 char(11)
alter table test add shouji char(11) after name;
desc test;
22.所有字段上插入 2 条记录(自行设定数据)
insert into test(id,age,name,shouji) values(1,18,'sa',18002552466),(2,15,'natasha',18002552566);
select * from test where id = '2' or id = '1';
23.在手机字段上对前 8 个字符创建普通索引
create index index_shouji on test(shouji(8));
24.查看创建的索引及索引类型等信息
desc test;
25.删除 Name, shouji 列的索引
ALTER TABLE test DROP INDEX index_name;
ALTER TABLE test DROP INDEX index_shouji;
desc test;
26.对Name列的前 6 个字符以及手机列的前 8 个字符组建联合索引
create index ind_name_shouji on test(name,shouji);
27.查询手机号以 135 开头的,名字为 AnSheng 的记录(此记录要提前插入)
insert into test(id,name,shouji) values(10,'AnSheng',13565485236);
select * from test where name='AnSheng' and shouji like '135%';
28.查询上述语句的执行计划(是否使用联合索引 等)
explain select * from test where name='sa';