为了账号安全,请及时绑定邮箱和手机立即绑定

INSERT INTO tb2(age) values(10);这条记录为什么可以执行?

root@b test>CREATE TABLE tb2(

    -> username varchar(100) NOT NULL,

    -> age TINYINT NULL

    -> );

Query OK, 0 rows affected (1.70 sec)


root@b test>SHOW COLUMNS FROM tb2;

+----------+--------------+------+-----+---------+-------+

| Field    | Type         | Null | Key | Default | Extra |

+----------+--------------+------+-----+---------+-------+

| username | varchar(100) | NO   |     | NULL    |       |

| age      | tinyint(4)   | YES  |     | NULL    |       |

+----------+--------------+------+-----+---------+-------+

2 rows in set (0.03 sec)


root@b test>INSERT INTO tb2(username) values('Tom');

Query OK, 1 row affected (0.04 sec)


root@b test>INSERT INTO tb2(age) values(10);

Query OK, 1 row affected, 1 warning (0.04 sec)


root@b test>SHOW WARNINGS;

+---------+------+-----------------------------------------------+

| Level   | Code | Message                                       |

+---------+------+-----------------------------------------------+

| Warning | 1364 | Field 'username' doesn't have a default value |

+---------+------+-----------------------------------------------+

1 row in set (0.02 sec)


root@b test>INSERT INTO tb2 values('Jerri',NULL);

Query OK, 1 row affected (0.56 sec)


root@b test>INSERT INTO tb2 values(NULL,21);

ERROR 1048 (23000): Column 'username' cannot be null

root@b test>SELECT t.* FROM tb2 t;

+----------+------+

| username | age  |

+----------+------+

| Tom      | NULL |

|          |   10 |

| Jerri    | NULL |

+----------+------+

3 rows in set (0.00 sec)


正在回答

2 回答

在table的后面用小括号可以注明你想赋值的字段,单独赋值是被允许的,非空约束存在的意义是:一次性或者小括号选定欲给这个字段赋值的时候,必须要赋值,而不是说没有选定这个字段进行赋值时候,同列的其他字段就无法被赋值。

0 回复 有任何疑惑可以回复我~
#1

shuiyibu 提问者

非常感谢!
2016-01-07 回复 有任何疑惑可以回复我~

http://img1.sycdn.imooc.com//568dcce00001cf7605680235.jpg

以上就是插入表数据的三种方式,我们可以通过指定部分字段去插入数据(第一条insert),那么其他字段的值就默认为null,也可以通过指定所有字段去插入数据(第二条insert),这种方式与第三条insert是等价的,即我们也可以不指定列名去插入数据,这种情况,你必须去指定所有字段的对应值,即使指定为null!

0 回复 有任何疑惑可以回复我~
#1

shuiyibu 提问者

THX
2016-01-07 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
与MySQL的零距离接触
  • 参与学习       396886    人
  • 解答问题       3353    个

本课程涵盖全部MySQL数据库的基础,学习MySQL数据库的基础知识

进入课程

INSERT INTO tb2(age) values(10);这条记录为什么可以执行?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信