九、增、改、查数据

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;
原文地址:https://www.cnblogs.com/love-jelly-pig/p/10364613.html