想要通过命令提示符操作数据库,我们要先使用以下命令登录mysql数据库的账户:
mysql -u用户名 -p (按下回车键) (输入密码)
校验通过后即可成功登录。
目录
二、数据表相关指令(使用此命令前确保已经使用“use 数据库名”选择了数据库)
一、数据库相关指令
1.展示所有数据库:show databases;
2.使用数据库:use 数据库名;
3.查看当前使用的数据库:select database();
4.创建数据库:create database 数据库名;
5.删除数据库:drop database 数据库名;
二、数据表相关指令(使用此命令前确保已经使用“use 数据库名”选择了数据库)
1.展示所有数据表:show tables;
2.创建数据表:create table 表名 (列名1 类型 约束, 列名2 类型 约束,......)
可以同时创建多个列,每个列中可以有多个约束
eg:create table user (id int not null auto_increment primary key, name varchar(20) not null unique)
这里是一些常用的约束条件:
主键 primary key 可以确定唯一的一行 非空 not null 不能为空 自增 auto_increment 每次都+1
唯一 unique 列中内容不重复
默认 default 默认值 外键 foreign key 与其他表关联,是其他表的主键
3.查看数据表结构:desc 数据表名;
4.修改数据表:(1)增加列:alter table 数据表名 add 列名 类型 约束;
(2)删除列:alter table 数据表名 drop 列名;
(3)修改列:alter table 数据表名 change 原列名 新列名 类型 约束;
三、用户相关指令
1.创建用户:create user '用户名'@'ip地址' identified by '密码';
eg:create user 'admin'@'%' identified by '123456';
这个例子是在当前登录账户下创建一个用户名为admin,密码为123456的用户,其中@为固定格式,%为默认所有ip都可以使用这个用户名和密码登录该账户。
2.分配权限:grant 权限(可以是多个)on 数据库名.数据表名 to '用户名'@‘ip地址’;
eg: grant all on *.* to 'admin'@'%'
这个例子是授予admin用户管理所有数据库中所有表的所有权限,all为所有权限,*.*为所有数据库中的所有表.
3.删除用户:drop user '用户名'@'ip地址';
如果MySQL版本为8.0.16以上,即使是在root用户下,创建用户并给其分配权限后对其进行删除操作会报错:
Access denied; you need (at least one of) the SYSTEM_USER privilege(s) for this operation
这是因为从8.0.16版本开始,MySQL新增了system_user的账户类型,而且分析报错信息,也是提示我们没有system_user的权限
解决方案是给当前登录用户授权:grant system_user on *.* to ‘用户名’;
这样就可以正常删除用户了
4.修改密码:alter user '用户名'@‘ip地址’ identified by ‘新密码’;
四、对数据库中的数据表进行增删改查操作的指令
1.增:(1)insert into 表名 values (值1,值2,....值n),(值1,值2,....值n);
使用这种方式添加需要保证列的个数与值的个数一致,且无论是否有自增列或者默认值,有几列就要写几个值。
(2)insert into 表名 (列1,列2,...列n) values (值1,值2,...值n);
使用这种方式添加可以指定添加那些列的数据,没有自增列或者没有默认值的列必须添加
(3)insert into 表名 set 列1 = 值1, 列2 = 值2;
使用这种方式可以指明插入的列和值
下面是一些常见的where条件举例:
比较运算符 = > >= < <= != 逻辑运算符 and or not
判空 is null;is not null in(python中的成员运算符) in(a,b,c) between and 范围比较 like 后面跟占位符,%代表多个字符,_代表一个字符
2.删:delete from 表明 where 条件;
如果没有where条件会清空表
3.改:update 表名 set 列1 = 值1 where 条件;
如果没有条件会修改整个表
4.查:(1)查看表中所有内容:select * from 表名;
(2)查看表中指定列并为其设置别名:select 列名1 as 新列名,列名2 as 新列明 from 表名;
(3)查看表中满足指定条件的行:select * from 表名 where 条件;
五、外键
如果一个表中存在主键或者外键,我们在不删除这些键的情况下是没办法直接删除这些表的,
为了解决这个问题,我们可以在创建表时的约束中添加下面这段指令,在添加外键的时候给其加上级联约束,这样在删除的时候会进行级联删除。
创建和添加外键:
constraint 外键名 foreign key (列名) references 其他表(其他表的列) on update cascade on delete cascade;
删除外键:
alter table 表名 drop forign key 外键名;
六、关联查询
1.嵌套查询:第一次查询的结果作为第二次查询的条件
2.内连接:使用关键字inner join
select 表1.列1,表1.列2,表2.列1,表2.列2 from 表1名 inner join 表2名 on 条件;
eg:select user.id,user.name,role.nick,role.level from user inner join role on user.id = role.user_id;
3.外连接:(1)左外连接:以左表为主,使用关键字 left join,将左表中的所有列显示出来,如果右 表中有数据与之对应就正常显示,没有就补全为null进行显示。
eg: select * from user left join role on user.id = role.user_id;
(2)右外连接:以右表为主,使用关键字 left join,将右表中的所有列显示出来,如果左 表中有数据与之对应就正常显示,没有就补全为null进行显示。
eg: select * from user left join role on user.id = role.user_id;
七、去重、分组、排序、分页
1.去重:distinct
select distinct 列名 from 表名;(只能使用一个列名,不然去重会失效)
2.分组:group by 一般结合count(*)进行统计
select 列名, count(*) from 表名 group by 列名;
3.排序:order by 其中asc代表升序(默认),desc代表降序
select * from 表名 oder by 列名 desc;
4.分页:limit a,b 其中a代表从索引a开始显示,b代表显示b条数据
select * from 表名 limit a,b;
八、常用函数
1.查看当前数据库:select database();
2.查看当前用户:select user();
3.查看当前MySQL的版本:select version();
4.查看现在时间:select now();
5.查看当前日期:select curdate();
6.查看当前时间:select curtime();
7.查看当前时间戳:select unix_timestamp();