9、增、改、查數據

1. 插入記錄。

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

像這種插入方式,意在給每一行的全部字段都插入一個值。可是在表的結構改變的時候,這種方式就起不到效果了。因此咱們最好仍是指定字段名字的形式插入數據。mysql

(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);

咱們在表名的後面加一個括號指定了字段名,不管表結構是否改變,均可以插入。sql

注意點:數據庫

  • 自動增量值咱們若是不想指定,能夠用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表指定的字段中去。code

注意:blog

  • 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;
相關文章
相關標籤/搜索