mysql学习

jdbc

参考文章:

Java通过驱动包(jar包)连接MySQL数据库

创建

创建用户

create user 'username'@'host' IDENTIFIED by 'password' 
--刚创建的用户权限都为N,可以连接数据库,不能为自己授权限host
--表示允许用户登入的主机名,可以使用%通配符,如果不指定,则认为不限制主机,
--等价于@'%',如果不添加密码,则认为不需要码登入
create user 'user1'@'localhost' IDENTIFIED by 'pwd1','user2'@'localhost' IDENTIFIED by 'pwd2' 
--同时创建多个用户	

创建数据库

create DATABASE [数据库名称] 
default CHARACTER set utf8   --指定默认字符集和校对
default collate utf8_general_ci 

创建表

create table person(
	id int comment '用户id' auto_increment,   --设置自增
	name VARCHAR(10) COMMENT '用户名',  --列注释
	PRIMARY KEY (id)  --设置主键
)
COMMENT '用户信息表'  --表注释
  create table person2 like person --创建和person一样的表结构带约束,不复制数据
  create table person3 as select * from person --创建和person一样的表结构,不带约束,复制数据

创建数据

insert into person (name) values ('张三') --插入一行数据
insert into person (name) values ('李四'),('王五') --插入多行数据
insert into stu (name) select name from person --将一张表数据插入到另一张表中 (指定列)
insert into stu select * from person --将一张表数据插入到另一张表中 (全部列)

创建表索引

create index [索引名称] on [表名](列名)

删除

删除数据库

drop database [数据库名称]

删除用户

drop user [username]
--如果删除的用户创建了表,索引或者其他数据库对象,会继续保留,mysql没有记录谁创建了这些对象

删除表

drop table [表名称]

删除表数据

delete from [表名称]    --删除单张表全部数据
truncate  [表名称]

更新

更新用户名

rename user 'aaa'@'localhost' to 'bbb'@'localhost'

更新用户密码

set PASSWORD for 'username'@'localhost' = PASSWORD('pwd') 

更新数据库

alter database dd character set sjis default COLLATE sjis_japanese_ci 
--修改数据库默认字符集和校对,只对后创建的表有效

更新表数据

update person set name='李六' where id=3       --将person表中id为6的name更新(单表更新)
update stu,person set stu.name='王七',person.name='王七' where stu.id=person.id and stu.id=1 
--将person和stu表中id为1的name更新(多表更新)

查看

查看用户

select user() --返回结果为当前登入用户 [用户名]@[IP地址]
select user,host FROM mysql.user;  显示数据库所有用户和授权登入的ip

查看数据库

show databases  
select schema_name from information_schema.SCHEMATA
select schema_name,default_character_set_name,default_collation_name from 
information_schema.SCHEMATA
--mysql自带两个数据库 information_schema,mysql

查看数据库中的表

show tables
select table_name from information_schema.`TABLES` where table_schema=[数据库名称]

查看表索引

show index from [表名]

使用数据库

use [数据库名称] --登入后指定
mysql -u [用户名] -p [数据库名称]  --登入时指定

权限

授予用户权限

grant select,delete on  *.* to 'username'@'host'
##用户任意地方登入
GRANT ALL PRIVILEGES ON 数据库名.* to 'root'@'%' IDENTIFIED BY 'root';

授予数据库权限

GRANT create on [数据库名].* to 'username'@'localhost'
--对该用户再次授予其它权限时,需要重新连接才会生效

授予表权限

grant select,delete on  [数据库名].[表名] to 'username'@'host','username2'@'host' 
--可以将多个权限授予多个用户,如果指定的用户不存在,会自动创建且没有密码
grant select,delete on [数据库名].[表名] to 'username'@'%' IDENTIFIED by 'password' 
--如果指定的用户不存在,最好指定密码

--

授予列权限

grant update(列名) on [数据库名].[表名] to 'username'@'localhost'
--授予用户更新表的某一列的权限

权限传递

grant select on [数据库名].[表名] to 'username'@'localhost' with grant option 
--该用户可以将该权限授予其他用户,可以传递所有相关的表权限

权限限制

grant insert on [数据库名].[表名] to 'username'@'localhost' with MAX_QUERIES_PER_HOUR 1 
--每小时插入次数限制
grant insert on [数据库名].[表名] to 'username'@'localhost' with MAX_USER_CONNECTIONS 1
grant insert on [数据库名].[表名] to 'username'@'localhost' with MAX_UPDATES_PER_HOUR 1
grant insert on [数据库名].[表名] to 'username'@'localhost' with MAX_CONNECTIONS_PER_HOUR 1

查看权限

select * from information_schema.USER_PRIVILEGES
select * from information_schema.SCHEMA_PRIVILEGES
select * from information_schema.TABLE_PRIVILEGES
select * from information_schema.COLUMN_PRIVILEGES

撤销权限

revoke select on [数据库名].[表名] from 'username'@'host'
--如果之前被授予的语句带有with grant option,该用户依然可以传递权限
revoke grant option on [数据库名].[表名] from 'username'@'host'
--撤销传递

表维护语句

ANALYZE [local] TABLE [表名] --修复索引,添加local取消写入日志
CHECKSUM TABLE person QUICK--相关的表是myisam,返回活性校验和,否则返回null
CHECKSUM TABLE person EXTENDED --如果缺省则默认为EXTENDED,一律返回计算校验和
OPTIMIZE local TABLE person 
--不断使用增删改,会使得表的内部结构变成片段,降低sql语句的速度,需要重新组织表中数据
CHECK TABLE person--检查表状态
REPAIR TABLE person--修复表,只对myisam和archive存储引擎的表有效

show和help

show CHARACTER set --显示mysql支持的所有字符集列表
show COLLATION --显示mysql支持的所有校对列表
show COLUMNs FROM person--显示表的所有列信息
SHOW create DATABASE big --显示数据库的创建语句,类比出查看表,存储过程等的创建语句
show events --显示所有时间列表 
show function STATUS --显示某个存储函数状态
show GRANTS --显示当前用户的权限信息
help 'contents' --查看信息

异常信息积累

INSERT command denied to user ‘username’@‘localhost’ for table ‘tablename’
用户在此表不可以使用insert命令

存储过程

存储过程定义与调用

--定义存储过程
delimiter //  --重新定义结束符
create PROCEDURE del_person
(in mid int)
BEGIN
	delete from person where id=mid;
	COMMIT;
END//
--调用存储过程
call del_person(1)

--带输出变量的存储过程
delimiter //
create procedure selectname(in mid int,out mname varchar(10))
begin
	select name into mname from person where id = mid;
END //
call selectname(2,@name);
select @name

存储过程条件语句

delimiter //
create procedure compare(in a int,in b int,out c int)
begin
	if a>b then
		set c=1;
	elseif a=b then
		set c=2;
	else 
		set c=3;
	end if;
end//

call compare(1,0,@n);
select @n

delimiter //
create procedure compare2(in a int,in b int,out c int)
begin
	case
		when a>b then set c=1;
		when a=b then set c=2;
		else set c=3;
		end case;
end//

call compare2(1,0,@n);
select @n

存储过程循环语句

delimiter //
create  procedure circle(in a int,out b int)
begin
	while a<3 DO
		set b=a+3;
		set a=a+1;
	end WHILE;
end//
call circle(1,@n);
select @n
delimiter //
create  procedure circle2(in a int,out b int)
begin
	REPEAT
	set b=a+1;
	set a=a+1;
	UNTIL a>1 END REPEAT;
end//
call circle2(1,@n);
select @n
delimiter //
create  procedure circle3(in a int,out b int)
begin
	loop1:loop
	if a>3 then
		LEAVE loop1; --退出循环语句块  --ITERATE开始循环(退出本次循环开始下一次)
	end if;
		set a=a+1;
		set b=a+1;
	end loop loop1;
end//
call circle3(1,@n);
select @n

出错处理

delimiter //
create PROCEDURE test2()
begin
	DECLARE CONTINUE HANDLER for SQLSTATE '23000'
		set @a=2;
	set @a=3;
	insert into person values(2,'username');--这里主键重复,错误的状态代码为23000,最终@a为2
end//
call test2();
select @a

--continue程序发生错误不会中断处理

事件

select @@EVENT_scheduler --查看事件调度器状态
set global EVENT_scheduler=true --打开事件调度器
--创建时间
create EVENT 事件名
on SCHEDULE at '2020-12-24 09:53:00'
DO insert into 表名 VALUES(11,'luck')

预处理语句

PREPARE s1 from 'select * from stu where id=?';
set @a=1;
EXECUTE s1 using @a;
DEALLOCATE PREPARE s1 --删除预处理语句

事务

start TRANSACTION;
INSERT into stu values(16,'vvv');
SAVEPOINT s1;
INSERT into stu values(17,'klll'); --这条语句不会被持久化
ROLLBACK work to SAVEPOINT s1;
INSERT into stu values(19,'klll');
commit

脏读,读取到了未提交的数据
不可重复读,读取到了更新的数据
幻读,读取到了新插入的数据

查看表数量

SELECT count(TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_SCHEMA=‘bladex_flow’;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Ranx3

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

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

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

打赏作者

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

抵扣说明:

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

余额充值