为表的指定字段添加数据,就是在 INSERT语句中只向部分字段中添加,而其他字段的值为表定义时的默认值。为表的指定字段添加数据的基本语法格式如下所示:
INSERT INTO 表名 (字段 1,字段 2..)
VALUES (值1,值 2..)
在上述语法格式中,“字段1,字段 2,…”表示数据表中的字段名称,此次只指定表中部分字段的名称。“值 1,值 2,…”表示指定字段的值,每个值的顺序、类型必须与对应的字段相匹配。
例如,向 student 表中添加一条新记录,记录中 id 字段的值为 4,name 字段的值为“zhaoliu”,grade 字段不指定值,SQL语句如下所示:
mysql> INSERT INTO student (id,name) VALUES(4,'zhaoliu');
Query OK, 1 row affected (0.00 sec)
上述 SQL语句执行成功后,会向 student 表中添加一条新的数据。为了验证数据是否添加成功,使用 SELECT 语句查看 student 表,结果如下所示:
mysql> select * from student;
+------+----------+-------+
| id | name | grade |
+------+----------+-------+
| 1 | zhangsan | 98.5 |
| 2 | lisi | 95 |
| 3 | wangwu | 61.5 |
| 4 | zhaoliu | NULL |
+------+----------+-------+
4 rows in set (0.00 sec)
从查询结果可以看出,新记录添加成功,但是 grade 字段的值为 NULL。这足因为在添加新记录时,如果没有为某个字段赋值,系统会自动为该字段添加默认值。通过 SQL 语句 “SHOW CREATE TABLE student\G ”可以查看 student 表的详细结构,SQL 执行结果如下所示:
mysql> show create table student \G
*************************** 1. row ***************************
Table: student
Create Table: CREATE TABLE `student` (
`id` int DEFAULT NULL,
`name` varchar(20) NOT NULL,
`grade` float DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.01 sec)
从表的详细结构中可以看出,grade字段的默认值为 NULL。本例中没有为 grade字段赋值,系统会自动为其添加默认值 NULL。
需要注意的是,如果某个字段在定义时添加了非空约束,但没有添加 default 约束那么插人新记录时就必须为该字段赋值,否则数据库系统会提示错误。
例如,向 student 表中添加一条新记录,记录中 id 字段的值为 5,grade 字段的值为 97,name 字段不指定值,SQL语句如下所示:
mysql> INSERT INTO student(id,grade) VALUES (5,97);
ERROR 1364 (HY000): Field 'name' doesn't have a default value
从执行结果可以看出,执行 INSERT 语句时发生了错误,发生错误的原因是 name 字段没有指定默认值,且添加了非 NULL约束。接下来,通过查询语句查看数据是否成功添加,执行结果如下所示:
mysql> select * from student;
+------+----------+-------+
| id | name | grade |
+------+----------+-------+
| 1 | zhangsan | 98.5 |
| 2 | lisi | 95 |
| 3 | wangwu | 61.5 |
| 4 | zhaoliu | NULL |
+------+----------+-------+
4 rows in set (0.00 sec)
通过查询结果可以看到,student 表中仍然只有4条记录,新记录没有添加成功。为指定字段添加数据时,指定字段也无须与其在表中定义的顺序一致,它们只要与VALUES 中值的顺序一致即可。
例如,向 student 表中添加一条新记录,记录中 name 字段的值为 'sunbin',grade字段的值为 55,id 字段不指定值,SQL语句如下所示:
mysql> INSERT INTO student (grade,name) VALUES(55,'sunbin');
Query OK, 1 row affected (0.01 sec)
执行 INSERT 语句向 student 表中添加数据,然后通过查询语句查看数据是否成功添加,执行结果如下所示:
mysql> select * from student;
+------+----------+-------+
| id | name | grade |
+------+----------+-------+
| 1 | zhangsan | 98.5 |
| 2 | lisi | 95 |
| 3 | wangwu | 61.5 |
| 4 | zhaoliu | NULL |
| NULL | sunbin | 55 |
+------+----------+-------+
5 rows in set (0.00 sec)
从查询结果可以看出,新记录添加成功。
-
INSERT 语句的其他写法
INSERT语句还有一种语法格式,可以为表中指定的字段或者全部字段添加数据其格式如下所示:
INSERT INTO 表名
SET 字段名 1=值 1[,字段名 2=值 2,...]
在上面的语法格式中,“字段名 1”“字段名 2” 是指需要添加数据的字段名称,“值1”“值 2”表示添加的数据。如果在 SET 关键字后面指定了多个“字段名二值”对,每对之间使用逗号分隔,最后一个 “字段名一值” 对之后不需要逗号。接下来通过一个案例来演示使用这种语法格式向 student 表中添加记录。
例如,向student表中添加一条新记录,该条记录中id 字段的值为5,name 字段的值为 'boya’,grade 字段的值为 99,INSERT语句如下所示:
mysql> INSERT INTO student
-> SET id=5,name='boya',grade=99;
Query OK, 1 row affected (0.01 sec)
从执行结果可以看到 INSERT语句成功执行,接下来通过查询语句查看数据是否成功添加,执行结果如下所示:
mysql> select * from student;
+------+----------+-------+
| id | name | grade |
+------+----------+-------+
| 1 | zhangsan | 98.5 |
| 2 | lisi | 95 |
| 3 | wangwu | 61.5 |
| 4 | zhaoliu | NULL |
| NULL | sunbin | 55 |
| 5 | boya | 99 |
+------+----------+-------+
6 rows in set (0.00 sec)
从查询结果可以看出,student表中新记录添加成功。
标签:为表,name,grade,字段,添加,student,MySQL,NULL From: https://blog.csdn.net/W_Fe5/article/details/141087207