mysql入门

来源:互联网 发布:怎么在电脑上登录淘宝 编辑:程序博客网 时间:2024/05/16 01:44
 一、命令行安装mysql
1、注册服务(注意以管理员身份操作:在我的电脑中打开“C:\Windows\System32”,找到文件“cmd.exe”,右键点击,选择“以管理员身份运行(A),进到目录“D:\mysql-5.5.24-winx64”,然后运行以下代码)
 bin\mysqld --install mysql-5.6.22-winx64 --defaults-file=d:\mysql-5.6.22-winx64\my.ini

2、 启动服务(以管理员身份运行)
    net start mysql-5.6.22-winx64
     --也可右键点击“我的电脑”|“管理”|“服务和应用程序”|“服务”|找到“mysql-5.5.24-winx64”,右键点开,选择启动

3、命令行登录(把bin目录设到path环境变量中,则可省略“bin\”,后面同理)
   bin\mysql -u root -p
   --密码为空回车

   为root设密码(原密码为空时):mysqladmin -u root password 1234
   修改root密码:mysqladmin -u用户名 -p旧密码 password 新密码  (注意,-p与旧密码之间没有空格,否则会报错)

4、停止服务(以管理员身份运行)
   net stop mysql-5.6.22-winx64


5 删除服务(以管理员身份运行)
    bin\mysqld --remove mysql-5.6.22-winx64


二、命令演示
DCL– 数据控制语言    ----DBA
create user hncu identified by '1234';  //创建一个用户
grant all on *.* to 'hncu'@'%' with grant option; //把所有资源授权给用户hncu,并允许他在任何机器上登录使用
grant all on *.* to 'hncu'@'192.168.31.168' with grant option; //限制该用户只能在这台机器上登录

DML-数据操纵语言Data Manipulation Language。
主要指数据的增删查改
Select\delete\update\insert\call

show databases;  //显示所有数据名
use mydb;  //打开“mydb”这个数据库
show tables; //显示当前数据库的所有表名
select * from student;   //显示student表中的所有记录
select * from student where saddress='湖南长沙'; //显示(查询)saddress='湖南长沙'的所有记录
select sno,sname,saddress from student;   //显示student表中的指定字段
insert into student values(8000,'Jack','1995-1-1','中国北京'); //向student表插入一条记录
delete from student where sname='heihei'; //删除指定行
update student set sname='Rose' where sno='1009';
insert into student (sno,sname) values ('8001','aaaa');//只插入指定的列

DDL – 数据定义语言Data Definition Language
建库、建表、设置约束等:
create\drop\alter
数据类型的知识点: char和varchar都可以用来定义字符类型的字段,区别:
char(15) ---固定长度15,如果赋值时只赋一个字符'a',那么里面数据是:1个字符'a' 加 14个空格。-----类似Java当中的字符数组。
varchar(15)----可变长的char数组,如果赋值时只赋一个字符'a',那么里面数据就只有一个字符'a'。---类似Java当中的String

create table sstud(
  sno varchar(15) not null primary key,
  sname varchar(15) not null,
  age int,
  saddress varchar(30)
);

desc sstud; //显示表结构
insert into sstud values('1001','Jack',25,'长沙');
insert into sstud values('1002','Jack2',26,'长沙');
insert into sstud values('1003','Jack3',27,'长沙');
insert into sstud values('1004','Jack4',28,'长沙');

alter table sstud add column aa int;//修改表结构--添加一列
alter table sstud drop column aa;//修改表结构--删除一列

drop table sstud;
drop database aa;

导入脚本:
source D:/JavaTraining2015_2/sstud.sql

导出:

mysqldump -uroot -p1234 --databases aa > d:/a/dd.sql (此句在dos环境下运行的时候,无需登录数据库,配好环境之后,直接运行本条语句即可)

三、对数据库的增删改查

DROP DATABASE bar;  //删除数据库bar
SELECT sno AS 编号,sname AS 姓名,age AS 年龄,saddress AS 地址 FROM sstud; //查头询sstud中的信息,并将sno改成“编号”这样的表头显示出来
SELECT sname AS 姓名,age AS 年龄,saddress AS 地址 FROM sstud;
CREATE DATABASE bb CHARACTER SET utf8; //创建一个名为bb的数据库,设置编码为utf-8
DROP DATABASE bb; //删除数据库bb

//SELECT 复杂查询
//WHERE子句 --BETWEEN子句 和 IN子句
SELECT * FROM sstud WHERE age>=18; //查询sstud表中所有age大于等于18的学生信息
SELECT * FROM sstud WHERE age>=18 AND age<=22; //查询sstud表中所有age大于等于18并且小于等于22的学生信息
SELECT * FROM sstud WHERE age BETWEEN 19 AND 22;//查询sstud表中所有age在[19,22]的学生信息
SELECT * FROM sstud WHERE age=18 OR age=19; //查询sstud表中所有age=18或者age=19的学生信息
SELECT * FROM sstud WHERE age IN (23,18,17);//查询sstud表中所有age=23或者age=18或者age=17的学生信息
SELECT * FROM sstud WHERE age NOT IN (23,18,17); //查询sstud表中所有(age=23或者age=18或者age=17)这个范围之外的学生信息


//模糊查询LIKE  '%'匹配所有  '_'匹配单字符  ,必须和LIKE共同使用
INSERT INTO sstud VALUES ('1006','易知难',22,'丽江');// 向sstud里面添加信息为sno='1006',sname='易知难',age=22,saddress='丽江'的学生
INSERT INTO sstud VALUES ('1007','易瞬',20,'武汉');
DELETE FROM sstud WHERE sno='1008' OR sno='1009';//删除sno为1008或者为1009的学生信息
SELECT * FROM sstud WHERE sname LIKE '易%';//查询所有姓’易‘的学生信息
SELECT * FROM sstud WHERE sname LIKE '易_';//查询所有姓’易‘名字为两个字的的学生信息
SELECT * FROM sstud WHERE sname LIKE '易__';//查询所有姓’易‘名字为三个字的的学生信息
SELECT * FROM sstud WHERE sname LIKE '%a%';//查询所有名字中含有a的学生信息
SELECT * FROM sstud WHERE sname LIKE '%a%' AND age>=19;//查询所有名字中含有a且age大于19的学生信息

ALTER TABLE sstud ADD sex CHAR(1);//向sstud表中添加'sex'列设置数据类型为CHAR,长度设为1

ALTER TABLE sstud DROP sex;//删除sstud表中的'sex'列

ALTER TABLE sstud ADD COLUMN sex CHAR(1);//向sstud表中添加'sex'列设置数据类型为CHAR,长度设为1
ALTER TABLE sstud DROP COLUMN sex;//删除sstud表中的'sex'列

//判断值时,不应该用'='来判断,应该用'IS'
UPDATE sstud SET age=20 WHERE age=NULL;
UPDATE sstud SET age=20 WHERE age IS NULL;

//不能使用: UPDATE TABLE sstud SET ...
UPDATE sstud SET saddress='湖北武汉' WHERE saddress='武汉';

//同时修改多个字段的值
UPDATE sstud SET sname='Mary',age=25 WHERE sno='1001';

//DELETE FROM
DELETE FROM sstud WHERE sname='易%';//无法实现删除,因为'_'只有在LIKE下才是通配符

知识点:
SELECT 字段 FROM 表名 WHERE 条件 AND  条件 OR 条件 
UPDATE tableName SET .. WHERE 条件
DELETE FROM tableName WHERE 条件

//创建视图 CREATE VIEW 视图名 AS SELECT语句
CREATE VIEW look AS SELECT * FROM sstud WHERE age>=22;
SELECT sname,age FROM look WHERE saddress='丽江';

//聚合函数
SELECT COUNT(*) FROM sstud;//一般要专门给一个别名
SELECT COUNT(*) AS sumnum FROM sstud;//统计总行数
SELECT COUNT(1) AS sumnum FROM sstud;
SELECT COUNT(saddress) AS sumnum FROM sstud;//统计saddress这一列中,内容为非NULL的个数

SELECT AVG(age) AS averageAge FROM sstud;
SELECT ROUND(AVG(age)) AS averageAge FROM sstud;// ROUND(AVG(age))对取得的年龄平均值进行四舍五入
SELECT SUM(age) AS sumAge FROM sstud;
SELECT MAX(age) AS sumAge FROM sstud;

//查询年龄最小的那个人姓名和年龄
SELECT sname,age FROM sstud WHERE age=(SELECT MIN(age) FROM sstud);
SELECT sname,age FROM sstud WHERE age IN(SELECT MIN(age) FROM sstud);

//DISTINCT --数据相同时只显示第一条(去除重复数据)
SELECT DISTINCT * FROM sstud WHERE age=(SELECT MIN(age) FROM sstud);
SELECT DISTINCT saddress FROM sstud;

//ORDER BY
SELECT * FROM sstud ORDER BY age DESC;//年龄按降序排序
SELECT * FROM sstud ORDER BY age ASC;//升序

//EXISTS 语句
SELECT * FROM sstud WHERE EXISTS (SELECT * FROM sstud WHERE age>=20);//此语句有bug,只要括号里的语句为TRUE,表格里的信息就会全部显示,否则,都不会显示

//分组 GROUP BY
SELECT saddress,AVG(age) AS 平均年龄 FROM sstud GROUP BY saddress;//将平均年龄按照地区来分组
SELECT saddress,SUM(age) AS 平均年龄 FROM sstud GROUP BY saddress;//将年龄总和按照地区来分组

//固定搭配 SELECT ... FROM ...WHERE ...ORDER BY ...----ORDER BY子句要放在最后
//SELECT ... FROM ...GROUP BY ...HAVING   ...---GROUP BY子句中的条件用的是HAVING (不能用WHERE)
SELECT saddress,age FROM sstud WHERE age>=20 ORDER BY saddress;//找出年龄大于20的学生bong按照地区分组
SELECT saddress,AVG(age) FROM sstud GROUP BY saddress HAVING AVG(age)>20;//找出平均年龄大于20的学生并按照地区分组
SELECT saddress,SUM(age) AS sumnum FROM sstud GROUP BY saddress HAVING SUM(age)>20;//注意别名'sumnum'的用法

//字符串处理函数
SELECT * FROM sstud WHERE TRIM(sname)='vae';//去掉字符串所有空格 LTRIM(str);去掉左边的空格 RTRIM(str) ; 去掉右边的空格
SELECT * FROM sstud WHERE LEFT(saddress,2)='湖南';//LEFT(str,n): 从左边取出n个字符 ; RIGHT(str,n): - 从右边取出n个字符
SELECT REVERSE(sname) AS 反序 FROM sstud;

/*  Lower(str)   Upper(str) */
SELECT UPPER(sname) AS 大写名字 FROM sstud;

/*concat(str1,str2,...)  INSTR(str,s)  */
SELECT CONCAT(sno,sname,age) AS con FROM sstud; //CONCAT(Str,str…..)串联字符串。
SELECT sname,INSTR(sname,'a') AS ins FROM sstud; //INSTR(str,s) – 返回s在str中出面的位置,没有则返回0

在java中实现对数据库 的操作

public class dbAccess {  @Test  public void hello() throws Exception{  //1.加载连接器  Class.forName("com.mysql.jdbc.Driver");    //2.建立连接  //String url="jdbc:mysql://127.0.0.1:3306/aa";默认编码            String url ="jdbc:mysql://127.0.0.1:3306/aa?useUnicode=true&characterEncoding=UTF-8";//采用指定编码连接           Connection con=DriverManager.getConnection(url, "root", "");//三个参数:连接串,用户名,密码  //3.获取语句对象  Statement st=con.createStatement();  //4.对数据库进行增删改查的操作---通过st对象  //System.out.println(st);  //增:String str="insert into sstud values('1011','Prada',23,'France')";  //删:String str="delete from sstud where sno='1002'";  //改:  //String str="update sstud set saddress='湖南常德' where sno='1001'";  //st.execute(str);//增、删、改都使用st.execute(str)方法    //查  String str2="select * from sstud";  ResultSet rs=st.executeQuery(str2);  while(rs.next()){  String sno=rs.getString(1);//按指定列号的方式读取:默认第一列是1  String sname=rs.getString("sname");//按指定列名 的方式读取  String age=rs.getString("age");  String saddress=rs.getString(4);  System.out.println(sno+","+sname+","+age+","+saddress);  }  }}

三、表和表之间的关系

//查看当前数据库的编码
SHOW VARIABLES WHERE variable_name LIKE 'character%';

解决中文乱码,如下三个编码保持一致就可以。
character_set_client、character_set_connection、character_set_results


设置某个编码:
SET character_set_results = gbk;



case-when then end

SELECT sno,sname,age,saddress,(CASE sex WHEN '0' THEN '女' WHEN '1' THEN '男' ELSE '不详' END)AS 性别 FROM sstud;

无关子查询
//查询具有相同年龄的人
SELECT * FROM sstud GROUP BY age HAVING COUNT(age)>=2;

相关子查询
//查询不但具有相同年龄,而且性别是男的那些人
SELECT * FROM sstud GROUP BY age HAVING COUNT(age)>=2 AND sex='1';

表与表之间的关系
1、一对一
需要两个表。当然做项目时为了省空间,通常只建一个表,如果要实现一对一的查询,可以建两个视图。示例如下:
1)建物理表,初始化数据
CREATE TABLE person(
   id INT,
   NAME VARCHAR(10),
   sex CHAR(1),
   wife INT,
   husband INT
);
INSERT INTO person VALUES(1,'小花','0',0,3);
INSERT INTO person VALUES(2,'玉芬','0',0,4);
INSERT INTO person VALUES(3,'张三','1',1,0);
INSERT INTO person VALUES(4,'李四','1',2,0);
INSERT INTO person VALUES(5,'王五','1',0,0);
2) 建立两个视图
create view women as select * from person where sex='0';
create view men as select * from person where sex='1';


3) 查询夫妻信息
//旧版本
SELECT women.name AS 妻子, men.name AS 丈夫 FROM women, men WHERE women.husband = men.id;
//采用内联接--96以后的新方式--效率更高
SELECT women.name AS 妻子, men.name AS 丈夫 FROM women INNER JOIN men ON women.husband = men.id;


2、一对多
数据库设计分析
※案例:一个人可以拥有多辆汽车,要求查询出某人所拥有的所有汽车。
方案一(差的设计):
编号   姓名  性别   年龄   汽车编号   车型  排量  价格
P001  Jack   男     25     C001     BMW    12L   80w
P001  Jack   男     25     C002     Benz   12L   100w
P001  Jack   男     25     C003     Benz   12L   100w
P002  Tom    男     25     C004     BMW    12L   80w
P002  Tom    男     25     C005     Benz   12L   100w
P003  Rose   女     25     C006     Benz   12L   100w

方案二(好的设计):
1)把一方单独建个表
编号   姓名  性别   年龄
P001  Jack   男     25
P002  Tom    男     25
P003  Rose   女     25
2)把多方也建个表(依赖一方,通过外键--补一个字段)
外键:位于依赖一方,它是被依赖一方是主键
汽车编号   车型  排量  价格    车主
 C001     BMW    12L   80w    P001
 C002     Benz   12L   100w   P001
 C003     Benz   12L   120w   P001
 C004     BMW    12L   80w    P002
 C005     Benz   12L   100w   P002
 C006     Benz   12L   100w   P003

3) 代码实现
CREATE TABLE person2(
   id varchar(32) primary key,
   NAME VARCHAR(30),
   sex CHAR(1),
   age INT
);
INSERT INTO person2 VALUES('P1001','小花','0',25);
INSERT INTO person2 VALUES('P1002','张三','1',22);
INSERT INTO person2 VALUES('P1003','Jack','1',24);
INSERT INTO person2 VALUES('P1004','Rose','0',25);

CREATE TABLE car(
   id varchar(32) primary key,
   NAME VARCHAR(30),
   price numeric(10,2),
   pid varchar(32),  
   /*为字段pid定义一个外键约束(来自person2表的字段id)*/
   constraint car_fk foreign key(pid) references person2(id)

);
INSERT INTO car VALUES('C001','BMW',80.5,'P1001');
INSERT INTO car VALUES('C002','Benz',100,'P1001');
INSERT INTO car VALUES('C003','BMW',120.05,'P1001');
INSERT INTO car VALUES('C004','Benz',88.5,'P1002');
INSERT INTO car VALUES('C005','QQ',8.5,'P1002');
INSERT INTO car VALUES('C006','BIKE',0.5,'P1003');

3.多对多
数据库设计分析
※案例:一个人可以选择多门课程,一门课程又可以被很多人选择。
方案一(差的设计):
1)学生表
编号   姓名  性别   年龄  电话 ...
P001  Jack   男     25
P002  Tom    男     25
P003  Rose   女     25
--------------------------
2)课程表
编号   名称   教材  学分...  学生
S001   Java   ...  ......   P001
S001   Java   ...  ......   P002
S001   Java   ...  ......   ...
S002   数据库  ... ......   P001
S002   数据库  ... ......   P002
......

方案二(好的设计:两个实体表+一个关系表):
1)学生表(独立)---实体
编号   姓名  性别   年龄  电话 ...
P001  Jack   男     25
P002  Tom    男     25
P003  Rose   女     25
2)课程表(独立)---实体
编号   名称   教材  学分...
S001   Java   ...  ......
S002   数据库  ... ......
S003   XML   ... ......
3)选课表(专为体现多对多的关系而新增的表)--关系
课程编号  学生编号
S001      P001
S001      P002
...
S002      P002
S002      P003
...
S003      P001
...
 外键      外键
   |        |
   |━━━━|  
       |
     联合主键

三个表之间的关系(多对多):


代码实现:
CREATE TABLE stud(id VARCHAR(32) PRIMARY KEY,sname VARCHAR(30),age INT);
CREATE TABLE ject(id VARCHAR(32) PRIMARY KEY,jname VARCHAR(30));
CREATE TABLE sj(studid VARCHAR(32),subjectid VARCHAR(32));

//单独添加约束(注意顺序: 要先添加联合主键,再添加外键)
//创建联合主键
ALTER TABLE sj ADD CONSTRAINT pk_sj PRIMARY KEY(studid,subjectid);

//创建两个外键

ALTER TABLE sj ADD CONSTRAINT fk_stud FOREIGN KEY (studid) REFERENCES stud(id);
ALTER TABLE sj ADD CONSTRAINT fk_ject FOREIGN KEY (subjectid) REFERENCES ject(id);

/*ALTER TABLE sj DROP FOREIGN KEY fk_stud;*/此句可以用于删除sj的一个外键

INSERT INTO stud VALUES('P1001','Sara',18);
INSERT INTO stud VALUES('P1002','Jack',20);
INSERT INTO stud VALUES('P1003','Nancy',19);
INSERT INTO stud VALUES('P1004','Sam',22);

INSERT INTO ject VALUES('s1001','Poem');
INSERT INTO ject VALUES('s1002','Art');
INSERT INTO ject VALUES('s1003','Music');
INSERT INTO ject VALUES('s1004','PE');
INSERT INTO ject VALUES('s1005','Film');

INSERT INTO sj VALUES('p1001','s1001');
INSERT INTO sj VALUES('p1002','s1001');
INSERT INTO sj VALUES('p1003','s1001');
INSERT INTO sj VALUES('p1001','s1002');
INSERT INTO sj VALUES('p1003','s1002');
INSERT INTO sj VALUES('p1003','s1003');
INSERT INTO sj VALUES('p1002','s1004');

//SQL加强
关联(连接):左关联(left join) 右关联(right join) 内关联(inner join)
     mysql不支持: 全关联(full join)  外关联(outter join)
//关联,可理解成把几个合成一个新的表,然后在新表中进行查询

//查询哪些人选了课
//92标准
SELECT stud.sname,ject.jname FROM stud,ject,sj WHERE stud.id=sj.studid AND ject.id=sj.subjectid;
//96标准--左关联
SELECT stud.sname,ject,jname FROM stud LEFT JOIN sj ON stud.id=sj.studid LEFT JOIN ject ON ject.id=sj.subjectid;

//查询哪些人没有选课
//92标准
SELECT stud.sname FROM stud WHERE stud.id NOT IN(SELECT studid FROM sj);
//96标准---左关联
SELECT stud.sname FROM stud LEFT JOIN sj ON stud.id=sj.studid LEFT JOIN ject ON ject.id=sj.subjectid WHERE ject.jname IS NULL;

//查询哪些课没人选
//96标准---左关联
下面这句查询结果为空:因为查询的是ject表对应的stud为空的情况,采用的是左关联,此时应该ject表为左表
SELECT  ject.jname,stud.sname FROM stud LEFT JOIN sj ON stud.id=sj.studid LEFT JOIN  ject ON ject.id=sj.subjectid WHERE stud.sname IS NULL;

这句才是正确的左关联写法:
SELECT  ject.jname,stud.sname FROM ject LEFT JOIN sj ON ject.id=sj.subjectid LEFT JOIN  stud ON stud.id=sj.studid WHERE stud.sname IS NULL;
//96标准---右关联
SELECT  ject.jname,stud.sname FROM stud RIGHT JOIN sj  ON stud.id=sj.studid RIGHT JOIN ject ON  ject.id = sj.subjectid WHERE stud.sname IS NULL;

演示自动增长列与字段值唯一性约束
CREATE TABLE aa(id INT AUTO_INCREMENT PRIMARY KEY,nm VARCHAR(32) UNIQUE);
INSERT INTO aa(nm) VALUES('Sofi');

//存储过程
CREATE PROCEDURE 过程名(参数)
BEGIN
  多条SQL语句
END

调用:
 CALL 过程名(实参)

 
 //无参的存储过程
 
 △小细节:要把默认的语句结束“;”号改成其它如“$$”,这样存储过程中定义的分号就不被看成是语句结束(否则会直接被提交)。最后再把“;”号还原成默认的结束符。
DELIMITER $$
CREATE PROCEDURE p2()
BEGIN
  INSERT INTO stud VALUES('p1005','Petter',20);
  SELECT * FROM stud;
END$$
DELIMITER ;

CALL p2();

//有参的存储过程
DELIMITER $$
CREATE PROCEDURE p3(IN id VARCHAR(32),IN sname VARCHAR(30),IN age INT)
BEGIN
  INSERT INTO stud VALUES(id,sname,age);
  SELECT * FROM stud;
END$$
DELIMITER ;
CALL p3('p1006','Susan',25);

//删除动作,有参数添加无参数添加的信息均可删除
DELIMITER $$
CREATE PROCEDURE p4()
BEGIN
  DELETE FROM stud WHERE id='p1006';
  SELECT * FROM stud;
END$$
DELIMITER ;
CALL p4();

DELIMITER $$
CREATE PROCEDURE p5()
BEGIN
  DELETE FROM stud WHERE id='p1005';
  SELECT * FROM stud;
END$$
DELIMITER ;
CALL p5();

//带返回值的存储过程
DELIMITER $$
CREATE PROCEDURE p8(IN id VARCHAR(32),IN sname VARCHAR(30),IN age INT,OUT num INT)
BEGIN
  INSERT INTO stud VALUES(id,sname,age);
  SELECT * FROM stud;
  SELECT COUNT(*) INTO num FROM stud;
END$$
DELIMITER ;
CALL p8('p1009','Mara',17,@aa);
SELECT @aa;

要让mysql查询区分大小写,可以:
SELECT? * FROM? table_name WHERE? BINARY? a LIKE? 'a%'??
SELECT? * FROM? table_name WHERE? BINARY? a LIKE? 'A%'???
SELECT * FROM table_name WHERE BINARY a LIKE 'a%'
SELECT * FROM table_name WHERE BINARY a LIKE 'A%'
也可以在建表时,加以标识?
CREATE TABLE table_name(
  a VARCHAR(20) BINARY
)


DELETE FROM stud WHERE id='p1009';
START TRANSACTION
DELETE FROM stud WHERE id='p1008';
ROLLBACK ;/COMMIT ; 事务回滚(取消对表的更改)/提交对表的更改,不可逆

说明:从"START TRANSACTION"开始 到 “ROLLBACK; 或 COMMIT; ”,这中间的那么语句是一个整体,如果执行 “ROLLBACK”,那么这些动作都会回滚(撤消)。如果执行“COMMIT”,就全部执行成功。
////Java实现事务处理的简单模板////
// /////////以下演示Java中如何实现事务////////////
// /////////以下演示Java中如何实现事务////////////
 //4.对数据库进行增删改查的操作---通过st对象
      try {
          con.setAutoCommit(FALSE); //对应mysql中的“START TRANSACTION;”的功能
          // 增:
          STRING str="insert into sstud values('1012','Jim',22,'Japan','1')";
          st.execute(str);
          //删:
          STRING str1="delete from sstud where sno='1011'";
          st.execute(str1);
          //改:
          //STRING str2="update sstud set ssaddress='湖南长沙' where sno='1001'";//此处ssaddress出现参数错误,提交失败,事务回滚
          STRING str2="update sstud set saddress='湖南长沙' where sno='1001'";// 注意,这种方式不能写多条SQL语句(中间用分号隔也不行)
          st.execute(str2);//增、删、改都使用st.execute(str)方法
          
          con.commit();
          System.out.println("事务提交了");

    } catch (Exception e) {
        con.rollback();
        System.out.println("事务回滚了...");

    }


0 0
原创粉丝点击