MySQL總結(4)

insert

數據的插入mysql

INSERT插入數據sql

😀 插入完整的行; 😀 插入行的一部分; 😀 插入多行; 😀 插入某些查詢的結果。數據庫

INSERT into Customers
values(NULL,
'Pep E. LaPew',
      '100 Main Street'
      'Los Angeles'
      'CA'
      '90046'
      'USA'
      NULL,
      NULL)
INSERT LOW_PRIORITY INTO Customers(#priority 下降優先級
cust_name.
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)

插入多條行函數

INSERT LOW_PRIORITY INTO Customers(#priority 下降優先級
cust_name.
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),
      (
      'Pep E. LaPew',
      '100 Main Street'
      'Los Angeles'
      'CA'
      '90046'
      'USA'
      NULL,
      NULL
      )

INSERT SELECT工具

這個例子把一個名爲 custnew 的表中的數據導入 customers 表中。爲了試驗這個例子,應該首先建立和填充 custnew 表custnew 表的結構與附錄B中描述的 customers表的相同。在填充 custnew 時,不該該使用已經在 customers中使用過的cust_id 值(若是主鍵值重複,後續的 INSERT 操做將會失敗)或僅省略這列值讓MySQL在導入數據的過程當中產生新值。性能

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 中的列名 爲簡單起見,這個例子在 INSERT 和SELECT 語句中使用了相同的列名。可是,不必定要求列名匹配。事實上,MySQL甚至不關心 SELECT 返回的列名。它使用的是列的位置,所以 SELECT 中的第一列(無論其列名)將用來填充表列中指定的第一個列,第二列將用來填充表列中指定的第二個列,如此等等。這對於從使用不一樣列名的表中導入數據是很是有用的。測試

更新和刪除數據

更新數據 UPDATE

😋 更新表中特定行; 😋 更新表中全部行。spa

the first examplecode

UPDATE IGNORE customers # ignore 忽略錯誤 繼續更新
SET cust_email = NULL,
	cust_name = 'The Fudds'
WHERE cust_id = 10005; # 注意不要忘了where 不然可能更新所有

刪除數據 DELETE

DELETE FROM customers
WHERE cust_id = 10006;

DELETE 不須要列名或通配符。 DELETE 刪除整行而不是刪除列。爲了刪除指定的列,請使用 UPDATE 語句。事務

刪除表的內容而不是表 DELETE 語句從表中刪除行,甚至是刪除表中全部行。可是, DELETE 不刪除表自己。

更快的刪除 若是想從表中刪除全部行,不要使用DELETE 。可以使用 TRUNCATE TABLE 語句,它完成相同的工做,但速度更快( TRUNCATE 實際是刪除原來的表並從新建立一個表,而不是逐行刪除表中的數據)。truncate table

😘 除非確實打算更新和刪除每一行,不然絕對不要使用不帶 WHERE 子句的 UPDATE 或 DELETE 語句。 😘 保證每一個表都有主鍵(若是忘記這個內容,請參閱第15章),儘量 像 WHERE 子句那樣使用它(能夠指定各主鍵、多個值或值的範圍)。 😘 在對 UPDATE 或 DELETE 語句使用 WHERE 子句前,應該先用 SELECT 進行測試,保證它過濾的是正確的記錄,以防編寫的 WHERE 子句不正確。 😘 使用強制實施引用完整性的數據庫(關於這個內容,請參閱第15 章),這樣MySQL將不容許刪除具備與其餘表相關聯的數據的行。

建立和操縱表

爲了用程序建立表,可以使用SQL的 CREATE TABLE 語句。值得注意的 是,在使用交互式工具時,實際上使用的是MySQL語句。可是,這些語 句不是用戶編寫的,界面工具會自動生成並執行相應的MySQL語句(更 改現有表時也是這樣)。

create table

CREATE TABLE customers IF NOT EXISTS 
#if not exists不存在的時候建立該表
(
	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) #primary key 主鍵
)ENGINE=InnoDB;
# auto_increment

肯定 AUTO_INCREMENT 值 讓MySQL生成(經過自動增量)主 鍵的一個缺點是你不知道這些值都是誰。 考慮這個場景:你正在增長一個新訂單。這要求在 orders 表中建立一行,而後在 orderitms 表中對訂購的每項物品建立一行。order_num 在 orderitems 表中與訂單細節一塊兒存儲。這就是爲何 orders 表和 orderitems 表爲相互關聯的表的緣由。這顯然要求你在插入 orders 行以後,插入 orderitems 行以前知道生成的 order_num 。那麼,如何在使用AUTO_INCREMENT 列時得到這個值呢?可以使用 last_insert_id() 函數得到這個值,以下所示: SELECT last_insert_id() 此語句返回最後一個 AUTO_INCREMENT 值,而後能夠將它用於 後續的MySQL語句。

指定默認值

CREATE TABLE orderitems
(
	order_num	int			 NOT NULL,
    order_item	int 		 NOT NULL,
    prod_id		char(10)	 NOT NULL,
    quantity	int 		 NOT NULL DEFAULT 1,#default
    item_price	decimal(8,2) NOT NULL,
    PRIMARY KEY (order_num,order_item)
)	ENGINE=InnoDB; #選擇引擎 engine =

😄 InnoDB 是一個可靠的事務處理引擎(參見第26章),它不支持全文本搜索; 😄 MEMORY 在功能等同於 MyISAM ,但因爲數據存儲在內存(不是磁盤)中,速度很快(特別適合於臨時表); 😄 MyISAM 是一個性能極高的引擎,它支持全文本搜索(參見第18章),但不支持事務處理。

更新表

ALTER TABLE

ALTER TABLE vendors #alter table
ADD vend_phone CHAR(20);
ALTER TABLE vendors
DROP COLUMN vend_phone; # drop column

定義外鍵

ALTER TABLE orderitems
ADD CONSTRAINT fk_orderitems_orders
FOREING KEY (order_num) REFERENCES orders (order_num);
#add constraint 約束 foreing 外來物 refernces 參考文獻
ALTER TABLE orderitems
ADD CONSTRAINT fk_orderitems_products
FOREING KEY (order_id) REFERENCES orders (order_id);

ALTER TABLE orders
ADD CONSTRAINT fk_orderitems_customers
FOREING KEY (order_id) REFERENCES orders (order_id);

ALTER TABLE products
ADD CONSTRAINT fk_orderitems_vendors
FOREING KEY (order_id) REFERENCES orders (order_id);

刪除表

DROP TABLE customers2;

重命名錶

RENAME TABLE customers2 TO customers;
相關文章
相關標籤/搜索