最近很多小伙伴都在问oracle,mysql,sqlserver字段设置默认值是否为空测试和sql语句设置字段默认值为0这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展case..
最近很多小伙伴都在问oracle ,mysql,sqlserver 字段设置默认值是否为空测试和sql语句设置字段默认值为0这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展case...when... 和 MySql、Oracle、SqlServer 处理空值、db2,oracle,mysql ,sqlserver 限制返回的行数、java的web应用系统,想支持多种数据库(oracle,sqlserver,mysql)、JDBC访问数据库的具体步骤(MySql + Oracle + SQLServer)等相关知识,下面开始了哦!
本文目录一览:- oracle ,mysql,sqlserver 字段设置默认值是否为空测试(sql语句设置字段默认值为0)
- case...when... 和 MySql、Oracle、SqlServer 处理空值
- db2,oracle,mysql ,sqlserver 限制返回的行数
- java的web应用系统,想支持多种数据库(oracle,sqlserver,mysql)
- JDBC访问数据库的具体步骤(MySql + Oracle + SQLServer)
oracle ,mysql,sqlserver 字段设置默认值是否为空测试(sql语句设置字段默认值为0)
------------------------------------------------------------------------------------------ --MSsql ------------------------------------------------------------------------------------------ -- drop table testtab create table testtab(id int,name varchar(10)); go insert into testtab(id,name)values(1,'aa'),(2,'bb'); go select * from testtab; go --方法一 alter table testtab add addtime datetime default(getdate()) --字段历史数据为null go --方法二 alter table testtab add addtime2 datetime not null default(getdate()) --字段历史数据自动填充 go --方法三 alter table testtab add addtime3 datetime; alter table testtab add constraint df_testtab_addtime3 default(getdate()) for addtime3; --字段历史数据为null go /* id name addtime addtime2 addtime3 -- ---- ------- ----------------------- -------- 1 aa NULL 2017-02-14 11:32:45.960 NULL 2 bb NULL 2017-02-14 11:32:45.960 NULL */ insert into testtab(id,name)values(3,'cc'),(4,'dd'); go select * from testtab; go /* id name addtime addtime2 addtime3 -- ---- ---------------------- ----------------------- -------------------- 1 aa NULL 2017-02-14 11:32:45.960 NULL 2 bb NULL 2017-02-14 11:32:45.960 NULL 3 cc 2017-02-14 11:33:57.193 2017-02-14 11:33:57.193 2017-02-14 11:33:57.193 4 dd 2017-02-14 11:33:57.193 2017-02-14 11:33:57.193 2017-02-14 11:33:57.193 */
------------------------------------------------------------------------------------------ --MysqL ------------------------------------------------------------------------------------------ -- drop table testtab; create table testtab(id int,name varchar(10)); insert into testtab(id,'bb'); select * from testtab; --方法一 alter table testtab add addtime datetime default current_timestamp; --字段历史数据自动填充 --方法二 alter table testtab add addtime2 datetime; alter table testtab modify column addtime2 datetime default current_timestamp; --字段历史数据为null --另 alter table testtab add addtime3 datetime not null; --字段历史数据为 "0000-00-00 00:00:00" +----+------+---------------------+----------+---------------------+ | id | name | addtime | addtime2 | addtime3 | +----+------+---------------------+----------+---------------------+ | 1 | aa | 2017-02-14 11:37:37 | NULL | 0000-00-00 00:00:00 | | 2 | bb | 2017-02-14 11:37:37 | NULL | 0000-00-00 00:00:00 | +----+------+---------------------+----------+---------------------+ insert into testtab(id,name,addtime3)values(3,'cc',Now()),'dd',Now()); select * from testtab; +----+------+---------------------+---------------------+---------------------+ | id | name | addtime | addtime2 | addtime3 | +----+------+---------------------+---------------------+---------------------+ | 1 | aa | 2017-02-14 11:37:37 | NULL | 0000-00-00 00:00:00 | | 2 | bb | 2017-02-14 11:37:37 | NULL | 0000-00-00 00:00:00 | | 3 | cc | 2017-02-14 11:38:58 | 2017-02-14 11:38:58 | 2017-02-14 11:38:58 | | 4 | dd | 2017-02-14 11:38:58 | 2017-02-14 11:38:58 | 2017-02-14 11:38:58 | +----+------+---------------------+---------------------+---------------------+
------------------------------------------------------------------------------------------ --ORACLE ------------------------------------------------------------------------------------------ -- drop table testtab; create table testtab(id int,'aa'); insert into testtab(id,name)values(2,'bb'); select * from testtab; --方法一 alter table testtab add (addtime date default sysdate null);--字段历史数据自动填充 --方法二 alter table testtab add (addtime2 date null); alter table testtab modify (addtime2 date default sysdate); --字段历史数据为null /* ID NAME ADDTIME ADDTIME2 -- ---- ------------------ -------- 1 1 aa 2017/2/14 11:35:34 2 2 bb 2017/2/14 11:35:34 */ insert into testtab(id,'cc'); select * from testtab; /* ID NAME ADDTIME ADDTIME2 -- ---- ------------------ -------- 1 1 aa 2017/2/14 11:35:34 2 2 bb 2017/2/14 11:35:34 3 3 cc 2017/2/14 11:36:44 2017/2/14 11:36:44 */
case...when... 和 MySql、Oracle、SqlServer 处理空值
1、Case 具有两种格式,简单 Case 函数和 Case 搜索函数。
--简单Case函数
CASE sex
WHEN ''1'' THEN ''男''
WHEN ''2'' THEN ''女''
ELSE ''其他'' END
--Case搜索函数
CASE WHEN sex = ''1'' THEN ''男''
WHEN sex = ''2'' THEN ''女''
ELSE ''其他'' END
2、判断某字段是否为 null,和判断是否为字符或数字时的写法不一样,如果不注意,很容易搞错
--错误方法:
CASE columnName WHEN null THEN 0 ELSE columnName END
--正确方法:
CASE WHEN columnName is null THEN 0 ELSE columnName END
3、MYSQL IFNULL(expr1,expr2)
如果 expr1 不是 NULL,IFNULL () 返回 expr1,否则它返回 expr2。IFNULL () 返回一个数字或字符串值,取决于它被使用的上下文环境。
mysql> select IFNULL(1,0);
-> 1
mysql> select IFNULL(0,10);
-> 0
mysql> select IFNULL(1/0,10);
-> 10
mysql> select IFNULL(1/0,yes);
-> yes
IF(expr1,expr2,expr3)
如果 expr1 是 TRUE (expr1<>0 且 expr1<>NULL),那么 IF () 返回 expr2,否则它返回 expr3。IF () 返回一个数字或字符串值,取决于它被使用的上下文。
mysql> select IF(1>2,2,3);
-> 3
mysql> select IF(1<2,yes,no);
-> yes
expr1 作为整数值被计算,它意味着如果你正在测试浮点或字符串值,你应该使用一个比较操作来做。
mysql> select IF(0.1,1,0);
-> 0
mysql> select IF(0.1<>0,1,0);
-> 1
在上面的第一种情况中,IF (0.1) 返回 0,因为 0.1 被变换到整数值,导致测试 IF (0)。这可能不是你期望的。在第二种情况中,比较测试原来的浮点值看它是否是非零,比较的结果被用作一个整数。
4、用于处理 NULL 值的函数
MySQL - IFNULL () 函数
Oracle - NVL () 函数
SqlServer - ISNULL () 函数
5、Oracle 中函数 NVL,NVL2,NULLIF,COALESCE
NVL 函数的格式如下:NVL (expr1,expr2)
含义是:如果 oracle 第一个参数为空那么显示第二个参数的值,如果第一个参数的值不为空,则显示第一个参数本来的值。
NVL2 函数的格式如下:NVL2 (expr1,expr2, expr3)
含义是:如果该函数的第一个参数为空那么显示第二个参数的值,如果第一个参数的值不为空,则显示第三个参数的值。
NULLIF 函数的格式如下:NULLIF (exp1,expr2)
含义是:如果 exp1 和 exp2 相等则返回空 (NULL),否则返回第一个值。
Coalesce 函数格式如下:Coalesce (expr1, expr2, expr3….. exprn)
含义是:指定多个表达式的占位符,所有表达式必须是相同类型,或者可以隐性转换为相同的类型。
返回表达式中第一个非空表达式,如果所有自变量均为 NULL,则 COALESCE 返回 NULL 值。
6、SqlServer 函数 ISNULL ()
ISNULL ( check_expression , replacement_value )
含义是:如果 check_expression 不为 NULL,则返回它的值;否则,在将 replacement_value 隐式转换为 check_expression 的类型(如果这两个类型不同)后,则返回前者。
db2,oracle,mysql ,sqlserver 限制返回的行数
不同数据库限制返回的行数的关键字如下:
①db2
select * from table fetch first 10 rows only;
②oracle
select * from table where rownum<=10;
③mysql
select * from table limit 10;
④sqlServer
select top 10 * from table;
java的web应用系统,想支持多种数据库(oracle,sqlserver,mysql)
java的web应用系统,以前是只支持sqlserver 现在想支持多种数据库(oracle,sqlserver,mysql),应该怎么改JDBC访问数据库的具体步骤(MySql + Oracle + SQLServer)
* 感谢DT课堂颜群老师的视频讲解(讲的十分仔细,文末有视频链接)
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
/*
1、JDBC访问数据库的具体步骤:
a、导入驱动,加载具体的驱动类
b、与数据库建立连接
c、发送Sql,执行
d、处理结果集
2、API(接口、方法、类) 主要功能:
a、与数据库建立连接
b、发送Sql语句1
c、返回处理结果
3、API的几个操作:
a、DriverManager: 管理JDBC驱动
b、Connection : 连接
c、Statement : 运行 Sql 语句(增删改查)
d、CallableStatement : 调用数据库中的存储过程 / 存储函数
e、Result : 返回结果集
*/
public class JDBPMySqlDemo {
/* 这些值一般都是不轻易改变的,所以设置为常量
不同的数据库对应的连接字符串不同,(形式不同,内容类似-------哪种类型的数据库、IP地址、端口号、数据库名)
Oracle : jdbc:oracle:thin:@localhost:1521:数据库实例名 (你创建的数据库的名字)
MySql : jdbc:mysql://localhost:3306/数据库实例名
SQLServer : jdbc:microsoft:sqlserver:localhost:1433;databasename = 数据库实例名
*/
private static final String URL = "jdbc:mysql://localhost:3306/testdate";
private static final String USER = "root";
private static final String PWD = "root";
public static void update() { // 静态方法要求其内部用到的变量也应该是静态的(所以上述变量也应该设置为静态变量)
// 因为要进行两次异常处理,所以需要将变量设置成相对于 try..catch..语句的外部变量
Statement stam = null; // 会抛出SQLException异常
Connection connection = null; // 会抛出ClassNotFoundException异常
try {
/*
驱动在每个数据库各自对应的 jar包中,所以需要先把各个数据库对应的包进行导入
驱 动jar:(可以在这个链接中进行查找:https://mvnrepository.com/)
Oracle:ojdbc-x.jar
MySql:mysql-connector-java-x.jar
SqlServer:sqljdbc-x.jar
导入驱动(不同的数据库对应的驱动不同)
Oracle : oracle.jdbc.OracleDriver
MySql : com.mysql.jdbc.Driver
SqlServer : com.mircrosoft.sqlserver.jdbc.SQLServerDriver
*/
// 导入驱动(加载具体的驱动类)
Class.forName("com.mysql.jdbc.Driver");
// 连接(通过DriverManager.getConnection(连接字符串,用户名,密码))方法进行连接
connection = DriverManager.getConnection(URL, USER, PWD);
// 运行SQL语句(想要运行SQL语句要先创建一个Statement对象,用这个实例对象进行操作)
stam = connection.createStatement();
// 将sql语句作为字符串进行执行
// String sql = "delete from student where stuno = 2";
String sql = "insert into student values(2,''zs'',12,''s3'')";
// 通过stam的方法进行执行SQL语句进行更新数据库(返回值是影响的行数 (int) )
int count = stam.executeUpdate(sql);
if (count > 0) {
System.out.println("操作成功!");
}
} catch (ClassNotFoundException e) { // 出现异常时最好一个一个处理(更加安全)
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally { // 无论操作成功与否,我们都要进行关闭操作(放在Finally必定对执行)
try {
// 如果还没有执行到给 stam 变量赋值就已经异常处理了,那么stam还是 null,就会null.close(),从而出现空指针的问题
if(stam != null) stam.close(); // 避免出现空指针
if(connection != null)connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
// 将update() 设置为静态方法,便于调用
update();
}
}
如果写的不太清晰,或者有问题,可以留言,本人会认真回答。
颜大佬的视频链接:https://www.bilibili.com/video/av29086718?p=13
关于oracle ,mysql,sqlserver 字段设置默认值是否为空测试和sql语句设置字段默认值为0的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于case...when... 和 MySql、Oracle、SqlServer 处理空值、db2,oracle,mysql ,sqlserver 限制返回的行数、java的web应用系统,想支持多种数据库(oracle,sqlserver,mysql)、JDBC访问数据库的具体步骤(MySql + Oracle + SQLServer)等相关内容,可以在本站寻找。
本文标签: