美文网首页
MySQL——插入数据(十二)

MySQL——插入数据(十二)

作者: 开心糖果的夏天 | 来源:发表于2017-06-24 15:25 被阅读106次

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

    MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

    MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。由于其社区版的性能卓越,搭配 PHP 和 Apache 可组成良好的开发环境。

    插入数据

    SELECT是最常用的SQL语句。但是,还有其他3个经常使用的SQL语句需要学习。第一个就是INSERT。INSERT是用来插入或添加行到数据库表的。插入可以用几种方式使用:
    (1)插入完整的行;
    (2)插入行的一部分;
    (3)插入多行;
    (4)插入某些查询的结果。

    一、插入完整的行

    把数据插入表中的最简单的方法就是使用基本的INSERT语法,它要求指定表名和被插入到新行中的值。例如:

    INSERT INTO customers VALUES(NULL ,
    'Pep E.LaPew',
    '100 Main Street',
    'Los Angeles',
    'CA',
    '90046',
    'USA',
    NULL,
    NULL);
    

    存储在每个表列中的数据在VALUES子句中给出,对每个列必须提供一个值。如果一个列没有值,应该使用NULL值(假定表允许对该列指定空值)。各个列必须以它们在表定义中出现次序填充。

    虽然这种语法简单但是不安全。上面的SQL语句高度依赖于表中列的定义次序,并且还依赖于其次序容易获得的信息。即使可得到这种次序信息,也不能保证下次表结构变动后各个列保持完全相同的次序。因此,编写依赖于特定列次序的SQL语句是很不安全的。
    编写INSERT语句的更安全(不过更繁琐)的方法如下:

    INSERT INTO customers(cust_name,
    cust_contact,
    cust_email,
    cust_address,
    cust_city,
    cust_state,
    cust_zip,
    cust_country)
     VALUES(
    'Pep E.LaPew',
    NULL,
    NULL,
    '100 Main Street',
    'Los Angeles',
    'CA',
    '90046',
    'USA');
    

    不管使用哪种INSERT语法,都必须给出VALUES的正确数目。如果不提供列名,则必须给每个表列提供一个值。如果提供列名,则必须对每个列出的列给出一个值。如果不这样,将产生一条错误消息,相应的行插入不成功。

    二、插入多个行

    INSERT可以插入一行到一个表中,但如果插入多行,可以使用多条INSERT语句,甚至一次提交它们,每条语句用一个分号结束,如下所示:

    INSERT INTO customers(cust_name,
    cust_address,
    cust_city,
    cust_state,
    cust_zip,
    cust_country)
     VALUES(
    'Pep E.LaPew',
    '100 Main Street',
    'Los Angeles',
    'CA',
    '90046',
    'USA');
    INSERT INTO customers(cust_name,
    cust_address,
    cust_city,
    cust_state,
    cust_zip,
    cust_country)
     VALUES(
    'M.Martian',
    '42 Galaxy Way',
    'New York',
    'NY',
    '11213',
    'USA');
    

    或者,只要每条INSERT语句中的列名(和次序)相同,可以如下组合各语句:

    INSERT INTO customers(cust_name,
    cust_address,
    cust_city,
    cust_state,
    cust_zip,
    cust_country)
     VALUES(
    'Pep E.LaPew',
    '100 Main Street',
    'Los Angeles',
    'CA',
    '90046',
    'USA'),
    (
    'M.Martian',
    '42 Galaxy Way',
    'New York',
    'NY',
    '11213',
    'USA');
    

    此语句的输出如下图所示:

    三、插入检索出的数据

    INSERT一般用来给表插入一个指定列值的行。但是,INSERT还存在另一种形式,可以利用它将一条SELECT语句的结果插入表中,这就是INSERT SELECT。

    下边的例子把一个名为custnew的表中的数据导入customers表中。为了试验这个例子,首先应该创建和填充custnew表。custnew表的结构与customers表的相同。在填充custnew时,不应该使用已经在customers中使用过的cust_id值(如果主键值重复,后续的INSERT操作将会失败)。

    INSERT INTO customers(cust_id,
    cust_contact,
    cust_email,
    cust_name,
    cust_address,
    cust_city,
    cust_state,
    cust_zip,
    cust_country)
    SELECT cust_id,
    cust_contact,
    cust_email,
    cust_name,
    cust_address,
    cust_city,
    cust_state,
    cust_zip,
    cust_country
    FROM custnew;
    

    这个例子在INSERT和SELECT语句中使用了相同的列名。但是,不一定要求列名匹配。事实上,MySQL甚至不关心SELECT返回的列名。它使用的是列的位置。INSERT SELECT中SELECT语句可包含WHERE子句以过滤插入的数据。

    相关文章

      网友评论

          本文标题:MySQL——插入数据(十二)

          本文链接:https://www.haomeiwen.com/subject/fjcaqxtx.html