MySQL必知必會—概念篇mysql
MySQL必知必會—檢索數據篇github
利用 CREATE TABLE 建立表,必須緊跟着給出新表的名字,而後是表列的名字和定義,用逗號分隔。安全
NULL 值就是沒有值或缺值。容許 NULL 值的列也容許在插入行時不給出該列的值。 NOT NULL 即不容許 NULL 值的列不接受該列沒有值的行,在插入或更新行時,該列必須有值。NULL 是默認設置,若是不指定 NOT NULL,則認爲指定的是 NULL。服務器
主鍵必須是惟一的,即表中的每一個行必須具備惟一的主鍵值,若是主鍵使用單個列,則它的值必須惟一。若是使用多個列,則這些列的組合值必須惟一。函數
使用相似 PRIMARY KEY (id) 的語句來定義。爲建立由多個列組成的主鍵,應該以逗號分隔的列表給出各列名,例如 orderitems 表的建立用到的 PRIMARY KEY (order_num, order_item)post
主鍵能夠在建立表時定義,或者在建立表以後定義。性能
主鍵爲惟一標識表中每一個行的列,主鍵中只能使用不容許 NULL 值的列。
每次執行一個 INSERT 操做時, MySQL 自動對該列增量。
每一個表只能容許一個 AUTO_INCREMENT 列,並且它必須被索引(好比經過使用它成爲主鍵)
在執行 INSERT 時能夠給 AUTO_INCREMENT指定一個值,只要它是至今爲止惟一的就行,該值將被用來替代自動生成的值。後續的增量將開始使用該手工插入的值。
last_insert_id() 這個函數能返回最後一個 AUTO_INCREMENT 值
列定義中的 DEFAULT 關鍵字指定。 MySQL 跟大多數 DBMS 同樣, 不容許使用函數做爲默認值,它只支持常量。
大多數時候, CREATE TABLE 語句全都以 ENGINE=InnoDB 語句結束。MySQL具備多種引擎,這些打包的多個引擎都隱藏在 MySQL 的服務器內,全都能執行 CREATE TABLE 和 SELECT 等命令。這些引擎具備各自不一樣的功能和特性,爲不一樣的任務選擇正確的引擎能得到良好的功能和靈活性。
InnoDB 是一個可靠的事務處理引擎,它不支持全文本搜索。
MyISAM 是一個性能極高的引擎,它支持全文本搜索,但不支持事務處理
MEMORY 在功能等同於 MyISAM,但因爲數據存儲在內存(不是磁盤)中,速度很快(特別適合用於臨時表)
########################
# 看一下 customers 表的建立
########################
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;
複製代碼
爲了更新表定義,可以使用 ALTER TABLE 語句。
### vendors 表中增長 vend_phone 列
ALTER TABLE vendors ADD vend_phone CHAR(20);
### 刪除剛剛增長的 vend_phone 列
ALTER TABLE vendors DROP COLUMN vend_phone;
### ALTER TABLE 常見的用途就是定義外鍵
ALTER TABLE products ADD CONSTRAINT fk_products_vendors FOREIGN KEY (vend_id) REFERENCES vendors (vend_id)
複製代碼
DROP TABLE customers2;
複製代碼
### 重命名一個表
RENAME TABLE customers2 TO customers;
### 重命名多個表
RENAME TABLE backup_customers TO customers,backup_vendors TO vendors;
複製代碼
### 以下的語句中,對每一個列必須提供一個值,若是某個列沒有值,應該使用 NULL 值(假設表容許對該列指定空值)。每一個列必須按照順序給出,自動增量的值也不能忽略,並且若是不想賦值,就須要指定爲 NULL 。
INSERT INTO customers VALUES( NULL, 'Pep E. LaPew', '100 Main Street', 'Los Angeles', 'CA', '90046', 'USA', NULL, NULL);
複製代碼
上面的語法應該避免使用,由於不安全,建議用下面的語句,能夠不按照次序填充,只要保證 VALUES中的次序跟前面給出的列名次序一致就行。
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 語句,甚至一次提交它們,每條語句用一個分號結束。
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');
複製代碼
### 更新id是10009客戶名字的郵箱。
UPDATE customers SET cust_name = 'The Fudds', cust_email = 'elmer@fudd.com' WHERE cust_id = 10009;
### 爲了刪除某個列的值,可設置它爲 NULL(假定表定義爲容許 NULL 值)
UPDATE customers SET cust_email = NULL WHERE cust_id = 10009;
複製代碼
UPDATE IGNORE customers
### 刪除10011這一行
DELETE FROM customers WHERE cust_id = 10011;
複製代碼
一個持續更新的github筆記,連接地址:Front-End-Basics,能夠watch,也能夠star。
此篇文章的地址:MySql必知必會