mysql 列的not null作用

一般建表时,如果列没有约定为not null 时,数值中是可以出现null的

比如建表时 id int not null 

对列id的约定not null ,其实它主要的作用是id列的数据中不会出现NULL,这样你查找数据时就不需要 id IS  NULL来判定,

空字符串''和null是两个概念 所以

id =''

id IS NULL

是不一样的。

 

not null 会有负面影响,当你要插入数值是NULL时,实际插的是根据列的类型变化的

char 会是 ''

int 会是 0

datetime 会是 '0000-00-00 00:00:00'

 

所以要根据需要而定。这也就是 not null 一般和default一起配合使用的。

<think>好的,用户想了解如何在MySQL中使用NOTNULL创建表的语法和示例。首先,我需要回忆一下相关的知识,并结合提供的引用内容来组织答案。根据引用[4],创建表的基本语法包括名、数据类型和约束,其中NOTNULL约束的一种。引用[1]中的示例明确展示了在department表中,dept_id和dept_name字段都使用了NOT NULL约束,并且dept_id作为主键。这可以作为基础示例。接下来,我需要考虑用户可能需要的详细信息,比如如何在多个上应用NOT NULL,或者如何处理默认值和主键的组合。引用[2]提到当字段声明为NOT NULL时,查询优化器会进行优化,这可能是一个有用的点,可以说明使用NOT NULL的好处。此外,引用[3]中的示例虽然主要关于分区,但也包含了NOTNULL的应用,例如在ProductName等字段上使用NOTNULL DEFAULT'1',这展示了如何结合默认值使用NOT NULL,避免插入时的错误。这可能对用户有帮助,可以作为一个示例。用户的问题主要集中在语法和示例上,所以需要给出清晰的代码示例,并解释每个部分的作用。同时,可能需要提到使用NOTNULL的注意事项,比如插入数据时必须提供值,或者结合DEFAULT使用的情况。另外,用户可能想知道NOTNULL与其他约束(如主键)的关系。主键默认是NOTNULL的,但其他需要显式声明。引用[1]中的例子正好说明了这一点,dept_id是主键且NOTNULL,而dept_name只是NOT NULL。 最后,生成相关问题需要考虑用户可能的后续问题,比如如何修改现有NOT NULL,或者NOTNULLNULL的区别,以及性能优化方面的内容,如引用[2]提到的优化情况。总结下来,回答的结构应该是:先介绍语法,给出示例,然后详细说明注意事项和最佳实践,最后生成相关问题。</think>### MySQL中使用NOT NULL创建表的语法及示例 #### 一、基本语法 在MySQL中,`NOT NULL`约束用于确保字段必须包含显式值。语法结构如下: ```sql CREATE TABLE 表名 ( 名 数据类型 NOT NULL, ... ); ``` #### 二、核心示例 1. **基础用法** 创建包含`NOT NULL`字段的表: ```sql CREATE TABLE department ( dept_id INT NOT NULL PRIMARY KEY, dept_name VARCHAR(50) NOT NULL ); ``` - `dept_id`和`dept_name`均不可为空[^1] - 主键字段默认隐含`NOT NULL`约束[^4] 2. **组合默认值** 当字段不允许为空但需要默认值时: ```sql CREATE TABLE employees ( emp_id INT NOT NULL AUTO_INCREMENT, name VARCHAR(100) NOT NULL DEFAULT '新员工', hire_date DATE NOT NULL, PRIMARY KEY (emp_id) ); ``` - `name`字段未显式赋值时自动填充"新员工" 3. **复合约束场景** 在分区表中使用`NOT NULL`: ```sql CREATE TABLE product ( Id BIGINT NOT NULL, ProductName CHAR(245) NOT NULL DEFAULT '1', PRIMARY KEY (Id, ProductName) ) PARTITION BY RANGE (Id); ``` - 主键字段必须声明为`NOT NULL`[^3] #### 三、注意事项 1. 插入数据时若未给`NOT NULL`字段赋值: - 无默认值:触发错误`Column cannot be null` - 有默认值:自动填充默认值 2. 查询优化:`WHERE col_name IS NULL`条件在`NOT NULL`字段上会被优化器直接跳过[^2] 3. 修改已有字段:`ALTER TABLE 表名 MODIFY 名 数据类型 NOT NULL;` #### 四、最佳实践 1. 主键、业务关键字段应强制`NOT NULL` 2. 数值型字段建议配合`DEFAULT 0`使用 3. 字符串字段可设置`DEFAULT ''`避免空值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值