mysql
jdbc
参考文章:
创建
创建用户
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’;