定义/修改列时 NULL

mysql的文档说明:

column_definition:
    col_name type [NOT NULL | NULL] [DEFAULT default_value]
        [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY]
        [COMMENT ‘string‘]

DEFAULT子句用于为列指定一个默认值。默认值必须为一个常数,不能为一个函数或一个表达式,有一种情况例外。例如,一个日期列的默认值不能被设置为一个函数,如NOW()或CURRENT_DATE。不过,有一种例外,您可以对TIMESTAMP列指定CURRENT_TIMESTAMP为默认值。

BLOB和TEXT列不能被赋予默认值。

如果在列定义中没有明确的DEFAULT值,则MySQL按照如下规则确定默认值:

如果列可以使用NULL作为值,则使用DEFAULT NULL子句对列进行定义。(在MySQL的早期版本中也如此。)

如果列不能使用NULL作为值,则MySQL对列进行定义时不使用DEFAULT子句。输入数据时,如果INSERT或REPLACE语句不包括列的值,则MySQL依据当时的有效的SQL模式操作列:

o        如果严格模式没有被启用,则MySQL会根据列数据类型,把列设置为明确的默认值。

o        如果严格模式已被启用,则事务表会出现错误,语句被回滚。对于非事务表,会出现错误,不过,如果错误出现在一个多行语句中的第二行或后续行,则以前的各行将被插入。

假设表t按下面的方法进行定义:

CREATE TABLE t (i INT NOT NULL);

在这种情况下,i没有明确的默认值,所以在严格模式中,每个后续语句都会产生一个错误,并且没有行被插入。当未使用严格模式时,只有第三个语句产生错误;明确的默认值被插入到前两个语句中,但是第三个语句会出现错误,因为DEFAULT(i)不会产生一个值:

INSERT INTO t VALUES();
INSERT INTO t VALUES(DEFAULT);
INSERT INTO t VALUES(DEFAULT(i));
时间: 2024-08-24 04:14:17

定义/修改列时 NULL的相关文章

定义未知成员和 Null 处理属性

Analysis Services 处理某个维度时,将用数据源视图中表或视图的基础列中的所有非重复值来填充该维度中的属性.如果 Analysis Services 在处理过程中遇到 Null 值,默认情况下,它会将此 Null 值转换为零(对于数值列)或空字符串(对于字符串列).您可以在基础关系数据仓库的提取.转换和加载过程(如果有)中修改默认设置或转换 Null 值.另外,还可以通过配置以下三个属性使 Analysis Services 将 Null 值转换为指定值:用于维度的 Unknown

FineUI之动态增加列及修改列的实现

在FineUI的官方示例中有类似的实现.示例中实现了动态增加列,但有时我们可能需要动态修改列.先来看效果图 下面是代码实现 DynamicGrid.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DynamicGrid.aspx.cs" Inherits="FineUITest.DynamicGrid" %> <%@ Registe

sql server2008修改列属性

修改列属性 使用ALTER TABLE语句不仅可以添加新列和删除列,还可以对列的属性进行修改,比如,从新设置列名,数据类型 长度,是否为空,还可以设置或者取消一个列的主键约束 当设置列名,数据类型,长度以及是否允许为空时,alter table的语法格式: alter table table_name alter column column_name new_type_name 将学生成绩管理系统数据库中学生信息表中姓名列数据类型改为nvarchar(20)语句如下 use 学生成绩管理系统 a

定义数据表时要考虑的要素

定义数据表时要考虑的要素 创建一张数据表时一般有以下要素要考虑: 列: 字段类型 是否为空 是否自增 默认值 键: 主键 外键 唯一键(也可能是多个 filed 组成的) 触发器(就是自动调用的存储过程,据说要慎用,因为它在不知情的下做了很多操作,会让系统更加复杂) 最后是索引,但很少用到 另外,数据库中除了表以外,还有其他元素: 视图 存储过程 注意:字段设置为 null 和空字符串, 这两者含义是不一样的,请注意这两者之间的差别. 原文地址:https://www.cnblogs.com/a

MySQL 添加列, 修改列, 删除列

ALTER TABLE:添加,修改,删除表的列,约束等表的定义. 查看列:desc 表名; 修改表名:alter table t_book rename to bbb; 添加列:alter table 表名 add column 列名 varchar(30); 删除列:alter table 表名 drop column 列名; 修改列名MySQL: alter table bbb change nnnnn hh int; 修改列名SQLServer:exec sp_rename't_stude

表的操作-建立表-删除表-修改表的名字-修改列的名字及数据类型-删除/添加主键-在表的最后增加一列-查看表的结构

USE db; -- 列出查看当前数据库中的所有表 SHOW TABLES; SHOW TABLES LIKE 's%'; CREATE TABLE 表名 ( 列名 类型 修饰 约束, sid INT(3) UNSIGNED ZEROFILL PRIMARY KEY AUTO_INCREMENT sgender ENUM('男','女','保密') DEFAULT '男' )ENGINE=MYISAM DEFAULT CHARSET=utf8; -- 建立表 CREATE TABLE IF NO

类定义下标操作符时,为什么需要定义两个版本

类定义下标操作符时,一般需要定义两个版本: 1. 作为类的非const成员函数,返回引用: 2. 作为类的const成员函数,返回const引用. 首先,什么是类的const成员函数,也就是不改变对象的成员函数.表示方法就是在类的成员函数的声明和定义后面加上const. 类的有些对象可能可以改变,有的不能改变,举个例子来说,对于string对象来说,有的我们可能希望定义的string对象可以改变,有的则不能改变: string str1= "abcdefg"; const string

MySQL 查看约束,添加约束,删除约束 添加列,修改列,删除列

ALTER TABLE:添加,修改,删除表的列,约束等表的定义. 查看列:desc 表名; 修改表名:alter table t_book rename to bbb; 添加列:alter table 表名 add column 列名 varchar(30); 删除列:alter table 表名 drop column 列名; 修改列名MySQL: alter table bbb change nnnnn hh int; 修改列名SQLServer:exec sp_rename't_stude

MySQL 添加列,修改列,删除列

ALTER TABLE:添加,修改,删除表的列,约束等表的定义. 查看列:desc 表名; 修改表名:alter table t_book rename to bbb; 添加列:alter table 表名 add column 列名 varchar(30); 删除列:alter table 表名 drop column 列名; 修改列名MySQL: alter table bbb change nnnnn hh int; 修改列名SQLServer:exec sp_rename't_stude