mysql學習筆記-1

relsoul發表於2016-06-26

MYSQL規範

  1. 關鍵字與函式名稱全部大寫
  2. 資料庫名稱,表名稱,欄位名稱全部小寫
  3. SQL語句必須以分號結尾

連線資料庫

musql -u user -p userpassword [-P port -H serverLocation]

建立資料庫

在mysql中DATABASE與SCHEMA是一樣的 CREATE {DATABASE|SCHEMA} [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET [=] charset_name 語法說明:花括號代表必須要有的 豎線代表選項(or) 中括號為可選項. CREATE DATABASE t1; //建立一個t1的資料庫 如果當資料庫存在的話再次新增相同的資料庫將會報錯.但是加上IF NOT EXISTS將會遮蔽掉這個錯誤資訊 CREATE DATABASE IF NOT EXISTS t1;

建立一個utf8編碼的資料庫

CREATE DATABASE study CHARACTER SET utf8;

檢視當前伺服器下資料庫

SHOW {DATABASES|SCHEMAS} [LIKE "pattern" | WHERE expr]

檢視警告資訊

SHOW WARNINGS;

檢視資料庫編碼

SHOW CREATE DATABASE db_name;

修改資料庫

ALTER {DATABASE|SCHEMA} [db_name] [DEFAULT] CHARACTER SET [=] charset_name

修改資料庫為gbk編碼

ALTER DATABASE study CHARACTER SET = gbk;

刪除一個資料庫

DROP {DATABASE | SCHEMA} [IF EXISTS] db_name;

資料型別

它決定了資料的儲存格式,代表了不同的資訊型別.

整型

TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT 分別是儲存的資料長度不同.一般用INT即可.

浮點型

FLOAT[(M,D)] M是數字總位數,D是小數點後面的位數,如果M與D被省略,根據硬體允許的限制允許儲存精度浮點數精確到大約7位小數位

DOUBLE[(M,D)]


FLOAT[(7,2)] 小數點之前的數字+小數點之後的數字總數為7為

時間型別

YEAR 年

TIME 時間型別 範圍是’-838:59:59’到’838:59:59’。

DATE(日期型別) 年月日

DATETIME(日期時間型別) 年月日時分秒

TIMESTAMP(時間戳)


真正時間型別會採用數字型別來儲存,利用時間戳的形式 這樣做的目的是為了考慮跨時區問題

字元型

CHAR(定長型別) 0~255 如果字元設定為4,如果字元達不到4,後面以空格來補齊.

VARCHAR(變長) 不會自動補齊

TINYTEXT 2^8

TEXT 2^16

MEDIUMTEXT 2^24

LONGTEXT 2^32

ENUM("value1","value2") 列舉值(選項值) 比如性別 男,女,保密

SET("value1","value2") 1,2,3,4,8 取決於set成員數目 最多64個成員

資料表的操作

USE

開啟資料庫 USE db_name;

顯示當前使用者開啟的資料庫

SELECT DATABASE();

建立資料表

``` CREATE TABLE [IF ONT EXISTS] table_name( column_name data_type, )

```


mysql> CREATE TABLE tb1( -> username VARCHAR(20), -> age TINYINT UNSIGNED, -> salary FLOAT(8,2) UNSIGNED -> );

UNSIGNED(無符號位 從0開始)

檢視資料表

SHOW TABLES [FROM db_name] [LIKE "pattern" | WHERE expr ]

檢視資料表結構

SHOW COLUMNS FROM tbl_name

SHOW COLUMNS FROM tb1;

記錄插入與查詢

INSERT [INTO] tbl_name [(col_name,...)] VALUES(val,...) 省略掉列名稱則為所有的欄位賦值

INSERT tb1 VALUES("Tom",25,7865.32); 如果少寫了一個列值 則會出現 Column count doesnt value count at row 1 列不匹配

為某個列賦值

INSERT tb1(username,salary) VALUES ("John",4500.69);

記錄查詢

SELECT expr,...FROM tbl_name

列出資料表中全部欄位

SELECT * FROM tb1; *指的是欄位過濾而不是記錄過濾.

空值與非空

NULL,欄位值可以為空 NOT NULL ,欄位值禁止為空

CREATE TABLE tb2( username VARCHAR(20) NOT NULL, age TINYINT UNSIGNED NULL );

INSERT tb2 VALUES(NULL,25); 這段程式碼是錯誤的.會報錯 Column username cannot be null;

自動編號

AUTO_INCREMENT 自動編號,且必須與主鍵組合使用 預設情況下,起始值為1,每次的增量為1

欄位必須為數值型.FLOAT小數位數必須為0

主鍵自動編號

CREATE TABLE tb3( id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, username VARCHAR(30) NOT NULL );

初涉主鍵約束

PRIMARY KEY 主鍵約束 每張資料表只能存在一個主鍵 主鍵保證記錄的唯一性 主鍵自動為NOT NULL

主鍵可以不必與AUTO_INCREMENT一起使用

定義主鍵自動編號

CREATE TABLE tb3( id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, username VARCHAR(30) NOT NULL ); 只需要加一個PRIMARY KEY.

新增資料

INSERT tb3(username) VALUES("Tom"); INSERT tb3(username) VALUES("John"); INSERT tb3(username) VALUES("Rose"); INSERT tb3(username) VALUES("Soul"); 因為設定了主鍵,這樣得使用欄位對應新增

主鍵不與AUTO_INCREMENT使用

CREATE TABLE tb4( id SMALLINT PRIMARY KEY, username VARCHAR(20) NOT NULL ); 主鍵的欄位可以賦值,但是不允許存在兩個相同的值

涉及唯一約束

UNIQUE KEY 唯一約束可以保證記錄的唯一性 唯一約束的欄位可以為空值(NULL) 每張資料表可以存在多個唯一的約束

索引的原理,全NULL值不被記錄在索引上 也就是這個欄位中的不能存在相同的記錄,但是可以存在相同的NULL值

建立主鍵與唯一約束的表

CREATE TABLE tb5( id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, username VARCHAR(20) NOT NULL UNIQUE KEY, age TINYINT UNSIGNED );

寫幾條記錄 INSERT tb5(username,age) VALUES('Tom',22); INSERT tb5(username,age) VALUES('Tom',25); 第二條語句只會報錯

預設約束

DEFAULT 當插入記錄時,如果沒有明確為欄位賦值,則自動賦予預設值

預設性別是保密

``` CREATE TABLE tb6( id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, username VARCHAR(20) NOT NULL UNIQUE KEY, sex ENUM("1","2","3") DEFAULT "3" );

INSERT tb6(username) VALUES("TOM") ```

總結

  • 建立資料庫
  • 建立表
  • 建立欄位
  • 建立記錄
  • 設定欄位選項
  • 檢視錶,欄位,記錄
  • 主鍵與約束

相關文章