MySQL常用语法

本文详细介绍了MySQL的常用命令,包括数据库操作(创建、删除、切换)、用户管理(创建、删除、权限调整)、表级别操作(查看、创建、修改、删除),以及查询语法、乐观锁和悲观锁、分区技术等。涵盖了索引使用、分区操作和常见问题解决方案。
摘要由CSDN通过智能技术生成

MySQL常用命令

数据库相关

,展示数据库
	show databases;
,创建数据库
	create database db_name
,删除数据哭
	drop database db_name
,使用数据库
	user db_name
	注:在操作表时必须先指定使用那个数据库

用户管理

注:mysql数据库下存在user表,创建的用户都在该表中

,创建用户
	create user '用户名'@'ip地址' identified by '密码';
	注:ip地址为 %号时表示任意ip都可访问
,删除用户
	drop user '用户名'@'ip地址'
,修改用户
	rename user '旧用户名'@'旧ip地址'; to '新用户名'@'新ip地址'
,修改密码
	set password for '用户名'@'ip地址' = Password('passwd');
,查看用户权限
	show grants for '用户'@'ip地址'
,增加权限
	grant 权限1,权限2 on dbname.db_table(*) to  '用户'@'ip地址'
,删除权限
	revoke 权限1,权限2 on dbname.db_table(*)  from '用户'@'ip地址'
	权限类别
		数据操作
			select--查询, insert--添加, update--修改, delete--删除
		表操作
			create-创建表,alter--修改表结构, drop--删除表
			references--外键,create temporary tables--临时表权限,
			index--索引,create view--创建视图,show view--查勘视图
			create routine | alter routine -- 添加表操作函数,execute--执行函数
		全部权限
			all privilages--某个数据库的整个权限
			all--所有数据库权限

表级别操作

,查看表
	show tables
,查看表结构
	desc table_name;
,查看建表语句
	show create table table_name
,创建表
	create table table_name(
		id int not null auto_increment primary key,
		age int unsigned not null default "0" comment "年龄"
	);
	auto_increment	--	自动增长
	primary key	--	主键
	unsigned	--	设置无符号
	default	--	默认值
	comment	--	备注
,设置表备注
	alter table table_name comment "注释"
,修改表名称
	rename table old_tablename to new_tablename
,删除表
	drop table table_name;
,删除表内容
	delete from table_name;
,清空表内容(主键变为1)
	truncate table table_name;
,查看表数据(主键不变)
	select * from table_name
,增加字段
	alter table `table_name` add field_name field_type not null default "默认值" comment "注释" 
,删除字段
	alter table `table_name` drop `index_name` 
,修改字段类型
	alter table `table_name` modify `column_name` int not null (auto_increment primary key)
,重命名
	alter table `table_name` change old_field new_field field_type
,创建索引
	index	-	普通索引
		create index `index_name` on table(`field_name`)
	unique index	--	唯一索引
		create unique index `index_name` on table(`field_name`)
	fulltext index	--	全文索引
		create fulltext index `index_name` on table(`field_name`)
,删除索引
		drop index ·index_name· on table
,插入数据
		单独添加
		insert into table_name(`field_a`, `field_b`) values(``,``)
		批量添加
		insert into table_name(`field_a`, `field_b`)values(``,``),(``,``)(``,``)
,设置自增主键
  		field field_type not null auto_increment primary key

查询语法

,查询,排序,分页
	select field,field2 from table where field_name='search_val' order by field desc limit 0,10
,分组, having过滤
	select sex from table group by sex(`field`) having avg(age) > 30

注:
	where 与 having 的区别
	where  不能使用聚合函数作为检索条件
	having  通常在group by  后使用过滤条件可使用聚合函数当过滤条件
,内链接(只显示满足条件的)
	select * from table as table_a inner join table as table_b where table_a.bid  = table_b.id
,左外链接(以左表为主 主表中匹配不到右表以null代替)
	 select * from table as table_a left join table as table_b where table_a.bid  = table_b.id	
,右外链接(以右表为主 主表中匹配不到左表以null代替)
	 select * from table as table_a right join table as table_b where table_a.bid  = table_b.id	
,全外链接
	select * from table as table_a left join table as table_b where table_a.bid  = table_b.id	
	union 
	select * from table as table_a right join table as table_b where table_a.bid  = table_b.id	
,联合
	select * from table_a
	union
	select * from table_b
	注:
		union 显示全部数据,不进行重复过滤,效率较高
		union all 过滤重复数据
		联合表中字段数必须一致
,子查询
	select * from table pid in (select id from table)

MySQL – Lock

,乐观锁:用于控制高并发的一种常见手段
	实现流程:
		1,获取准备修改数据的记录[包含控制字段此处以version 字段为例]
		2,在修改时,修改数据中需包含 version 字段并且在原有的基础上1,修改条件中需包含version字段 [比较值为从步骤1中获取的version值]
	实现原理:
		where条件成立则修改成功,反之失败
	例子:
		表为 id, surplus, version
		
		首先:查询准备修改的数据
			 info =  select id,surplus,version from table where id = 1
		然后:数据修改
			  update table set surplus = 1, version = version  + 1 where  id = 1 and version = info['version']
,悲观锁:用于控制高并发的一种手段
	实现原理:
		1,关闭MySQL自动提交功能【默认是开启的】
		2,开启事务
		3,使用 select.... for update 加行锁
			意义:加行锁,使得其他操作无法进行,只能等待检索才可进行下一步
			注:此处指定记录的中必须含有where条件,并且条件必须有索引,否则会将整个表锁定
		4,事务提交 | 回滚
	例子:
		set autocommit = 0;
		begin;
		select * from where table id = 1 for update;
		commit | rollback

在这里插入图片描述

分区

,分区类型
	,range分区:
		根据给定的范围区间进行区分,提供分区的字段多数为主键且该类型必须为数字类型
	,list分区
		与range类似只不过list是提供一个用于分类的离散值(列表集合),当某字段的值被分区包含时,便属于该分区
	,hash分区
		根据MOD(分区键,分区数)的值把数据行存储到表的不同分区中
		数据可以平均的分布在各个分区中
		HASH分区的键值必须是一个INT类型的值,或是通过函数可以转为INT类型
	,key分区
			根据MySQL内部提供的哈希函数进行分区。
			
,分区操作
	,创建分区:
		,range分区
			,表已存在		
			alter table name partition by range(`field_name`) (
				partition partition_name values less than (10[分区区间]),
				partition partition_name values less than (20[分区区间]),
				partition partition_name values less than maxvalue
			)
			,表不存在
			create table table_name()partition by range('field_name') (
				partition partition_name values less than (10[分区区间]),
				partition partition_name values less than maxvalue
			);
		,list 分区
			,表已存在
			alter table `name` partition by list('field_name')(
				partition name values in (num1,num2,num3),
				partition name values in (num4,num5,num6)
			)
			,表不存在
			create table table_name()partition by list('field_name') (
				partition name values in (num1,num2,num3),
				partition name values in (num4,num5,num6)
			);
		,hash 分区
			,表已存在
			alter table `name` partition by hash(id) partitions 4(分区个数)
			,表不存在
			create table table_name()partition by hash('field_name') partitions 4(分区个数)
		,key 分区
			,表已存在
			alter table `name` partition by linear key(id) partitions 4(分区个数)
			,表不存在
			create table table_name() partition by linear key(id) partitions 4(分区个数)
	,删除分区:
		alter table `name` drop partition partition_name
	,移出分区
		alter table `name` remove partitioning
	,合并分区
		alter table `name` reorganize partition p_name1, p_name2, p_name3, into  (partition p_name values less than (num 合并区间))
	,拆分区间

  注意:
,含有外键,全文索引不能进行分区。
,如果含有唯一索引或者主键,则分区列必须包含在所有的唯一索引或者主键在内。
,临时表不能分区。
,只有RANGE和LIST分区能进行子分区,HASH和KEY分区不能进行子分区。
,分区字段尽量不要可以为null
,删除分区时,所在分区的数据同样删除(range, list分区相关数据删除,hash,key分区不删除)
,最后一个分区不能删除,想要删除的话只能使用删除表(drop table)
,当对非空数据表进行分区操作时,分区区间必须包含全部分区字段的值
,合并区间时,新区间范围区间值必须等于待合并区间中区间的最大值
,拆分区间时,不能改变原分区区间的最大值

总结

补录

  第一节,MySQL索引的使用及原理
  第二节,MySQL常用语法
  第三节,MySQL常遇问题

引用文档

[MySQL分区](https://www.cnblogs.com/qiyunhai/p/13729824.html)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值