MySQL的使用

MySQL服务操作(管理员权限的命令提示符窗口)

启动MySQL服务

net start mysql;

停止MySQL服务

net stop mysql;

登录MySQL

显式登录,密码会显示出来

mysql -u用户名 -p密码

隐式登录,写到-p处回车,再输入密码,密码不可见

mysql -u用户名 -p
密码

登录指定IP地址的下的MySQL

mysql -hIP地址 -u用户名 -p密码

登录指定IP地址的下的MySQL

mysql --host=IP地址 --user=root --password=root

退出MySQL,都是退出命令,也可以按Ctrl + C进行退出

exit
quit

SQL注释

单行注释,- -后面必须有空格,#后面可以不加空格

-- 注释信息
#注释信息

多行注释,同Java中的多行注释用法一致

/* 注释信息 */

DDL:操作数据库

create

创建数据库,当要创建的数据库已存在时,会在控制台打印错误信息

create database 数据库名称;

判断数据库是否存在,若不存在则创建,存在则不会打印错误信息

create database if not exists 数据库名称;

创建数据库并指定使用的字符集,如:utf8 和 gbk

create database 数据库名称 character set 字符集名称;

判断数据库是否存在,若不存在则对其进行创建并指定其使用的字符集,存在则不会打印错误信息

create database if not exists 数据库名称 character set 字符集名称;

retrieve

查询所有数据库的名称

show databases;

查询指定数据库所使用的字符集

show create database 数据库名称;

查询当前所使用的数据库,当当前使用的数据库不存在时,会返回null

select database();

update

修改数据库所使用的字符集

alter database 数据库名称 character set 字符集名称;

delete

删除数据库,当数据库不存在时,会在控制台打印错误信息

drop database 数据库名称;

判断数据库是否存在,存在则会将其删除,不存在则不会打印错误信息

drop database if not exists 数据库名称;

使用数据库

use 数据库名称;

DDL:操作表

create

数据类型数据名称说明
整数类型tinyint很小的整数
smallint小的整数
mediumint中等大小的整数
int(dataLength)普通大小的整数;在括号中指定可写入的数据的长度,只能填入整数;括号可以省略,省略后默认数据长度为11
小数类型float单精度浮点数
double(m,d)双精度浮点数,在括号中写入整个数据的长度和小数点后面数据的长度,如:double(5,2),小数长度为5,小数点后面有两位数;括号省略不写后,可以写入任意长度的小数
decimal(m,d)压缩严格的定点数
日期类型yearyyyy,1901~2155
timeHH:mm:ss,-838:59:59~838:59:59
dateyyyy-MM-dd,1000-01-01~9999-12-03
datetimeyyyy-MM-dd HH:mm:ss,1000-01-01 00:00:00~9999-12-31 23:59:59
timestampyyyy-MM-dd HH:mm:ss,1970-01-01 00:00:01 UTC~2038-01-19 03:14:07 UTC
字符串char(M)M为0~255之间的整数
varchar(M)M为0~65535之间的整数
blobtinyblob允许长度0~255字节
blob允许长度0~65535字节
mediumblob允许长度0~167772150字节
longblob允许长度0~4294967295字节
clobtinytext允许长度0~255字节
text允许长度0~65535字节
mediumtext允许长度0~167772150字节
longtext允许长度0~4294967295字节
二进制varbinary(M)允许长度0~M个字节的变长字节
binary(M)允许长度0~M个字节的定长字节

创建表,创建多个列时,列与列之间要用逗号分隔开,最后一个列后面不需要加逗号

create table 表名(
	列名1 数据类型1,
		...
	列名n 数据类型n
);

创建表演示

create table student(
	id int,
	name varchar(10);
	age int,
	score double(4,1),
	birthday date,
	insert_time timestamp
);

复制表,不包含数据

create table 表名 like 被复制的表名;

retrieve

查询数据库中所有表的名称

show tables;

查询表结构

desc 表名;

update

修改表名

alter table 表名 rename to 新表名;

修改表使用的字符集

alter table 表名 character set 字符集名称;

添加单列

alter table 表名 add 列名 数据类型;

添加多列

alter table 表名 add(
	列名1 数据类型1,
		 ...
	列名n 数据类型n
);

修改列的数据类型

alter table 表名 modify 要修改的列名 修改后的数据类型;

修改列的名称和数据类型

alter table 表名 change 要修改的列名 修改后的列名 修改后的数据类型;

delete

删除列

alter table 表名 drop 列名;

删除表,当数据库不存在时,会在控制台打印错误信息

drop table 表名;

判断表是否存在,存在则会将其删除,不存在则不会打印错误信息

drop table if exists 表名;

DML:操作数据

值要与指定的列或表中的列一一对应
除数字类型外,其他类型需要使用引号(’’,"")包裹

create

为指定列插入数据

insert into 表名(1,...,列n) values(1,...,值n);

为所有列插入数据

insert into 表名 values(1,...,值n);

DQL:retrieve

语法

关键字作用
select字段列表
from表名列表
where条件列表
group by分组字段
having分组之后的条件
order by排序
limit分页限定

基础查询

查询表中的所有数据

select * from 表名;

查询表中指定列下的所有数据

select 要查询的列名1, ..., 要查询的列名n from 表名;

查询表中指定列所有的数据,并去除重复

select distinct 要查询的列名1, ..., 要查询的列名n from 表名; 

运算时,若有值为null,就将其修改成指定的值

select ifnull(要查询的列名1,替换后的值), ifnull(要查询的列名2,替换后的值) from 表名;

给指定列起别名,可用一个空格代替as

select 列名1 as 别名1, 列名2 别名2 from 表名;

条件查询

查找指定列中大于给定参数的所有信息

select * from 表名 where 列名 > 指定参数;

查找指定列中大于等于给定参数的所有信息

select * from 表名 where 列名 >= 指定参数;

查找指定列中等于给定参数的所有信息,SQL中没有==

select * from 表名 where 列名 = 指定参数;

查找指定列中不等于给定参数的所有信息,!=可以用<>代替

select * from 表名 where 列名 != 指定参数;

查找指定列中大于等于给定参数1,小于等于给定参数2的所有信息,and可以用&&代替,但不建议使用

select * from 表名 where 列名 >= 指定参数1 and 列名 <= 指定参数2;

查找指定列中范围在参数1和参数2之间的数据,包括参数1和参数2

select * from 表名 where 列名 between 指定参数1 and 指定参数2;

查找指定列的符合参数1或者参数2的数据,可以用in代替或条件的判断,括号中的参数个数是可变的

select * from 表名 where 列名 = 指定参数1 or 列名 = 指定参数2;
select * from 表名 where 列名 in (指定参数1,指定参数2);

查询该列中值为null的所有数据,null值不能使用=判断

select * from 表名 where 列名 is null;

查询该列中值不为null的所有数据,null值不能使用!=判断

select * from 表名 where 列名 is not null;

模糊查询

查询字符长度为三个字符的所有数据,一个_就代表一个字符

select * from 表名 where 列名 like '___';

查询任意字符长度的所有数据,%代表任意个字符

select * from 表名 where 列名 like '%';

查询符合以指定字符开头的,后面只有一个任意字符的所有数据

select * from 表名 where 列名 like '指定字符_';

查询符合以指定字符开头的,后面可以有任意个字符的所有数据

select * from 表名 where 列名 like '指定字符%';

查询符合第一个字符为任意字符,第二个字符以指定字符开头的,后面可以有任意个字符的所有数据

select * from 表名 where 列名 like '_指定字符%';

查询列中指定字符前任意字符,且字符长度不限,而指定字符后只有一个任意字符的数据

select * from 表名 where 列名 like '%指定字符_';

查询列中首位和末位字符任意,中间是指定字符的所有数据

select * from 表名 where 列名 like '_指定字符_';

查询列中任意位置有指定字符的所有数据

select * from 表名 where 列名 like '%指定字符%';

排序查询(默认asc排序)

将表中的所有数据以指定列值的升序排序

select * from 表名 group by 列名1 asc, ..., 列名n asc;
select * from 表名 order by 列名1 asc, ..., 列名n asc;

将表中的所有数据以指定列值的降序排序

select * from 表名 group by 列名1 desc, ..., 列名n desc;
select * from 表名 order by 列名1 desc, ..., 列名n desc;

聚合函数

语法

关键字作用
count计算个数
max计算最大值
min计算最小值
sum计算和
avg计算平均值

计算表中有多少条数据,后面跟order by列名时,数据的计算不会发生变化;后面跟group by列名时,会查询每一行或每一列是否有数据,有就返回1,没有就返回0

select count(*) from 表名;

计算该列中有多少条不为空的数据,后面跟order by列名时,数据的计算不会发生变化;后面跟group by列名时,会查询每一行或每一列是否有数据,有就返回1,没有就返回0

select count(列名) from 表名;

查询指定列中数值最大的数据

select *, max() from 表名;

查询指定列中数值最小的数据

select *, min() from 表名;

计算指定列中所有数据的和

select sum() from 表名;

计算指定列中所有数据的平均值

select avg() from 表名;

分组查询

通过给定的列将表中的数据进行分组,重复的数据将会被过滤,只展示一次;select和from的中间建议使用进行分组的列

selectfrom 表名 group by 分组条件;

单独使用,与where的使用方法类似

select * from 表名 having 条件判断;

having后面必须跟聚合函数返回的结果

select * from 表名 group by 字段 having 条件判断;

where后面跟普通条件判断,having后面跟聚合函数条件判断

select * from 表名 where 条件判断 group by 字段 having 条件判断;

分页查询

查询从指定索引开始的指定条数据(起始索引 = 当前页码 - 1)

select * from 表名 limit 起始索引,显示条数;

update

修改表中的所有数据为指定数据

update 表名 set 要修改的列名1 = 要修改成的数据1, ...,要修改的列名n = 要修改成的数据n;

修改表中指定数据

update 表名 set 要修改的列名1 = 要修改成的数据1, ...,要修改的列名n = 要修改成的数据n where 条件判断;

delete

删除表中所有数据(一条一条进行删除)

delete from 表名;

删除表,再创建一个完全一样的空表

truncate table 表名;

根据条件删除对应的数据

delete from 表名 where 条件判断;

约束

语法

1级关键字2级关键字作用
primary key主键约束
auto_increment自增约束
not null非空约束
unique唯一约束
foreign key外键约束
on update cascade级联更新
on delete cascade级联删除

建表时添加约束

create table 表名(
	/* 为id添加主键约束和自增约束,一个表中只能有一个主键,当列被添加主动约束后,会默认添加非空约束和唯一约束;自增约束只能为主键添加 */
	id int primary key auto_increment,
	/* 为name添加非空约束,表示该列的值不能为空 */
	name varchar(10) not null,
	/* 为phone添加唯一约束,表示该列中的值不允许有重复 */
	phone int(11) unique,
	/* 外键列 */
	gender_id int(1),
	/* 为gender_id添加外键约束,且设置了级联更新和级联删除,constraint 外键名称可以省略,省略后外键名称会被自动生成;关联主表时主表必须存在,且必须关联主键;foreign key后面的()中需要写入要作为外键的列名,且必须与主键的数据类型一致;当往表中插入数据时,外键列中所写入的数据必须在被关键主表的主键中存在;设置级联更新后当被关联的主键中的数据被改变时,外键列中对应的数据也会被修改;设置级联更新后,当被关联的主键中的数据被删除时,外键列对应的所有数据会被删除,需谨慎使用 */
	constraint 外键名称 foreign key(gender_id) references 主表名称(主键列名称) on update cascade on delete cascade
);

对已有表进行添加或删除约束

添加约束

添加非空约束,唯一约束,主键约束,自动增长约束

alter table 表名 modify 列名 数据类型 约束类型;

添加外键约束

alter table 表名 add constraint 外键名称 foreign key(外键列名称) references 主表名称(主表列名称);

添加外键约束并设置级联更新

alter table 表名 add constraint 外键名称 foreign key(外键列名称) references 主表名称(主表列名称) on update cascade;

添加外键约束并设置级联删除

alter table 表名 add constraint 外键名称 foreign key(外键列名称) references 主表名称(主表列名称) on delete cascade;

删除约束

删除非空约束,自动增长

alter table 表名 modify 列名 数据类型;

删除唯一约束

alter table 表名 drop index 列名;

删除主键约束

alter table 表名 drop primary key;

删除外键约束,外键列无论有无级联更新或级联删除都会被删除

alter table 表名 drop foreign key 外键名称;

数据库的备份和还原(需要在命令提示符窗口中使用)

备份数据库下指定表到指定位置,当指定数据库名称时,生成的文件中会有用法提示;表名称可省略,省略后数据库中的所有表都会被备份

mysqldump -u用户名 -p密码 数据库 表名称 > 保存的路径/文件名称.sql

还原数据库

步骤一:登录mysql
	mysql -u用户名 -p密码
步骤二:指定要还原到的数据库
	use 数据库名称;
步骤三:数据库还原
	source 保存的路径/文件名称.sql

多表查询

内连接

隐式内连接

通过关联关系查询两个表中的所有数据

select
	*
from1,2
where1.关联字段 =2.关联字段;

显式内连接

通过关联关系查询两个表中的所有数据;inner是可以省略的

select
	*
from1
inner join2
where1.关联字段 =2.关联字段;

外连接

左外连接

以表1为主,根据关联关系查询1中的所有数据及与表2的交集部分;outer是可以省略的

select
	字段列表
from1
left outer join2
on1.关联字段 =2.关联字段;

右外连接

以表2为主,根据关联关系查询表2中的所有数据及与表1的交集部分

select
	字段列表
from1
right outer join2
on1.关联字段 =2.关联字段;

子查询

查询中嵌套查询,从而获取想要的数据,如下所示

查询学生表中学习成绩最高的学生的所有信息

select
	*
from
	学生表
where
	学生表.成绩 = (select
					max(成绩)
				  from
				  	学生表);

查询学生表中学习成绩小于平均成绩的学生的所有信息

select
	*
from
	学生表
where
	学生表.成绩 < (select
				  	avg(成绩)
				  from
				  	学生表);

查询学生表中学习语文或数学的所有的学生信息

select
	*
from
	学生表
where
	学生表.课程id
in
	(select
		课程id
	from
		课程表
	where
		name = '语文' or name = '数学');

查询入学时间是2020-9-1的学生信息和班级信息

select
	*
from
	班级表,
	(select
		*
	from
		学生表
	where
		入职时间 = '2020-9-1') 学生表
where
	班级表.id = 学生表.班级id;

通过学生表中的班级人数,查询出班级编号,班级名称和班级人数

select
	班级表.班级id, 班级表.班级名称,学生表.班级人数
from
	班级表,
	(select
		班级id, count(id) 班级人数
	from
		学生表
	group by
		班级id) 学生表
where
	班级表.id = 学生表.班级id;

事务

事务提交(MySQL默认自动提交,1代表自动提交,0代表手动提交)

查询事务的提交方式

select @@autocommit;

修改事务的提交方式,对数据进行操作后需要重启SQLyog才能看到数据有无变化,SQLyog重启后会将事务的提交方式改为自动提交

set @@autocommit = 参数;

手动提交

commit;

事务的隔离级别

隔离级别说明
read uncommitted读未提交: 脏读,不可重复读,幻读
read committed读已提交: 不可重复读,幻读
repeatable read可重复读: 幻读
serializable串行化: 无问题

查询数据库的隔离级别

select @@tx_isolation;

修改数据库的隔离级别,需要重启才能查出是否修改成指定的隔离级别,若不想重启就能查出修改的隔离级别,就将global替换成session

set global transaction isolation level 隔离级别;

开启事务

start transaction;

DCL:管理用户,授权

管理用户

查询并使用

1.切换到mysql数据库
	use mysql;
2.查询用户表
	select * from user;
注: host列中的%表示可以在任意主机下使用用户登录数据库

创建用户

create user '用户名'@'主机名' identified by '密码';

删除用户,删除用户必须使用命令删除

drop user '用户名'@'主机名';

修改用户密码,并重新加载权限表

update user set password = password('新密码') where user = '用户名';
flush privileges;

修改用户密码

set password for '用户名'@'主机名' = password('新密码');

忘记用户名密码

命令提示符窗口中停止mysql服务,需要管理员身份

net stop mysql

命令提示符窗口中停止mysql服务,需要管理员身份

net stop mysql

使用无验证方式启动mysql服务

mysqld --skip-grant-tables

输入以下命令登录mysql服务,再使用上面修改密码的方法修改密码即可

mysql

修改完密码后,打开任务管理器,右键点击结束任务(E)将mysqld.exe进程终止

结束进程

启动mysql服务,再进行登录即可

net start mysql

授权管理

权限说明具体说明
all [privileges]所有权限
ALTERAlter_privTables
ALTER ROUTINEAlter_routine_privStored routines
CREATECreate_privDatabases, tables, or indexes
CREATE ROUTINECreate_routine_privStored routines
CREATE TABLESPACECreate_tablespace_privServer administration
CREATE TEMPORARY TABLESCreate_tmp_table_privTables
CREATE USERCreate_user_privServer administration
CREATE VIEWCreate_view_privViews
DELETEDelete_privTables
DROPDrop_privDatabases, tables, or views
EVENTEvent_privDatabases
EXECUTEExecute_privStored routines
FILEFile_privFile access on server host
GRANT OPTIONGrant_privDatabases, tables, or stored routines
INDEXIndex_privTables
INSERTInsert_privTables or columns
LOCK TABLESLock_tables_privDatabases
PROCESSProcess_privServer administration
PROXYSee proxies_priv tableServer administration
REFERENCESReferences_privDatabases or tables
RELOADReload_privServer administration
REPLICATION CLIENTRepl_client_privServer administration
REPLICATION SLAVERepl_slave_privServer administration
SELECTSelect_privTables or columns
SHOW DATABASESShow_db_privServer administration
SHOW VIEWShow_view_privViews
SHUTDOWNShutdown_privServer administration
SUPERSuper_privServer administration
TRIGGERTrigger_privTables
UPDATEUpdate_privTables or columns
USAGESynonym for “no privileges”Server administration

查询权限

show grants for '用户名'@'主机名';

授予权限,*表示所有

grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';

删除用户权限

revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邪丶魔狱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值