【Mysql】指令(全)

1 篇文章 0 订阅

目录

1.数据库

在这里插入图片描述
在这里插入图片描述

mysql -u root -p 进入数据库

/*其他电脑连接本地数据库:需提供本地jar包和ip地址,且需要改允许外部服务器访问
use mysql;  //使用数据库
select host,user from user;   //查看地址和user
update user set host='%' where user ='root';   //如果只能本地访问,则加这个可以外部访问
flush privileges; 								   //刷新权限
select host,user from user;   /再次查看
1.create schema  XXX(新数据库);  		//创建数据库
2.show databases;	    						//展示数据库
3.show databases like 'XX%'(数据库);   	//展示以XX开头的数据库
4.use  XXX;	  	 	  					   //选择数据库
5.alter database XXX(数据库)			   //选择数据库名称
  default character set utf8  				   //修改字符集为GBK(或uft8)
  default collate utf8_general_ci;	          //修改字符集的校对规则为简体中文,可写可不写
6.drop database demo;                   //删除数据库
  create database XXX character set utf8 collate utf8_general_ci;    //一次性创建

2.引擎

1.show engines;show engines\g 	   //查询MySQL存储引擎(更多功能)
2.show variables like 'XX%';(数据库)	   //查询XX数据库默认引擎

3.数据表

primary key : 设置主键
auto_increment:自增,自动编号,如果要写字段,会自动生成下一个空的字段
not null: 不为空值
default:新字段默认数据初始值
unique:唯一索引
binary32):32位字符串(二进制)
unsigned:自定义类型
1.use XX;										
  create table if exists demo(							//创建新表
  id int auto_increment primary key comment ‘序号’,	       // 表示是否有自动编号  是否有      主键(一个数据表只能有一编号和一个主键)  comment:备注
  name varchar(30) not null,		           //创建数据表字段
  like varchar(30) not null,
  time datetime);			                  //time  时间类型
2.show columns from XX(数据表) from XX (数据库);            //查看表结构 
3.use XX;
  desc XX;                             //查看表结构

4.数据表字段

1.use XX;
  alter table XX (数据表)add XX (新字段)varchar(30) not null;     //添加新字段 
2.use XX;
  alter table XX(原字段) modify XX(新字段) varchar(40);          //修改字段类型
3.alter table XX(数据库).XX(数据表)          						//修改字段名
  change column XX (原字段)XX(新字段)varchar(30) null default null;
4.use XX;
 alter table XX(表名) drop XX(字段名);                     //删除字段
5.use XX;
  alter table XX(原表名) rename as XX(新表名);             //修改表名
6.use XX 	;										     //复制数据表
  create table XX(新数据表名)
  like XX;(源数据表名)
7.use XX;
  drop table if exists XX;                			          //删除数据表

5.运算符

1.select XX(字段名)+XX(字段名) from  XX(数据表)  	      //+ - *  /运算符
  select id+id from tables1;
2.select XX(字段名),XX(字段名),XX(字段名)=XX(值) from XX(数据表)//比较运算符(=)
  select id,name,id=2 from tables1;   值: 0 1 02

6.数据

1.insert into XX(数据表) values(‘XX’,’XX’,’XX’);(根据字段类型填数据)  //插入数据     
2.insert into XX(id,name)   values(1,'菜七');                         //插入一部分数据
3.select * from XX(数据表);  					se							//查数据
4.insert into tables set id='4',name='刘六',slike='rap',time='2000-04-05'; //插入数据
5.update demo.tables2 set slike='足球' where id='4';     //修改数据(修改id为4的slike内容)
6.select * from demo.tables2 where id='4';             //查找某一个数据
7.delete from XX(数据表) where id='4'//删除数据
8.truncate table demo.tables2;                       //删除数据表所有数据

7.DML查询数据

在这里插入图片描述
在这里插入图片描述

7.1单表查询(从指定表中查询数据)

1.select * from XX(数据表);  					//查数据表
2.select XX(字段名),XX(字段名) from XX(数据表)		//查找个别数据
3.select * from XX(数据表) where XX='XX'(数据内容)				//查找指定数据

7.1.1模糊查询

1.select * from XX(数据表) where XX(字段名) in('XX','XX')(数据内容)	//用关键字in,如果查询不到的内容输出null
2.select * from XX(数据表) where id between X(1and X(3; 	//用关键字 between and  范围查询之内的数据
3.select * from XX(数据表) where name like '%三%'         //查找有“三”这个字的数据
				                                 '三%'	        //查找以“三”开头的数据
				                                '李%三'	//查找以“李”开头“三”结尾的数据
4.select id,name from tables2 where name is null;           //查找id和name为空值的数据

7.1.2比较运算符

1.select * from tables2 where id=1and name=’张三’;        //关键字and多条件 查询(符合条件即可查询)
2.select * from tables2 where id=1or name=’李四’;   //符合随便一个条件可查询
3.select distinct name from tables2;								 //除重(把相同名字除掉)

7.1.3排序

1.select* from tables2 order by id descasc;  de:降 a:升	  //对字段进行排序(升序或降)
2.select* from tables2 order by id asc limit 3;		//按id升序排序,显示前3条数据(限制查询)

7.1.4.分页(缓解数据库压力,提高客户体验)

在显示的数据表后 写 limit 0,5; //显示1~5条数据
在这里插入图片描述
总页数=(数据总数/页面大小)+1

7.1.5分组

在这里插入图片描述
在这里插入图片描述

//SubjectNo:是编号,这两个表都有同一个编号

7.2聚合函数查询(根据一组数据求一个值)

1.select count(*) from tables2; 								//查询数据表有几条数据
2.select sum(id) from tables2;										//查询id的总值
3.select avg(id) from tables2;										//查询id的平均值
4.select max(id) from tables2;										//查询id的最大值
5.select min(id) from tables2;										//查询id的最小值

7.3连接查询(把不同表的记录连到一起)

1.select bname,book from tables1,tables2 where students.name=b ooks.name;
2.select bname,book,students.id from tables1,tables2 where students.name=books.name;

//两个表存在连接有name,则把两个表的bname和book连接起来
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.4子查询(从内到外运算符查询)

7.5合并查询(并列到一起查询)

7.6联表查询(join)

在这里插入图片描述
在这里插入图片描述

7.7自连接(一张表拆为两张一样的表,树状图)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述pid=1:顶级(父类)

7.8别名(定义表和字段的别名)

1.select * from students t where t.name=’张三’;      //把students的别名为t,查询张三
2.select name as students_name,id as students_id from students;  //把字段name的别名为students_name

8.MySql函数(一些基础函数)

8.1数学函数

1.select abs(5),abs(-5);  						//求5和 -5的绝对值

在这里插入图片描述

2.select floor(1.5),floor(-2);                //返回小于或等于x的最大整数(相当于c语言int 型)

在这里插入图片描述

3.select round(rand()*100),rand(),floor(rand()*100);             //随机数

在这里插入图片描述

4.select pi();														//π函数
5.select truncate(2.1234567,3)								  //f返回2.1234567小数点后3位
6.select round(1.6),round(1.2),round(1.123456,3);            //四舍五入
7.select sqrt(16),sqrt(25);											//平方根

8.1字符串函数

1.select insert(‘mrkej’,3,2,’book’);			//将字符串mrkej的第3位后面两位改成book

在这里插入图片描述

61select upper(‘mrasd’),ucase(‘asdasd’) ; //小写变大写
62.select left(‘asdasd’,2);						//返回前两个字符
63.select concat('+',rtrim('    asd     '),'+');   //去掉asd后面空格

在这里插入图片描述

64.select field(as,’asd’,’asdf’,as);   //返回第一个与as相同字符的字符位置

在这里插入图片描述

65.select  locate(‘me’,’I love you,you love me.); //查找me的位置
   select  position(‘me’in’I love you,you love me.);
   select instr(’I love you,you love me., ‘me’);

8.3日期时间函数

1.select curdate(),current_date(); //获取当前日期
2.select curtime(),current_time(); //获取当前时间
3.select now(),current_timestamp(),localtime(),sysdate(); //获取当前时间日期
4.select datediff(‘2019-09-05’,’2011-07-01’); //获取时间间隔天数
5.select adddate(‘2020-09-05’,3); //返回+3天的日期
6.select adddate(‘2017-11-30 23:59:59’,interual ‘1:2’ year_month);//返回+1年2个月的日期
在这里插入图片描述

7.select adddate(‘2017-11-30 23:59:59’,interual ‘1’ year); //返回+1年的日期
8.select subdate(‘2017-07-09’,6); //返回-6天的日期

8.4判断条件函数

1. select id,slike, case when id>3 then 'Very Good' when id<3 and id>1 then 'perfect' else 'not good' end llll from tables2;   //判断id如果大于3,则Very Good;id小于3大于1,则perfect,否则notgood

在这里插入图片描述

8.5系统信息函数

1.select version(),connection_id();               //查询版本号和连接数;

在这里插入图片描述

2.select database(),schema();						//查询当前使用的数据库
3.select user(),system_user(),session_user();

在这里插入图片描述

4.select charset(‘aa’),collation(‘aa’);      //获取字符串的字符集

8.6加密函数

1.select password(‘absc’)//对absc进行加密(用于用户密码)
2.select md5(‘absc’);							//对absc进行加密(用于普通数据)

在这里插入图片描述

8.7其他函数

1.select format(235.3456,3); //保留小数点后3位(四舍五入)
2(77).select charset(‘abc’),charset(convert(‘abc’ using gbk));
3.select time,cast(time as date),convert(time(数据表里面的),time) from tables2; //改变字段数据类型,time改成date
在这里插入图片描述

9.索引(查询时更快查询到需索引的文件,提高了查询效率)

没加索引前,是遍历。加了索引后是定位

9.1创建索引

9.1.1在建立数据表时创建索引

  create table tables3(
  id int(11) auto_increment primary key not null;
   name varchar(50) not null;
   math int(5) not null;
   index(id));     //普通索引:无限制条件的索引,根据该索引查询即可          
   //unique index address(id asc));    //唯一索引:索引的值必须唯一,主键是一个特殊唯一索引
   //fulltext key tables3_name(name))engine=myisam;//全文索引:只能用在字符型的字段上,查询较大字符串类型的字段
   //index math_num(math(20)));     //单列索引:只对应一个字段的索引
   //index info(name,id));            //多列索引:对多个字段的索引
   //spatlal index zijian(good))engine=myisam; //空间索引:只建立在空间数据类型上
   good geometry(空间数据类型) not null
   show create table score;         //查看表结构

9.1.2.在已建立数据表时创建索引

在这里插入图片描述

  use demo
   create index t_info on tables2(id);    //普通索引       
   create unique index t_info on tables2(id); //唯一索引
   create fulltext index t_info on tables2(id); //全文索引
   create index t_info on tables2(name(4)); //单列索引
   create index t_info on tables2(name,id); //多列索引
   create spatial index t_info on tables2(good); //空间索引
  drop index id ont_info;                     //删除索引

9.2索引原则

  • 不是索引越多越好
  • 不要对进程变动数据加索引
  • 小数据量的表不需要加索引
  • 索引一般加在常用来查询的的字段上

9.3索引背后的数据结构(之后研究)

  • 索引(Index)是帮助MySQL高效获取数据的数据结构,本质:索引是数据结构
  • 不用索引为遍历,时间复杂度为O(n)(在大数据会很慢)

10.视图(虚拟表,方便操作且有安全权限)

1.select select_priv,create_view_priv from mysql.user where user=’root’;//查询是否有创建视图的权限
2.ues  demo		                         //在tables1表中创建视图view1
create view								//如果有出错,就把没权限建的字段给删掉,看错误代码
   View1(v_id,v_name,v_like)
   As select id,name,like
   From tables1;
3.describe view1;                  //查看视图
4.show table status like ‘view1’            //查看视图信息
5.show create view view1;						//查看视图详细定义
   Select * from view1;							//查看视图数据
6.create or replace 								//修改视图字段
view view1(v_id,v_name)
as select id,name from tables2;
7.alter view view1(v_name)                  //删除视图字段
   As select name
   From tables1
   With check option;
8.update view1 set v_name=’张张三’where id=1;     //修改字符数据(数据表也会发生变化)
															  //有些数据类型不能修改
9.drop view if exists view1;                            //删除视图

11.数据完整性约束

11.1实体完整性

1.id int auto_increment,                             //自增
2.primary key (id,classid);                           //主键由表中某一列构成,可以设置两个主键(但是id还是唯一主键,如96一样,classid还是正常打)
3.user vachar(4) not null unique;                  //如果user不会重复,则可以成为候选主键

11.2参照完整性(不推荐使用外键)

1.两个表:
学生(学号,姓名,性别,生日,班级编号) //下划线为主键,班级编号为外键,正在创建的表
班级(班级编号,班级名称) //已经形成的表,且设置外键拒绝删除或更新

create table student(
id int auto_increment,
name varchar(40) not null,
sex varchar(2),
classid int not null.
Birthday date,
Primary key(id))engine=innodb default charse=utf8

Alter table student add constraint fk_classid foreign key(classid) references class(classid); //添加外键

11.3用户定义完整性

1.not null              //建表定义非空约束
2.age int check(age>6 and age<18)    //定义限制条件约束
3.check(classid in(select id from class));  //对表实施check约束,限制class表中classid字段的值只能是class表中id字段的某一个id值

11.4命名完整性约束

对完整性约束进行添加修改删除等操作,需要添加constraint语句

11.5更新完整性约束

1.alter table tables1 drop foreign key classid;      //删除外键约束
                           				primary key id;           //删除主键约束
							  			 index name        //删除候选键约束
2.alter table student drop foreign key classid;  //修改完整性约束   先删除(联级删除)
alter table student add constraint classid foreign key (classid)  //再修改(联级修改)
aeferences class(id)
on delete cascade
on update cascade;

12. DML语言(数据库操作语言)

12.1 Insert(插入语句,添加)

1.Insert into `demo` values(1,’张三’,’跳舞’,2000-2-5)

12.2 Update(修改语句)

1.Update `tables1` set ‘name=上山’where id=1;  
2.Update `tables1` set ‘name=上山’;  //如果不指定主键,将会改变所有表name值

12.3 Delete(删除)

1.delete from `tables1` where id=1; 
2.truncate `tables1`;                //清空表,重新设置自增列(如果用delete删除表,则会有空白列),不会影响事务,比delete叼

12.3.1 delete删除问题

InnoDB引擎:自增列会从1开始(存在内存当中,断电即失)
MyISAM引擎:继续从上一个自增量开始(自增列还在)(存文件中,不会丢失)

13.事务(sql执行事件,要么都成功,要么都失败)

将一组SQL放在批次中去执行
ACID原则:是指在可靠数据库管理系统(DBMS)中,事务(transaction)所应该具有的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability).

13.1 原子性

原子性意味着数据库中的事务执行是作为原子(针对一个事务)。即不可再分,整个语句要么执行,要么不执行。
在这里插入图片描述

13.2 一致性

即在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏,针对一个事务操作前与操作后的状态一致
在这里插入图片描述

13.3 隔离性

事务的执行是互不干扰的,一个事务不可能看到其他事务运行时,中间某一时刻的数据。针对多个用户同时操作,主要是排除其他事务对本次事务的影响。
在这里插入图片描述

13.3.1隔离性的级别:

在这里插入图片描述

在这里插入图片描述

13.4 持久性

意味着在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。表示事务结束后的数据不随着外界原因导致数据丢失。
在这里插入图片描述

13.5 步骤

set autocommit=0//关闭 /*默认开启事务自动提交
set autocommit=1//开启 */

手动处理事务:
set autocommit=0 //关闭自动提交
事务开启:
start transaction
insert XX
提交:一旦提交持久化(成功)
commit
回滚:回到原来的样子(失败)
rollback
事务结束:
Set autocommit=1 //开始自动提交

13.5.1需了解:

savepoint 保存点名 //设置一个事务的保存点
rollback to savepoint 保存点名 //回滚到保存点
release savepoint 保存点名 //撤销指定的保存点
在这里插入图片描述

13.6 具体步骤

create database shop character set utf8 collate utf8_general_ci;
use shop;
create table `account`(
`id` int(3) not null auto_increment,
`name` varchar(30) not null,
`money` decimal(9,2) not null,   //decimal 代表一个九位数,其中小数位是两位
Primary key (`id`)engine=innodb default charset=utf8;     //INNODB引擎 能支持事务

Insert into account(`name`,`money`) values (‘A’,2000.00),(‘B’,10000.00);

模拟转账:事务
Set autocommit = 0;     
start transaction
update acount set money=money-500 where `name`=’A’;   //A减500
update acount set money=money+500 where `name=’B’;
//在使用mysql执行update的时候,如果不是用主键当where语句,会报错误,使用主键用于where语句中正常,则需执行命令SET SQL_SAFE_UPDATES = 0;修改下数据库模式。
如果想要提高数据库安全等级,可以在恢复回原有的设置,执行命令:SET SQL_SAFE_UPDATES = 1;
commit;
rollback;
set autocommit=1;

14.权限管理和备份

14.1用户管理

1.Create user zhangyijian(用户名) identified by123456’(密码);    //创建用户
2.Set password=password(123456);                     //修改当前用户新密码
3.Set password for root =password(123456);             //修改指定用户密码
4.Rename user zhangyijian(原名) to root1(新名);                   //重命名
5.Grant all privileges *.*(数据库.表) to zhangyijian(用户);        //给指定用户的所有库和表受全部权限
6.Show grants for root@localhost(root需要加@localhost,其他用户不需要); //查看指定用户的权限
7.Revoke all privileges on *.* from zhangyijian(用户);         //撤销用户的权限
8.Drop user zhangyijian;                                     //删除用户

14.2备份

1.直接拷贝物理文件
2.Mysql workbench可视化工具导出
3.使用命令行导出mysqldump -h 主机 -u 用户名 -p 密码 数据库 表名 >物理磁盘位置

15.规范数据库设计

15.1当数据库比较复杂的时候,就需要设计

糟糕的数据库设计:

  • 数据冗余,浪费时间
  • 数据库插入和删除都会出现麻烦和异常(屏蔽使用物理外键)
  • 程序的性能差
    良好的数据库设计:
  • 节省内存空间
  • 保证数据库的完整性
  • 方便开发系统

设计
分析需求:分析业务和需要处理的数据库的需求
概要设计:设计关系图E-R图(流程图)
个人博客

  • 收集信息,分析需求
    用户表:(用户登陆注销,个人信息。写博客,创建分类)user
    分类表:(文章分类)category
    文章表:(文章信息)blog
    评论表:(评论信息)comment
    友链表:(友链信息)links
    关注表:(关注人数,粉丝人数)follow
    自定义表:(系统信息,某个关键的字)
  • 标识实体(把需求落地到每个字段,真正设计表)
    标识实体之间的关系
    写博客(需要的表):user->blog
    创建分类:user->categoy
    评论:user->blog->comment
    友链:links
    关注:user->follow

15.2 三大范式(规范数据库的设计)

如果没有规范,则可能出现:信息重复,更新异常,插入异常,删除异常

15.2.1规范性与性能的问题

关联查询的表不得超过3张表:大表分小表,每个表都关联,范式越高,性能越渣

  • 考虑商业化的需求和目标(成本、用户体验)数据库的性能更重要
  • 在规范性能的问题的时候,需要适当的考虑一下规范问题
  • 故意给某些表增加一些冗余的字段。(从多表查询变为单标查询)->提高用户体验
  • 故意增加有些计算列(从大数据量降低为小数据量的查询:索引)->提高用户体验

第一范式(1NF)
原子性:列不能够再分成其他几列;
//上表不满足
//上表满足

第二范式(2NF)
前提:满足第一范式
每张表只描述一件事情
//上表不满足产品与订单号有关,与订单金额和时间无关,需拆两张表
//上表满足

第三范式(3NF)
前提:满足第二范式
数据需要和主键直接相关,不能间接相关(消除传递依赖)
//上表不满足,所有属性都依赖于学号,满足第二范式,但是‘班主任性别’和‘班主任年龄’直接依赖的是‘班主任姓名’
//上表满足

16.JDBC

16.1数据库驱动

在这里插入图片描述

JDBC(java database connect)

  • SUN公司为了简化开发人员的(对数据库的统一)操作,提供了一个java操作数据库的规范(JDBC)。
    对于开发人员,掌握JDBC接口的操作即可
    在这里插入图片描述

16.2 IDEA连接数据库

1.创建普通项目
2.导入数据库驱动(在directory创建lib文件,把jar包粘贴进去,再lib包右键add as library)
3.加载驱动(DriverManager)

Class.forName("com.mysql.cj.jdbc.Driver");

在这里插入图片描述

4.连接数据库

Connection con= DriverManager.getConnection("jdbc:mysql://172.29.40.73:3306/demo?serverTimezone=UTC","root","123456");

5.执行sql对象(查询)

Statement statement=con.createStatement();  //执行sql的对象statement
String sql="SELECT * FROM tables1";

Statement:代表数据库。用于向数据库发送SQL语句,相当于数据库命令行(增删改查等等)

//statement.executeQuery(); //查询操作,返回结果集,封装了所有的查询结果
//statement.execute();        //执行任何sql
//statement.executeUpdate(); //更新、插入、删除。都是用这个。返回一个受影响的行数
Statement statement=con.createStatement();
String sql=”insert into tables1 values(1,’张三’,‘跳舞’,‘2000-2-5);
Int num= statement.executeUpdate(sql);
If(num>0){
	sout(“插入成功!”)}
Statement statement=con.createStatement();
String sql=”delete from tables1 where id=1;
Int num= statement.executeUpdate(sql);
If(num>0){
	sout(“删除成功!”)}
Statement statement=con.createStatement();
String sql=”update  tables1 set name=’张张’ where name=’张三’”;
Int num= statement.executeUpdate(sql);
If(num>0){
	sout(“修改成功!”)}

6.返回结果集

ResultSet resultSet=statement.executeQuery(sql);  //返回结果集
while (resultSet.next()){
    System.out.println("id="+resultSet.getObject("id"));
    System.out.println("id="+resultSet.getObject("name"));
    System.out.println("id="+resultSet.getObject("like"));
    System.out.println("id="+resultSet.getObject("time"));
}
//resultSet.getObject();//在不知道列的数据类型用这个
//resultSet.getInt();
//resultSet.next(); //移动到下一行
//resultSet.absolute(row);//移动到指定行

7.关闭(最后用的先关闭)

resultSet.close();
statement.close();
con.close();

16.3 代码实现(增删改查)

1.创建一个配置文件,放到src里面;
在这里插入图片描述

2.创建一个类(JdbcUtils),实现调用配置文件(properties)
(1)

statictry{
			//实现代码
}

(2)用输入流(读文件)读取配置文件:

InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties配置");

(3)创建properties类

Properties properties=new Properties();

(4)把输入流in(配置文件)传入到properties类中

properties.load(in);

(5)定义配置文件里面的内容

private  static String driver=null;
private  static String url=null;
private  static String username=null;
private  static String passwowrd=null;

(6)在try catch语句中给配置文件赋值

driver=properties.getProperty("driver");
url=properties.getProperty("url");
username=properties.getProperty("username");
passwowrd=properties.getProperty("passwowrd");

(7)加载驱动

Class.forName(driver);

(8)连接数据库

public static Connection getConnection() throws SQLException {
    return DriverManager.getConnection(url,username,passwowrd);
}

(9)释放连接

public static  void  release(Connection connection, Statement statement, ResultSet resultSet){
        if(resultSet!=null){
            try {
                resultSet.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if(statement!=null){
            try {
                statement.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if(connection!=null){
            try {
                connection.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }
}

3.创建testInset类(main函数,添加)
(1)赋空值

Connection connection=null;
Statement statement=null;
ResultSet resultSet=null;

(2)连接并使用sql语句(自动生成try catch)

connection=JdbcUtils.getConnection();
statement=connection.createStatement();
String sql="INSERT INTO tables1 VALUES(10,'涨涨','跳跳','2000-05-05')";
int i=statement.executeUpdate(sql);
if(i>0){
    System.out.println("插入成功");
}

(3)添加finally,关闭链接(因为暂时没用到resultset(集合),所以为null)

finally {
    JdbcUtils.release(connection,statement,null);
}

4 .创建testdelete类(main函数,删除)
与testinsert基本一样,改变sql语句即可

5 . 创建testupdate类(main函数,修改)
与testinsert基本一样,改变sql语句即可
6 . 创建testselect类(main函数,查询)
需要resultset

16.4 sql注入问题(漏洞,会被攻击导致数据泄露—SQL会被or拼接)

通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
在这里插入图片描述

username,like 判断 等于空或等于1=1(真) 则输出
在这里插入图片描述

正常是只输出张三和篮球 这却全部输出
在这里插入图片描述

由于Statement不安全,则由PreparedStatment对象,可以防止SQL注入,效率也更高(防止注入sql的本质,把传递进来的参数当成字符,假设其中存在转义字符,就直接忽略,“ ’” 会被直接转义)

16.5 PreparedStatement(防止SQL注入)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Mbatis涉及

16.6 IDEA连接数据库

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

16.7 JDBC操作事务

在这里插入图片描述

16.8 连接池操作(DataSource接口)

数据库连接 — 执行功能 —释放
每次都连接到释放 十分浪费系统资源
池化技术:装备一些预先的资源,过来就连接预先准备好的。
例子:一个人管理银行: 开门----接待—关门 耗时耗神
连接池:有接待员: 开门----接待员:等待—关门
常用连接数(接待员)10个,则最小连接数为10个
可设置最大连接数 100个
等待超时:100ms,自动断

开源数据源实现
DBCP,C3P0,Druid(阿里巴巴)
使用了这些数据库连接池后,我们在项目开发中就不需要编写连接数据库的代码
DBCP

  • 下载两个jar包:pool,dbcp
    http://commons.apache.org/proper/commons-dbcp/download_dbcp.cgi
    http://commons.apache.org/proper/commons-pool/download_pool.cgi
  • 导入到IDEA项目中
  • 配置文件
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值