MySQL INSERT INTO 查询:如何在表中添加行(示例)

⚡ 智能摘要

MySQL INSERT INTO Query 语句向表中添加新行,可以通过显式指定目标列名,也可以为每一列提供值。字符串、数字和日期的正确引用决定了存储的数据是否完整保留。

  • 📥 核心语法: INSERT INTO `table_name`(column_1,column_2) VALUES (value_1,value_2) 在指定的表中创建一个新行。
  • 🔤 引用规则: 字符串和日期值需要用单引号括起来;数值则不需要加引号。
  • 0️⃣ 领先零陷阱: 未加引号的电话号码会被当作普通数字读取,因此前面的零会被自动忽略。
  • 🔀 列顺序: 只要每个值都映射到其匹配的列,查询中的列顺序就无关紧要。
  • 🕳️ 省略的列: 语句中未包含的列将接收 NULL 值或其声明的默认值。
  • 📑 桌对桌: INSERT INTO … SELECT 语句会在列结构一致时复制表之间的行。

INSERT INTO 是什么?

插入 用于在表中存储数据。INSERT 命令会在表中创建一个新行来存储数据。数据通常由运行在数据库之上的应用程序提供。

基本语法

让我们看一下 INSERT INTO 的基本语法 MySQL 命令:

INSERT INTO `table_name`(column_1,column_2,...) VALUES (value_1,value_2,...);

点击这里

  • INSERT INTO `table_name` 是告诉的命令 MySQL 服务器在名为“table_name”的表中添加新行。
  • (column_1,column_2,…)指定新表中要更新的列 MySQL 行
  • VALUES (value_1,value_2,…) 指定要添加到新行的值

在提供要插入到新表中的数据值时,应考虑以下几点:

  • 字符串数据类型——所有字符串值都应用单引号括起来。
  • 数值数据类型——所有数值都应直接提供,无需用单引号或双引号括起来。
  • 日期数据类型 - 将日期值括在单引号中,格式为“YYYY-MM-DD”。

一次插入多行

一条 INSERT 语句可以插入多行数据。每组数据之间用逗号分隔。一条语句比多条语句更快,因为索引只需更新一次。

INSERT INTO `categories`(`category_name`,`remarks`) VALUES
('Documentary', 'Factual films'),
('Musical', 'Song driven films');

MySQL INSERT INTO 查询示例

假设我们有以下需要添加到数据库的新库成员列表。

全名 出生日期 性别 实际地址 邮寄地址 联络号码 电子邮件
伦纳德·霍夫施塔特 (男) 桂园 0845738767
谢尔顿·库珀 (男) 桂园 0976736763
拉杰什·库斯拉帕利 (男) 桂园 0938867763
莱斯利·温克尔 14/02/1984 (男) 桂园 0987636553
霍华德·沃洛维茨 24/08/1981 (男) 南方公园 PO Box 4563 0987786553 lwolowitz@email.me

让我们逐行插入数据,从 Leonard Hofstadter 开始。我们将联系电话视为数值数据类型,因此不会用单引号将其括起来。

INSERT INTO `members` (`full_names`,`gender`,`physical_address`,`contact_number`) VALUES ('Leonard Hofstadter','Male','Woodcrest',0845738767);

执行上述脚本会删除 Leonard 联系号码中的 0,因为该值被视为数值,而前导零没有意义。

为避免此类问题,该值必须用单引号括起来,如下所示。

INSERT INTO `members` (`full_names`,`gender`,`physical_address`,`contact_number`) VALUES ('Sheldon Cooper','Male','Woodcrest', '0976736763');

⚠️提示: 将电话号码、邮政编码和类似标识符存储在文本列(例如 VARCHAR 类型)中。数值列不能保留前导零。

更改列顺序

更改列的顺序对 INSERT 查询没有影响 MySQL只要正确的值已映射到正确的列即可。 以下查询说明了这一点。

INSERT INTO `members` (`contact_number`,`gender`,`full_names`,`physical_address`) VALUES ('0938867763','Male','Rajesh Koothrappali','Woodcrest');

上述查询跳过了出生日期列。默认情况下, MySQL 将 NULL 值插入到 INSERT 查询中省略的列中。

现在我们插入莱斯利的记录,其中已填写了出生日期。日期值必须用单引号括起来,格式为“YYYY-MM-DD”。

INSERT INTO `members` (`full_names`,`date_of_birth`,`gender`,`physical_address`,`contact_number`) VALUES ('Leslie Winkle','1984-02-14','Male','Woodcrest', '0987636553');

省略列列表

以上所有查询都指定了列名并将其映射到值。如果我们为表中的所有列都提供值,则可以省略列列表。 MySQL 插入查询。

INSERT INTO `members` VALUES (9,'Howard Wolowitz','Male','1981-08-24',
'SouthPark','P.O. Box 4563', '0987786553', 'lwolowitz@email.me');

现在让我们使用 选择语句 查看成员表中的所有行。

SELECT * FROM `members`;
会员号码 全名 性别 出生日期 实际地址 邮寄地址 联系电话 电子邮件
1 珍妮特琼斯 (女) 21-07-1980 第一街 4 号地块 私人包 0759 253 542 janetjones@yagoo.cm
2 珍妮特·史密斯·琼斯 (女) 23-06-1980 梅尔罗斯 123 无 无 jj@fstreet.com
3 罗伯特·菲尔 (男) 12-07-1989 第三街 3 无 12345 rm@tstreet.com
4 格洛丽亚·威廉姆斯 (女) 14-02-1984 第二街 2 无 无 无
5 伦纳德·霍夫施塔特 (男) 无 桂园 无 845738767 无
6 谢尔顿·库珀 (男) 无 桂园 无 0976736763 无
7 拉杰什·库斯拉帕利 (男) 无 桂园 无 0938867763 无
8 莱斯利·温克尔 (男) 14-02-1984 桂园 无 0987636553 无
9 霍华德·沃洛维茨 (男) 24-08-1981 南方公园 PO Box 4563 0987786553 lwolowitz@email.me

请注意,正如预测的那样,伦纳德·霍夫斯塔特的联系电话号码去掉了开头的零。引用的号码则保留了开头的零。

从另一个表插入到一个表中

INSERT 命令还可用于将数据从另一个表插入到一个表中。基本语法如下所示。

INSERT INTO table_1 SELECT * FROM table_2;

现在我们将创建一个名为 categories_archive 的虚拟表,用于存储电影分类信息。以下脚本将用于创建该表。 创建表.

CREATE TABLE `categories_archive` ( `category_id` int(11) AUTO_INCREMENT, `category_name` varchar(150) DEFAULT NULL, `remarks` varchar(500) DEFAULT NULL, PRIMARY KEY (`category_id`))

执行上述脚本创建表。现在,我们将 categories 表中的所有行插入到 categories archive 表中。

INSERT INTO `categories_archive` SELECT * FROM `categories`;

要使该脚本正常运行,表结构必须相同。更健壮的脚本会将目标表中的列名映射到包含数据的表中的列名,如下所示。

INSERT INTO `categories_archive`(category_id,category_name,remarks) SELECT category_id,category_name,remarks FROM `categories`;

执行以下 SELECT 查询会得到以下结果。

SELECT * FROM `categories_archive`;
类别编号 CATEGORY_NAME 备注
1 喜剧 幽默电影
2 浪漫 爱情故事
3 史诗 故事古装电影
4 恐怖 无
5 科幻小说 无
6 惊悚 无
7 操作 无
8 爱情喜剧 无
9 卡通 无
10 卡通 无

PHP 示例:插入 MySQL 表

mysqli_query 函数用于执行 SQL PHP 查询。它同时执行 Insert、Select、Update 和 Delete 语句,语法如下。

mysqli_query($db_handle,$query);

这里,

  • “mysqli_query(…)” 是执行 SQL 查询的函数。
  • “$query”是要执行的SQL查询语句。
  • “$db_handle”是mysqli_connect返回的服务器连接链接。

例如:

$servername = "localhost";
$username = "alex";
$password = "yPXuPT";
$dbname = "afmznf";

// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);

// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

$sql = "INSERT INTO addkeyworddata(link, keyword) VALUES ('https://www.guru99.com/','1000')";

if (mysqli_query($conn, $sql)) {
    echo "New record created successfully" . '<br>';
} else {
    echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}

常见问题

MySQL 系统会因重复条目错误而拒绝该操作。可以使用 INSERT IGNORE 静默跳过该行,或使用 INSERT … ON DUPLICATE KEY UPDATE 改为更新现有行。

插入操作完成后立即运行 SELECT LAST_INSERT_ID(),或者在 PHP 中调用 mysqli_insert_id($conn)。它会返回您当前连接上最新行生成的 AUTO_INCREMENT 键。

切勿将用户输入连接到查询字符串中。使用带有绑定参数的预处理语句,以便值与查询字符串分开传递。 SQL 不能作为命令执行。

是的。人工智能助手可以将电子表格或纯文本描述转换为插入语句,并且 MySQL 工作台 可以运行它们。检查列顺序和引用,因为模型可能会猜测模式。

先将其插入开发副本。AI 生成的行可能会破坏外键、超出列长度或生成无效日期。请在事务中运行批处理,以便可以回滚。

总结一下这篇文章: