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
莱斯利·温克尔 1984年02月14日 (男) 桂园 0987636553
霍华德·沃洛维茨 1981年08月24日 (男) 南方公园 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 生成的行可能会破坏外键、超出列长度或生成无效日期。请在事务中运行批处理,以便可以回滚。

总结一下这篇文章: