Mysql 阻止将null值插入主键列的表中

Mysql 阻止将null值插入主键列的表中,mysql,database,primary-key,Mysql,Database,Primary Key,我不知道是数据库有问题还是什么问题。对于数据库中的所有表,对于声明为主键的列,在类似查询时采用空值或默认值 INSERT INTO TABLE (emp_name,emp_addr,emp_contact,salary) values ('Jack','127 N F 14 Stillwater','3456786543',8) 其中该表由emp\u id(主键)、emp\u名称、emp\u地址、emp\u联系人和工资组成 如果我想用 INSERT INTO EMPLOYEE values

我不知道是数据库有问题还是什么问题。对于数据库中的所有表,对于声明为主键的列,在类似查询时采用空值或默认值

INSERT INTO TABLE (emp_name,emp_addr,emp_contact,salary) 
values ('Jack','127 N F 14 Stillwater','3456786543',8)
其中该表由
emp\u id(主键)、emp\u名称、emp\u地址、emp\u联系人和工资组成

如果我想用

INSERT INTO EMPLOYEE values (NULL,'Jack','127 N F 14 Stillwater','345678543',8)
,它抛出了主键不能为null的错误,而主键应该为null

我创建表的脚本是

    create table Employee(
    emp_id int(11) primary key,
    emp_name varchar(25) not null,
    emp_addr varchar(40) not null,
    emp_contact varchar(10),
    salary float(2)
    )ENGINE=INNODB;

This is what is happening in my DB
 create table sale(sale_id varchar(10) primary key not null,sold_vehicle varchar(12),sm_id int(11),                                                                sale_date date)ENGINE=INNODB;
Query OK, 0 rows affected (0.01 sec)

mysql> insert into sale values('s2389','AP28DJ5093',1290,'05-12-2010');
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> insert into sale values('s2420','AP28MY0545',1290,'24-10-2012');
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> select * from sale;
+---------+--------------+-------+------------+
| sale_id | sold_vehicle | sm_id | sale_date  |
+---------+--------------+-------+------------+
| s2389   | AP28DJ5093   |  1290 | 0000-00-00 |
| s2420   | AP28MY0545   |  1290 | 0000-00-00 |
+---------+--------------+-------+------------+
2 rows in set (0.00 sec)

mysql> update sale set sale_id = null where sale_id = 's2389';
Query OK, 1 row affected, 1 warning (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 1

mysql> select * from sale;
+---------+--------------+-------+------------+
| sale_id | sold_vehicle | sm_id | sale_date  |
+---------+--------------+-------+------------+
|         | AP28DJ5093   |  1290 | 0000-00-00 |
| s2420   | AP28MY0545   |  1290 | 0000-00-00 |
+---------+--------------+-------+------------+
2 rows in set (0.00 sec)

mysql> desc sale;
+--------------+-------------+------+-----+---------+-------+
| Field        | Type        | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| sale_id      | varchar(10) | NO   | PRI | NULL    |       |
| sold_vehicle | varchar(12) | YES  |     | NULL    |       |
| sm_id        | int(11)     | YES  |     | NULL    |       |
| sale_date    | date        | YES  |     | NULL    |       |
+--------------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

在创建表格时添加
AUTO_INCREMENT
选项

create table Employee
(
emp_id int(11) AUTO_INCREMENT primary key,
emp_name varchar(25) not null,
emp_addr varchar(40) not null,
emp_contact varchar(10),
salary float(2)
)ENGINE=INNODB;

主键字段不能为空。并且您必须为主键输入NOTNULL。否则,拥有主键有什么意义呢?:)请将创建查询更改为:

创建表tblblah(ID不是NULL主键,
…等等

;
;
插入到表tblblah(ID,…
)中,依此类推

;
;

根据您的表格模式填写。

您确定主键上没有自动递增功能吗?为什么主键不是空的,但我不需要该键的自动递增功能..我不能使用该选项吗?如果是这种情况,请删除
自动递增
并在其上提供ID。
插入员工值(1、'Jack'、'127 N F 14 Stillwater'、'345678543',8)
如果您没有为ID字段指定自己的值(例如员工IC号、员工编号等)那么,在上面的代码中包含AUTO_INCREMENT子句是一个好主意。但是主键本身是一个not null atribute。在desc表中,它在null下显示为NO…我们需要显式地给出那个约束吗?我想我们不需要。纠正我,如果我错了。是的,在MYSQL中不一定要放not null。确定PK是一个“not null”属性ute的性质。即使您没有使用“not null”约束来包装字段,pk也不允许使用null。这就是为什么会出现错误的原因。(例如,在第二次插入查询中,主键为null)由于您不需要自动递增,只需要插入自己的值,因此使用显式的“NOTNULL”约束来保持表的完整性是非常安全的,因此您不需要依赖SQL引擎,以避免您在这里遇到的问题。