1. 程式人生 > >mysql 語法

mysql 語法

直接 fill unsigned ... AD 個數 tab 這樣的 逗號

1 連接數據庫

語法:

mysql [-h ip][-P port] -uname -p

  

-h參數表示 主機ip,-P表示主機端口,默認端口為3306。註意P是大寫的,否則和密碼的p混淆。

另外mysql允許在連接階段指定連接以後選中的數據庫。

因為命令行中,都是一個選項後面才能跟一個值,如果單獨出現一個值,那麽mysql會將他解析為數據庫名,在連接以後直接選中數據庫。

-p 密碼選項的值比較特殊,只能緊跟選項不能有空格,因為-p選項的值默認是忽略的避免密碼被別人看到。因此如果在-p 後面加了空格跟上密碼,密碼會被解析為一個數據庫名。

技術分享圖片

2 庫操作

show databases;     -- 查看服務器總所有的數據庫名
use db_name;        --選中名為db_name的庫進行操作

select database();  --顯示當前選中的數據庫

  

顯示當前選中的數據庫操作,使用了select的原因在於,database()是一個函數,而函數的返回值並不能直接顯示在終端中,因此,需要select命令來顯示它。

技術分享圖片

--創建數據庫
create DATABASE [IF NOT EXISTS] db_name 
[[DEFAULT] CHARACTER SET latin1 COLLATE latin1_swedish_ci]; 

  

  

如果存在數據庫,並且沒有指定IF NOT EXISTS,則會出現錯誤。

後面的CHARACTER SET子句用於指定默認的數據庫字符集。COLLATE子句用於指定默認的數據庫整序

技術分享圖片

因為當數據庫剛剛被創建時,在數據庫中沒有表,所以CREATE DATABASE只創建一個目錄(文件夾)。這個目錄位於MySQL數據目錄和db.opt文件之下。

如果手動在數據目錄之下創建一個目錄(例如,使用mkdir),則服務器會認為這是一個數據庫目錄,並在SHOW DATABASES的輸出中顯示出來。

--刪除數據庫
drop database [if exists] db_name;

  

該語句用於刪除數據庫,同時也刪除了數據庫中的所用表。對一個帶有符號鏈接的數據庫使用DROP DATABASE,則鏈接和原數據庫都被取消。就如同上面講的數據庫本身就是個文件夾。

DROP DATABASE會返回已被取消的表的數目。此數目相當於被取消的.frm文件的數目。

技術分享圖片

--更改數據庫
alter database db_name  character set utf8 
[COLLATE collation_name];

  

技術分享圖片

因為在創建數據的時候,選項就只有兩個,因此能夠修改的也比較少。只有兩個

3 表操作

--創建表
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tb_name
(
    col_name col_type [col_op] 
   -- 多個,使用逗號分割。
)[table_op];
-- 復制表結構
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tb_name
[(]
LIKE old_tb_name
[)][table_op];

  

col_op 部分可選的有:
  • NOT NULL 表示該字段不能為空
  • DEFAULT value 表示默認的時候可以為這個值
  • AUTO_INCREMENT 表示當該字段沒有設置值的時候,自動增加
  • COMMENT ‘value‘ 當前字段的說明
  • PRIMARY [KEY] 主鍵約束,該字段,不能為空,且數據唯一,一個表中只能有一個
  • UNIQUE [KEY] 唯一約束,該字段,可以為空,但是數據唯一,一個表中可多次存在

一個整數列可以擁有一個附加屬性AUTO_INCREMENT。當您向一個已編入索引的AUTO_INCREMENT列中插入一個NULL值(建議)或0時,此列被設置為下一個序列的值。通常情況下為value+1,此處value是當前在表中的列的最大值。AUTO_INCREMENT序列從1開始。這樣的列必須被定義為一種整數類型。每個表只有一個AUTO_INCREMENT列,此列必須編制索引,不能有DEFAULT值。一個AUTO_INCREMENT列只有在只包含正數的情況下,才能運行正常。插入一個負數會被認為是插入了一個非常大的正數。這樣做是為了避免當數字由正數轉為負數時出現精度問題,同時也為了確保AUTO_INCREMENT列中不會包含0。

DEFAULT子句用於為列指定一個默認值。默認值必須為一個常數,不能為一個函數或一個表達式,有一種情況例外。例如,一個日期列的默認值不能被設置為一個函數,如NOW()或CURRENT_DATE。不過,有一種例外,您可以對TIMESTAMP列指定CURRENT_TIMESTAMP為默認值。BLOB和TEXT列不能被賦予默認值。

字段類型可選

-- length 實現顯示寬度,也就是說在輸出到終端上時候
-- 字符有多少位,但其實並不影響精度
-- ZEROFILL 是在原有數據不夠寬度的時候補0
TINYINT[(length)] [UNSIGNED] [ZEROFILL]
SMALLINT[(length)] [UNSIGNED] [ZEROFILL]
MEDIUMINT[(length)] [UNSIGNED] [ZEROFILL]
INT[(length)] [UNSIGNED] [ZEROFILL]
INTEGER[(length)] [UNSIGNED] [ZEROFILL]
BIGINT[(length)] [UNSIGNED] [ZEROFILL]
REAL[(length,decimals)] [UNSIGNED] [ZEROFILL]
DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL]
FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL]
DECIMAL(length,decimals) [UNSIGNED] [ZEROFILL]
NUMERIC(length,decimals) [UNSIGNED] [ZEROFILL]

DATE
TIME
TIMESTAMP
DATETIME

-- length 是字符的個數,最大能存儲的字符個數
-- char,varchar 默認使用utf8存儲,存儲的是字符的個數
-- 而不是二進制
CHAR(length) [CHARACTER SET name]
VARCHAR(length) [CHARACTER SET name]
BINARY(length) 
VARBINARY(length) 

TINYBLOB
BLOB
MEDIUMBLOB
LONGBLOB
TINYTEXT [BINARY]
TEXT [BINARY]
MEDIUMTEXT [BINARY]
LONGTEXT [BINARY]

ENUM(value1,value2,value3,...)
SET(value1,value2,value3,...)

  character set可以簡寫為char setcharset

表選項可選

ENGINE = engine_name AUTO_INCREMENT = value 還有很多,暫時列這兩個。 例如
CREATE TABLE user 
(
    id INT PRIMARY KEY AUTO_INCREMENT,
    name  BINARY(10) UNIQUE DEFAULT "new_user"
)CHARACTER SET utf8 AUTO_INCREMENT=10 ENGINE=innodb;

  

技術分享圖片

然後查看mysql的目錄

技術分享圖片

多了兩個文件

刪除表

-- 刪除表
DROP TABLE [IF EXISTS] tb_name;

  

技術分享圖片

技術分享圖片

更改表結構

-- 更改表結構
ALTER [IGNORE] TABLE tb_name alter_context;

  

ALTER TABLE 是一個復雜的命令

ADD old_col col_define 改變結構 ADD index index_name col_name 增加索引 用來增加一個列,或是增加索引 CHANGE old_col new_col_name_and_define 改名並改變結構
DROP col_name 刪除列 DROP PRIMARY KEY 刪除主鍵 DROP INDEX index_name 刪除索引 RENAME new_tb_name 更改表名

數據操作

插入數據

-- 插入記錄
INSERT tb_name [(col_1,...)] --這裏列的順序要和下面值的順序對應,可省略,默認全部
VALUES (...)[,(...)]; --後面可以跟多份

  

技術分享圖片

-- 復制表
-- 首先使用 創建一樣的表結構,使用LIKE 然後
INSERT tb_name select * from old_tb;

  

  

mysql 語法