MySQL-插入表
在本教程中,我们将学习如何将数据插入MySQL的表中。
我们将使用在CREATE Table教程中创建的employee
和comments
表。
INSERT语法
我们使用以下语法将数据插入表中。
INSERT INTO table_name VALUES('val1', 'val2', ...);
我们还可以添加数据库名称,如下所示。
INSERT INTO database_name.table_name VALUES('val1', 'val2', ...);
其中," table_name"是我们要其中插入数据的表的名称。
'val1','val2',...是表中各列的值。
通过指定列名来插入
我们还可以在插入查询中指定列名,如下所示。
INSERT INTO table_name(column1, column2, ...) VALUES ('val1', 'val2', ...);
其中," table_name"是表的名称,将值" val1"插入" column1"列中,依此类推。
插入多行
我们使用以下语法在表中插入多行。
INSERT INTO table_name(column1, column2, ...) VALUES ('val1', 'val2', ...), ('val11', 'val22', ...);
注意点!
将数据插入表中时,请记住以下几点。
使用双引号或者单引号将字符串引起来。
对于整数和浮点数,我们不必将其用引号引起来。
日期和时间格式必须用引号引起来。
如果值的数量小于表中的列数,请指定要为其插入值的列名。
示例
插入员工表
在以下示例中,我们将插入员工的详细信息。
我们正在为给定的列插入值:employeeid,firstname,lastname,email,birthday,lastmodified和created。
由于会跳过分数列的值,因此它将获得为其设置的默认值,即0。
INSERT INTO `employee` (`employeeid`, `firstname`, `lastname`, `email`, `birthday`, `lastmodified`, `created`) VALUES ('e01', '', '', '@example.com', '1900-01-01', '2016-01-01 01:01:01', '2016-01-01 01:01:01');
并且我们得到以下响应:Query OK,受影响的第一行(0.00秒)
我们可以使用SELECT查询来检查结果。
在本系列教程的后半部分,我们将学习SELECT查询。
mysql> SELECT * FROM employee; +------------+-----------+----------+-------------------+-------+------------+---------------------+---------------------+ | employeeid | firstname | lastname | email | score | birthday | lastmodified | created | +------------+-----------+----------+-------------------+-------+------------+---------------------+---------------------+ | e01 | | | @example.com | 0 | 1900-01-01 | 2016-01-01 01:01:01 | 2016-01-01 01:01:01 | +------------+-----------+----------+-------------------+-------+------------+---------------------+---------------------+ 1 row in set (0.00 sec)
让我们再插入两个雇员详细信息,这次我们将为所有列插入数据,并将插入多行。
INSERT INTO `employee` (`employeeid`, `firstname`, `lastname`, `email`, `score`, `birthday`, `lastmodified`, `created`) VALUES ('e02', 'John', 'Doe', '[email protected]', 8, '1900-02-03', '2016-01-01 01:01:04', '2016-01-01 01:01:04'), ('e03', 'Jane', 'Doe', '[email protected]', 6, '1900-05-20', '2016-01-01 01:01:04', '2016-01-01 01:01:04');
我们得到以下
Query OK, 2 rows affected (0.00 sec) Records: 2 Duplicates: 0 Warnings: 0
现在,我们可以运行SELECT查询并获取三行。
mysql> SELECT * FROM employee; +------------+-----------+----------+---------------------+-------+------------+---------------------+---------------------+ | employeeid | firstname | lastname | email | score | birthday | lastmodified | created | +------------+-----------+----------+---------------------+-------+------------+---------------------+---------------------+ | e01 | | | @example.com | 0 | 1900-01-01 | 2016-01-01 01:01:01 | 2016-01-01 01:01:01 | | e02 | John | Doe | [email protected] | 8 | 1900-02-03 | 2016-01-01 01:01:04 | 2016-01-01 01:01:04 | | e03 | Jane | Doe | [email protected] | 6 | 1900-05-20 | 2016-01-01 01:01:04 | 2016-01-01 01:01:04 | +------------+-----------+----------+---------------------+-------+------------+---------------------+---------------------+ 3 rows in set (0.00 sec)
用外键插入注释表
"评论"表具有一个外键"雇员",因此,我们必须给"注释"表的"雇员"列提供一个值,该值也存在于"雇员"表的"雇员"列中。
在下面的示例中,我们将插入来自e03
employeeid帐户的注释。
INSERT INTO `mysql_project`.`comments` (`employeeid`, `commentbody`, `lastmodified`, `created`) VALUES ('e03', 'Awesome', '2016-01-01 02-03-04', '2016-01-01 02-03-04');
我们得到以下Query OK,受影响的第1行(0.00秒)
我们可以使用SELECT查询来检查插入的行。
mysql> SELECT * FROM comments; +-----------+------------+-------------+---------------------+---------------------+ | commentid | employeeid | commentbody | lastmodified | created | +-----------+------------+-------------+---------------------+---------------------+ | 1 | e03 | Awesome | 2016-01-01 02:03:04 | 2016-01-01 02:03:04 | +-----------+------------+-------------+---------------------+---------------------+ 1 row in set (0.00 sec)
如果我们尝试在子表的外键列中插入在父表的引用列中不存在的任何值,则将收到错误消息。
在下面的示例中,我们尝试使用在父表" employee"的" employeeid"列中不存在的employeeid" e00"将数据插入到注释表中。
因此,查询将返回错误。
INSERT INTO `comments` (`employeeid`, `commentbody`, `lastmodified`, `created`) VALUES ('e00', 'Hello World', '2016-01-01 02-03-10', '2016-01-01 02-03-10');
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`mysql_project`.`comments`, CONSTRAINT `employeeid_comments_FK` FOREIGN KEY (`employeeid`) REFERENCES `employee` (`employeeid`) ON DELETE CASCADE ON UPDATE CASCADE)
该错误告诉我们无法插入数据,因为父表" employee"的" employeeid"列中不存在" e00"。