之前都是用微软的SQL Server,有图形界面SSMS,第一次接触MySql命令行,所以进行学习记录。版本为MySQL Community Server 8.0.12。所有在mysql环境中的命令,都要以分号结束。
cd
命令:切换文件目录;
>cd d:\Tools\mysql-8.0.12-winx64\bin
MySql服务相关
将mysql注册为系统服务,好处是每次重启电脑自动启动:
D:\Tools\mysql-8.0.12-winx64\bin>mysqld -install
卸载服务:
D:\Tools\mysql-8.0.12-winx64\bin>mysqld -remove
启动MySql服务:
D:\Tools\mysql-8.0.12-winx64\bin>net start mysql
关闭MySql服务:
D:\Tools\mysql-8.0.12-winx64\bin>net stop mysql
连接MySql
连接本机,回车后输入密码:
D:\Tools\mysql-8.0.12-winx64\bin>mysql -u root -p
Enter password:******
连接到远程主机的MySql,需要通过-h命令确定要远程主机的IP:
D:\Tools\mysql-8.0.12-winx64\bin>mysql -h 192.168.1.51 -u root -p
Enter password:******
退出MySql:
mysql> quit;
修改密码
方式一:
命令格式:mysqladmin -u用户名 -p旧密码 password 新密码
注意:-u和用户名之间可以有一个空格,但-p和旧密码之间必须没有空格(我的环境下,有空格会出现mysqladmin: Unknown command: '111111'
错误),而且mysqladmin命令需在mysql\bin目录执行。
D:\Tools\mysql-8.0.12-winx64\bin>mysqladmin -uroot -p222222 password 111111
方法二:
这种方法需要先登陆到MySql:
mysql> alter user root@localhost identified by '111111';
权限相关
在本版本中,直接通过grant创建用户并授权会失败:
mysql> grant select on testdb.* to 'aa'@'localhost';
ERROR 1410 (42000): You are not allowed to create a user with GRANT
但可以先创建用户,然后再授予权限:
创建新用户:
命令:create user 用户名@‘访问主机’ identified by ‘密码’;
访问主机的引号可以去掉,用户名不能加引号(否则出错:ERROR 1396 (HY000): Operation CREATE USER failed for 'test'@'localhost'
)。
mysql> create user test@'localhost' identified by '111111';
授权命令:grant 权限 on 数据库名.表名 to 用户名@服务名;
授予test用户在localhost服务器上操作的权限,用逗号分隔:
mysql> grant select,insert,update,delete,create,drop,alter on testdb.* to test@localhost;
testdb.*中*代表testdb数据库中所有的表,同样可以把testdb换为*,则表示所有数据库。如果要授予所有权限可以这样:
mysql> grant all privileges on testdb.* to test@localhost;
查看拥有的权限:
mysql> show grants for test@localhost;
如果至少要查看自己拥有的权限,直接show grants;
。
撤销权限命令:revoke 权限 on 数据库名.表名 from 用户名@服务名;
mysql> revoke all privileges on testdb.* from test@localhost;
数据库操作
创建数据库,命令:create database 数据库名;
mysql> create database testdb;
显示数据库
mysql> show databases;
删除数据库
mysql> drop database testdb;
当直接删除一个不存在的数据库会发生错误,可以通过判断是否存在再进行删除:
mysql> drop database if exists testdb;
选择连接数据库
mysql登陆后默认选择的是mysql数据库,可以通过use命令切换:
mysql> use testdb;
显示当前选择的数据库
mysql> select database();
select version();
显示MySql的版本、select now();
显示当前时间、select current_date;
当前日期、select year(current_date);
当前年、select month(current_date);
当前月、select day(current_date);
当前日,不同数据库T-Sql大同小异。
拼接字符串
mysql> select concat('a',' ','bbbb');
数据表操作
create table
mysql> create table Teachers(
-> Id int not null auto_increment primary key,
-> Name nvarchar(64) not null default '',
-> Sex int not null default 0,
-> CreateTime datetime not null default now());
mysql> create table Students(
-> Id int not null auto_increment,
-> Name nvarchar(64) not null default '',
-> Sex int not null default 0,
-> CreateTime datetime not null default now(),
-> TeacherId int not null,
-> primary key(Id), # 创建主键
-> foreign key(TeacherId) references Teachers(Id) on delete cascade);
# 创建外键,把外键TeacherId关联到Teachers表的Id字段,并进行级联删除
insert
mysql中获取当前时间的函数now(),不是getdate()。
mysql> insert into students(id,name,sex,grade,createtime) values(1,'李斯',1,3,now());
select
查询所有数据:
mysql> select id,name,sex,grade,createtime from students;
mysql中没有top()函数,但可以通过limit确定要查询的数据范围:
mysql> select id,name,sex,grade,createtime from students order by id limit 0,2;
limit 0,2
意思是从第0条开始,查询2条记录,一般用于分页查询。
update
修改数据同样使用update关键字:
mysql> update students set name='吕不韦' where id>1 order by id limit 1;
修改id大于1并且按id升序排序的第一行记录的name为’吕不韦’。
delete
mysql> delete from students where id=1 order by createtime desc limit 1;
alter table
增加字段score,并指定类型为int默认值为0:
mysql> alter table students add score int default '0';
删除字段score:
mysql> alter table students drop score;
增加索引:
mysql> alter table students add index idx_name(Id);
可以创建多个属性的联合索引,用逗号分隔。
删除索引:
mysql> alter table students drop index idx_name;
加主键约束:
mysql> alter table students add primary key(id);
给主键增加自增属性(必须是主键):
mysql> alter table students modify id int unsigned auto_increment;
删除自增属性:
mysql> alter table students modify id int;
删除主键约束(必须先删除自增属性):
mysql> alter table students drop primary key;
加唯一性约束:
mysql> alter table students add unique uk_name(name);
修改表名
mysql> rename table students to student;
备份数据库
备份数据库需要执行mysqldump.exe程序,所以需要再bin目录下执行,而不是再mysql服务中执行。
导出数据库脚本
命令:mysqldump -u 用户名 -p 数据库名 > 导出文件名
D:\Tools\mysql-8.0.12-winx64\bin>mysqldump -u root -p testdb > testdb.sql
导出表
命令:mysqldump -u 用户名 -p 数据库名 表名 > 导出文件名
D:\Tools\mysql-8.0.12-winx64\bin>mysqldump -u root -p testdb students > student.sql
导出数据库结构
命名:mysqldump -u 用户名 -p -d 数据库名 > 导出文件名
-d
表示不包含数据
D:\Tools\mysql-8.0.12-winx64\bin>mysqldump -u root -p -d testdb > testdb.sql
备份数据库
命令:mysqldump -u 用户名 -p --opt 数据库名 > 备份文件名
D:\Tools\mysql-8.0.12-winx64\bin>mysqldump -u root -p --opt testdb > testdb_back