• 九、增、改、查数据


    1. 插入记录。

    (1)不推荐的做法:不指定行。
    mysql> insert into customers
    -> values(NULL,
    -> 'Pep E.LaPew'
    -> ,'100 Main Street',
    -> 'Los Angeles',
    -> 'CA',
    -> '90046',
    -> 'USA',
    -> NULL,
    -> NULL);
    

    像这种插入方式,意在给每一行的所有字段都插入一个值。但是在表的结构改变的时候,这种方式就起不到效果了。所以我们最好还是指定字段名字的形式插入数据。

    (2) 推荐的做法:指定行。
    mysql> insert into customers(cust_name,
    -> cust_address,
    -> cust_city,
    -> cust_state,
    -> cust_zip,
    -> cust_country,
    -> cust_contact,
    -> cust_email)
    -> values('Pep E.LaPew',
    -> '100 Main Street',
    -> 'Los Angeles',
    -> 'CA',
    -> '90046',
    -> 'USA',
    -> NULL,
    -> NULL);
    

    我们在表名的后面加一个括号指定了字段名,无论表结构是否改变,都可以插入。

    注意点:

    • 自动增量值我们如果不想指定,可以用NULL代替,MySQL会忽略NULL值。
    • 推荐的做法中,可以有些字段不插入,但是这些字段必须允许为空值。
    • insert操作有可能很耗时,尤其是在更新数据索引的时候。
    • 如果数据检索是最重要的(通常是这样),则你可以通过在INSERT 和 INTO之间添加关键字LOW_PRIORITY,指示MySQL
      降低 INSERT 语句的优先级。让查询操作优先。
    (3) 插入多个行。


    如上图两个框中所示,用一个values,把要插入的数据分别用括号括起来,中间逗号隔开即可。

    此技术可以提高数据库处理的性能,因为MySQL用单条 INSERT 语句处理多个插入比使用多条 INSERT语句快。

    (4) 插入检索出的数据。

    我们可以把从一张表中检索出的数据直接插入到另一张表中,通过使用insert ... select语句。

    mysql> insert into customers(cust_id,
    -> cust_contact,
    -> cust_email,
    -> cust_name,
    -> cust_address,
    -> cust_city,
    -> cust_zip,
    -> cust_country)
    -> select cust_id,  //检索的数据
    -> cust_contact,
    -> cust_email,
    -> cust_name,
    -> cust_address,
    -> cust_city,
    -> cust_zip,
    -> cust_country from custnew;
    

    上述就是把select...from custnew中的数据检索出来,然后插入到customers表指定的字段中去。

    注意:

    • INSERT SELECT中的列名为简单起见,这个例子在INSERT和SELECT 语句中使用了相同的列名。但是,不一定要求列名匹配。
    • 可以使用where来过滤检索的数据。

    2. 修改操作。

    update关键字用于修改表中数据,分为三部分:

    • 更新的表名。
    • set 字段名=新值。
    • 过滤条件。

    如下:

    mysql> update customers 
    -> set cust_email = 'elmer@fudd.com'
    -> where cust_id = 10005;
    
    • 在更新多个列时,只需要使用单个SET命令,每个“列=值”对之间用逗号分隔(最后一列之后不用逗号)。

    • 如果用 UPDATE 语句更新多行,并且在更新这些
      行中的一行或多行时出一个现错误,则整个 UPDATE 操作被取消(错误发生前更新的所有行被恢复到它们原来的值)。为使是发生错误,也继续进行更新,可使用IGNORE关键字,如下所示:

      UPDATE IGNORE customers…

    3. 删除操作。

    更加简单:

    • delete 表明。

    • 过滤条件。
      如下:

      mysql> delete from customers
      -> where cust_id = 10006;

    • 如果不加过滤条件,那么删除的将是整个表中的记录!同样的更新操作也一样,不加过滤条件那么所有记录的该字段都将被更新!

    • 我们再进行更新和删除操作之前,应该先使用select语句,看过滤检索出来的数据是不是我们想要更新或者删除的记录,确保正确的值被更新。

    4. 创建表。

    (1) 创建表语法。

    格式为:

    create table 表名
    (字段名1 数据类型1 备注1
    字段名2 数据类型2 备注2...主键(字段名)
    )引擎=引擎名;

    例子:

    CREATE TABLE customers
    (
      cust_id      int       NOT NULL AUTO_INCREMENT,
      cust_name    char(50)  NOT NULL ,
      cust_address char(50)  NULL ,
      cust_city    char(50)  NULL ,
      cust_state   char(5)   NULL ,
      cust_zip     char(10)  NULL ,
      cust_country char(50)  NULL ,
      cust_contact char(50)  NULL ,
      cust_email   char(255) NULL ,
      PRIMARY KEY (cust_id)
    ) ENGINE=InnoDB;
    
    • 上述的备注指定字段值是否可以为空,或者指定类型,比如自动增量。
    • 字段名全都完毕之后可以指定主键:PRIMARY KEY(字段名)。
    • 创建的表表名必须不存在,否则会出错。 MySQL只允许手工删除已存在的表名后重建一个同名表,不能简单的就直接覆盖这个表,这样容易出错。可以使用 if not exists来检查表名是否存在。
      • if not exists只检查表名是否存在,不检查是否有相同的表模式已经存在(如字段值、类型等相同但是表名不同的表)。

    最后理解NULL的意思:
    不要把 NULL 值与空串相混淆。NULL值是没有值,它不是空串。如果指定''(两个单引号,其间没有字符),这在 NOT NULL 列中是允许的。空串是一个有效的值,它不是无值。NULL 值用关键字 NULL 而不是空串指定。

    (2) 指定默认值。
    CREATE TABLE orderitems
    (
      ...
      quantity   int          NOT NULL  DEFAULT 1,
      ...
    ) ENGINE=InnoDB;
    

    如上,我们可以指定默认值,当不给插入数据的时候不给quanlity指定值时,就用默认值1写入。

    不允许函数作为默认值。

    (3) 引擎小讲
    • InnoDB是一个可靠的事务处理引擎.
    • MEMORY在功能等同于MyISAM,但由于数据存储在内存(不是磁盘)中,速度很快(特别适合于临时表)。
    • MyISAM是一个性能极高的引擎,它支持全文本搜索,但不支持事务处理。

    5. 更新表

    理想状态下,当表中存储数据以后,该表就不应该再被更新。在表的设计过程中需要花费大量时间来考虑,以便后期不对该表进行大的改动。

    操作为:

    • ALT TABLE 表名
    • 更新操作。
    (1) 添加一个列。
    mysql> ALTER TABLE vendors  
    -> ADD vend_phone CHAR(20);
    

    这条语句给 vendors表增加一个名为vend_phone的列,必须明确其数据类型。

    (2) 删除一个列。
    mysql> ALTER TABLE vendors
    -> DROP COLUMN vend_phone;
    

    注意要使用DROP COLUMN关键词。

    (3) 删除表。
    drop table table_name;
    

    6. 重命名表。

    RENAME TABLE table_name1 TO table_name2;
  • 相关阅读:
    php 循环
    php 函数
    bzoj4541 [Hnoi2016]矿区
    bzoj4836 [Lydsy2017年4月月赛]二元运算
    bzoj4555 [Tjoi2016&Heoi2016]求和
    COGS2287 [HZOI 2015]疯狂的机器人
    bzoj3142 [Hnoi2013]数列
    bzoj4318 OSU!
    bzoj4247 挂饰
    bzoj2756 [SCOI2012]奇怪的游戏
  • 原文地址:https://www.cnblogs.com/love-jelly-pig/p/10364613.html
Copyright © 2020-2023  润新知