MySql -- not null 非空約束


2、not null 非空約束

  用於確保當前列的值不為空;在創建表時,如果不指定是否可以為空,字段默認可以為NULL。

-- 這是上一篇默認約束創建的表
CREATE TABLE `test`.`user`(  
  `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `name` VARCHAR(225) NOT NULL COMMENT '姓名', -- 這里添加了NOT NULL
  `sex` TINYINT(1) DEFAULT 1 COMMENT '性別 1男 0女',
  PRIMARY KEY (`id`)
) ENGINE=INNODB CHARSET=utf8 COLLATE=utf8_general_c

 

給字段添加非空約束:

/*
在創建表時,直接在字段類型后面添加 NOT NULL 即可。
如果已經存在了表,那么直接修改表的字段為非空
*/
ALTER TABLE `user`  MODIFY  `name` VARCHAR(255) NOT NULL;
DESC `user`; -- DESC 查看表結構

結果:
Field   Type          Null    Key     Default  Extra           
-----------------------------------------------------------------
id      int(11)       NO      PRI     (NULL)   auto_increment  
name    varchar(225)  NO              (NULL)                   
sex     tinyint(1)    YES             1                      

 

刪除非空約束:

/*
刪除非空約束和添加非空約束一樣,都是修改表字段的結構;
直接刪除 NOT NULL,這樣就把非空刪除了。
*/
ALTER TABLE `user` MODIFY `name` VARCHAR(255);
DESC `user`;

結果:
Field   Type          Null    Key     Default  Extra           
---------------------------------------------------------------
id      int(11)       NO      PRI     (NULL)   auto_increment  
name  varchar(255)  YES  (NULL)                   
sex     tinyint(1)    YES             1                        

 

向非空約束中添加數據:

-- 添加一條記錄,直接設置name字段為 '' ,可以添加成功。
INSERT INTO `user`(`name`,`sex`) VALUES('',0);

結果:
共 1 行受到影響


-- 添加一個'null'或者'(NULL)'字符串,添加成功 INSERT INTO `user`(`name`,`sex`) VALUES('null',0); INSERT INTO `user`(`name`,`sex`) VALUES('(NULL)',0); 結果: 共 2 行受到影響


-- 設置name字段為null,添加失敗
INSERT INTO `user`(`name`,`sex`) VALUES(NULL,0);

結果:
錯誤代碼: 1048
COLUMN 'name' cannot be NULL


--
不設置name字段的值,直接添加,添加失敗
-- 如果在name字段上再加上默認約束,那么就可以添加,添加的值為默認的值
INSERT INTO `user`(`sex`) VALUES(0); 結果: 錯誤代碼: 1364 FIELD 'name' doesn't have a default value

 

有關的null的查詢:

-- 查詢name字段為NULL的記錄
SELECT * FROM `user` WHERE `name` IS NULL;

-- 查詢name字段為不為NULL的記錄
SELECT * FROM `user` WHERE `name` IS NOT NULL;

-- 查詢空字符串''
SELECT * FROM `user` WHERE `name` = '';

-- 查詢全是空的字符串,使用 LENGTH 和 TRIM 函數組合
SELECT * FROM `user` WHERE LENGTH(TRIM(`name`)) = 0;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM