sql增删改

创建表的语法:
CREATE TABLE 用户名.表名称(
字段名称 字段类型[DEFAULT 默认值] ,
字段名称 字段类型[DEFAULT 默认值] ,…) ;
对于表名称及列名称的定义要求如下:
必须以字母开头;长度为1~30个字符;
表名称由字母(A-Z、a-z)、数字(0-9)、_、$、#组成,而且名称要有意义;
对同一个用户不能使用相同的表名称;
不能是Oracle中的保留字,像CREATE、SELECT等都是作为保留字;
表名列名尽量不要用中文

也可以使用复制创建表语法:
CREATE TABLE 表名称 AS 子查询
如果只想创建表形式,不需要数据,可以在where后面加入恒假条件,如1=2rename 旧表名 to 新表名
create属于ddl语言,执行后事务立即提交,无法回滚及回滚之前的操作。

向表中插入数据:
insert into 表名 values(每个列的数值)
insert into 表名(列名1,列名2,…) values(对应列的数值)
最后需要使用commit提交完成事务或使用rollback指令回滚

更新表中数据
UPDATE 表名称 SET 字段=值 [,字段=值…][WHERE 更新条件(s);
例:UPDATE myemp SET sal=sal*1.2WHERE sal<(SELECT AVG(sal) FROM myemp) ;

删除表中的行:
语法:DELETE FROM 表名称 [WHERE 删除条件];要使用commit提交,不写where表示全部删除
例:DELETE FROM myemp WHERE empno=7566

截断表:
删除表的数据,使用delete from 表名删除后,表中的高水位线没有全部删除。
可以使用截断操作将表的内容删除,此为ddl语言,只能删除表的全部内容。ddl语言执行后所有事务自动提交,无法进行回滚操作。
语法:TRUNCATE TABLE 表名称

删除表:
drop table 表名 [purge]
加入purge参数表示不放入回收站,立即删除。

闪回:
删除后默认回到回收站内,可以通过闪回进行表的恢复。
SELECT object_name,original_name,operation,type,droptime FROM recyclebin ; 查看回收站内的文件
FLASHBACK TABLE 表名 TO BEFORE DROP 恢复回收站的名字
DROP TABLE myemp PURGE ; 直接删除表
PURGE TABLE employee ; 从回收站中删除PURGE recyclebin ; 清空回收站

修改表结构
ALTER TABLE 表名称 ADD (字段名称 字段类型 DEFAULT 默认值,字段名称 字段类型 DEFAULT 默认值…) ;
例:ALTER TABLE member ADD (age NUMBER(3)) ;

如果现在发现表中的某一列设计不合理的时候,也可以对已有的列进行修改,通过如下的语法完成
例:ALTER TABLE 表名称 MODIFIY(字段名称 字段类型 DEFAULT 默认值) ;
修改列名:ALTER TABLE 表名 RENAME COLUMN 列名 TO 新列名

如果现在要想删除表中的一个列,可以通过如下的语法完成。
ALTER TABLE 表名称 DROP COLUMN 列名称 ;
例:ALTER TABLE member DROP COLUMN age ;
将表的某一列设置成无用列(等待以后删除):
ALTER TABLE 表名称 SET UNUSED(列名称) ;
ALTER TABLE member DROP UNUSED COLUMNS ; 删掉表中的无用列
查看表中的列名select column_name from user_tab_columns where table_name=’ 表名’

添加注释
范例:为member表添加注释
COMMENT ON TABLE member IS ‘用于记录参加活动的成员信息’ ;
范例:为member表的mid添加注释信息
COMMENT ON COLUMN member.mid IS ‘参加活动的成员编号’ ;
查看表的注释:
select * from user_tab_comments;
查看每个列的注释:
select * from user_col_comments;

<think>好的,我现在需要回答用户关于SQL增删改操作的返回值含义及如何获取的问题。用户提到了MyBatis的相关引用,所以我需要结合这些引用来组织答案。首先,我得回忆一下SQL中这些操作的基本返回值含义。 INSERT、UPDATE、DELETE在数据库中的执行通常返回的是受影响的行数。比如,插入一条记录返回1,更新三条记录返回3,删除零条则返回0。这是大多数数据库的行为,但不同的数据库可能会有差异,比如Oracle在特定情况下可能返回其他值,但用户的问题可能更多关注常规情况。 接下来要考虑的是如何在不同的编程环境或框架中获取这些返回值。用户提到的MyBatis,根据引用[2],insert、update、delete操作的返回值可以配置,但默认可能返回的是受影响的行数。例如,在MyBatis中,如果使用Mapper接口,方法可以定义为int类型,执行后会得到这个行数。需要确认引用中的内容,比如引用[2]提到“insert, update, delete只支持这些Attributes...”,可能涉及到返回值的配置,如useGeneratedKeys用于获取自增主键,但返回值本身是受影响的行数。 然后,用户可能还关心如何处理批量操作的情况。比如引用[1]和[3]中的批量插入,这时候返回值可能是总的受影响行数。但需要注意,某些数据库如Oracle在批量插入时可能需要特殊处理,比如设置useGeneratedKeys为false,如引用[3]所述,这时候返回值可能还是正确的行数总和吗? 此外,需要明确不同数据库的差异。例如,在MySQL中,执行批量INSERT可能返回插入的总行数,而Oracle使用特定语法时,可能也是如此。但需要参考引用[3]中的例子,其中提到两种Oracle的批量插入方式,并指出必须设置useGeneratedKeys=false。这时候,返回值是否仍然是受影响的行数?可能需要确认,但根据常规理解,MyBatis的返回值应该反映实际影响的行数。 然后,关于如何获取返回值,用户可能需要具体的代码示例。比如在MyBatis的Mapper接口中,定义一个方法int updateUser(User user);,调用后返回的int就是受影响的行数。对于XML配置,如引用[1]中的批量插入,虽然使用了foreach,但最终返回值应该是所有插入操作的总行数。 还要注意,有些情况下,比如执行UPDATE时,如果更新的行内容没有实际变化(例如将age从30设置为30),数据库可能返回0行受影响,这时候返回值是0,但实际没有数据变更。这也是需要提及的细节。 最后,需要总结返回值的主要含义,获取方法,以及在不同框架中的处理方式,特别是MyBatis中的配置和注意事项,比如Oracle批量插入时的useGeneratedKeys设置,避免错误。同时,可能还需要提到异常处理,比如当返回值与预期不符时的错误排查。 现在,需要将这些点组织成结构清晰的回答,分点说明,并引用提供的参考资料作为支持。确保使用正确的中文达,符合用户的要求,并且正确应用LaTeX格式,比如提到数字时用$1$,但根据用户示例,可能更多是自然语言中的数字,所以需要检查是否需要数学格式。根据用户之前的示例,可能不需要在行内使用数学达式,除非有公式,所以可能不需要特别处理。 可能的问题点:用户提供的引用中有关于MyBatis批量插入的配置,比如useGeneratedKeys的设置,这可能影响是否能够正确获取主键,但返回值(受影响行数)是否受影响?根据引用[3],在Oracle批量插入时,必须设置useGeneratedKeys=false才能成功,但返回值可能仍然是插入的行数。需要确认这点,并在回答中说明。 总结回答的结构: 1. 返回值的基本含义:受影响行数 2. 不同操作的具体情况(INSERT返回插入行数,UPDATE返回匹配并修改的行数,DELETE删除的行数) 3. 获取方法: a. JDBC中Statement.executeUpdate()返回int b. MyBatis中Mapper方法返回int c. XML配置中的注意事项(如Oracle批量插入需设置useGeneratedKeys=false) 4. 特殊情况处理(如无变化的更新,批量操作的总行数) 5. 不同数据库的差异(如Oracle批量语法) 然后生成相关问题,如关于MyBatis如何配置批量操作、返回值异常处理、不同数据库差异等。</think>### SQL增删改操作的返回值解析 #### 一、返回值含义 1. **基本定义** SQL的`INSERT`、`UPDATE`、`DELETE`操作默认返回**受影响的行数**,类型为整数: - `INSERT`:成功插入的行数,例如插入单条数据返回$1$。 - `UPDATE`:实际被修改的行数,即使新值与原值相同也会被计数[^4]。 - `DELETE`:实际被删除的行数。 2. **特殊情况** - **批量操作**:返回值是所有操作影响的行数总和。例如批量插入$5$条数据,返回$5$。 - **无实际修改**:如将`age=30`更新为`age=30`,返回$0$。 #### 二、获取返回值的方法 1. **JDBC原生方式** 通过`Statement.executeUpdate()`或`PreparedStatement.executeUpdate()`直接获取返回值: ```java int affectedRows = statement.executeUpdate("DELETE FROM table"); ``` 2. **MyBatis框架** - **Mapper接口定义**:将方法返回值类型设为`int`。 ```java int updateUser(User user); ``` - **XML配置**:无需额外配置,默认返回受影响行数。但需注意: - **批量插入**:需根据数据库类型调整语法。例如Oracle需使用`INSERT ALL`或`UNION ALL`,并设置`useGeneratedKeys="false"`[^3]。 ```xml <insert id="mulAddOracle" parameterType="java.util.ArrayList" useGeneratedKeys="false"> INSERT INTO bill (TX_TYP, REMARK, NO) <foreach collection="list" item="bill" separator=" UNION ALL "> (SELECT #{bill.txTyp}, #{bill.remark}, #{bill.no} FROM dual) </foreach> </insert> ``` #### 三、注意事项 1. **数据库差异** - **MySQL**:直接支持批量操作,返回值即总行数。 - **Oracle**:需使用特定语法(如`INSERT ALL`),且必须关闭`useGeneratedKeys`[^3]。 2. **主键返回** 若需要获取自增主键,需配置`useGeneratedKeys="true"`和`keyProperty`,但此配置不影响返回值(返回值仍为行数)[^2]。 #### 四、示例场景 - **插入操作**: ```sql INSERT INTO student(name) VALUES ('Alice'), ('Bob'); -- 返回2 ``` - **更新操作**: ```sql UPDATE student SET age=20 WHERE id=1; -- 若匹配1行,返回1 ``` - **删除操作**: ```sql DELETE FROM student WHERE score < 60; -- 若删除3行,返回3 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值