天天看點

MySQL學習筆記 資料類型與操作資料表

1.資料類型    

    【1】整型:

資料類型

存儲範圍

位元組

TINYINT

有符号型:-128~127(-2^7~2^7 -1),無符号型0~255(0~2^8 -1)

1

SMALLINT

有符号型:-2^15~2^15 -1,無符号型0~2^16 -1

2

MEDIUMINT

有符号型:-2^23~2^23 -1,無符号型0~2^24 -1

3

INT

有符号型:-2^31~2^31 -1,無符号型0~2^32 -1

4

BIGINT

有符号型:-2^63~2^63 -1,無符号型0~2^64 -1

8

    【2】浮點型

FLOAT[(M,D)]

-3.402823466E+38~-1.175494351E-38、0和 1.175494351E-38 ~3.402823466E+38

DOUBLE[(M,D)]

2.2250738585072014E-308~ 1.7976931348623157E+308

【注】M是數字總位數,D是小數點後面的位數。如果M和D被省略,根據硬體允許的限制來保值。單精度浮點數值精确到大約7位小數位。E+38 表示10^38    

    【3】日期時間型

列類型

YEAR

YEAR[(2|4)] 預設為4位格式,4位格式取值範圍為1901 - 2155,

TIME

-838:59:59~838:59:59

DATE

1000-1-1~9999-12-31

DATETIME

日期時間, 1000-1-1 00:00:00~9999-12-31 23:59:59

TIMESTAMP

時間戳,1970-1-1 00:00~2037年的某個時刻

【注】實際開發中“日期時間型”用得比較少,因為考慮到跨時區的問題,一般會用數字類型取代

MySQL本身Y2K安全的,但是呈交給MySQL的輸入值可能不是。一個包含2位年份值的任何輸入是由二義性的,因為世紀是未知的。這樣的值必須被解釋成4位形式,因為MySQL内部使用4位存儲年份。

對于DATETIME, DATE, TIMESTAMP和YEAR類型,MySQL使用下列規則的解釋二義性的年份值:

-在範圍00-69的年值被變換到2000-2069。

-在範圍70-99的年值被變換到1970-1999。

記得這些規則僅僅提供對于你資料的含義的合理猜測。如果MySQL使用的啟發規則不産生正确的值,你應該提供無二義的包含4位年值的輸入。

    【4】字元型

存儲需求

CHAR(M)

(定長,不足用空格自動補全)M個位元組,0<=M<=255

VARCHAR(M)

(變長,輸入多少就是多少)L+1個位元組,其中L<=M,0<=M<=65535

TINYTEXT

L+1個位元組,其中L<2^8 (1個位元組表示最大存儲範圍,下同)

TEXT

L+2個位元組,其中L<2^16

MEDIUMTEXT

L+3個位元組,其中L<2^24

LONGTEXT

L+4個位元組,其中L<2^32

ENUM('value1','value2',…)

(最終選擇其中的一個value)1或2個位元組,取決于枚舉值的個數(最多65535個)

SET ('value1','value2',…)

(集合,可在其中做任意的排列組合)1、2、3、4或者8個位元組,取決于set成員的

CHAR(M) :定長類型,定義資料為5個位元組,當需要存儲abc3個位元組的時候,會以2個空格的形式補滿5個位元組。

VARCHAR(M) :變長類型,輸入abc3個位元組就存儲3個位元組,不會存儲多餘的資料。

2.資料表操作

    【1】概述

資料表(或稱表)是資料庫最重要的組成部分之一,是其他對象的基礎。

    【2】指令

  USE  打開資料庫:

<code>mysql&gt; USE &lt;資料庫名稱&gt;;</code>

顯示目前使用者所打開的資料庫:

<code>mysql&gt; SELETE DATABASES;</code>

建立資料庫表

<code>CREATE TABLE [IF NOT EXISTS] table_name (column_name列名稱 data_type資料類型,....)</code>

<code>例:建立資料庫表:列名稱為username和age和salary</code>

<code>mysql&gt; USE t1;</code>

<code>mysql&gt; CREATE TABLE IF NOT EXISTS t1(</code>

<code>    </code><code>-&gt; username VARCHAR(20),</code>

<code>    </code><code>-&gt; age TINYINT UNSIGNED,</code>

<code>    </code><code>-&gt; salary FLOAT(8,2) UNSIGNED</code>

<code>    </code><code>-&gt; );</code>

檢視資料表清單

<code>mysql&gt; SHOW TABLES;</code>

檢視其他資料庫的資料表清單,例檢視mysql資料庫

<code>mysql&gt; SHOW TABLES FROM mysql;</code>

檢視資料表的結構

 3.MySQL記錄的插入與查找

    記錄插入:

<code>INSERT [INTO] tbl_name [(col_name,...0] VALUES (val,...)</code>

    例:

<code>mysql&gt; INSERT t1 VALUES(</code><code>'Tom'</code><code>,25,7863.25);</code>

    記錄查找:

<code>SELECT </code><code>expr</code><code>,... FROM tbl_name</code>

            例:

<code>SELECT * FROM t1;</code>

4.MySQL空值與非空

*** NULL ,字段值可以為空

*** NOT NULL ,字段值禁止為空

<code>mysql&gt; USE t2;</code>

<code>mysql&gt; CREATE TABLE IF NOT EXISTS tb2(</code>

<code>    </code><code>-&gt; username VARCHAR(20) NOT NULL,</code>

<code>    </code><code>-&gt; age TINYINT UNSIGNED NULL,</code>

5.MySQL主鍵限制

*** 主鍵限制

*** 每張資料表隻能存在一個主鍵

*** 主鍵保證記錄的唯一性

*** 主鍵自動為NOT NULL

6.MySQL自動編号 AUTO_INCREMENT

*** 自動編号,且必須與主鍵組合使用

*** 預設情況下,起始值為1,每次的增量為1

    例,建立自動編号表:

<code>mysql&gt; CREATE TABLE tb3(</code>

<code>    </code><code>-&gt; </code><code>id</code> <code>SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,</code>

<code>    </code><code>-&gt; username VARCHAR(30) NOT NULL</code>

<code>mysql&gt; SHOW COLUMNS FROM tb3;</code>

<code>+----------+----------------------+------+-----+---------+----------------+</code>

<code>| Field    | Type                 | Null | Key | Default | Extra          |</code>

<code>| </code><code>id</code>       <code>| smallint(5) unsigned | NO   | PRI | NULL    | auto_increment |</code>

<code>| username | varchar(30)          | NO   |     | NULL    |                |</code>

    例,插入記錄,檢視表:

<code>mysql&gt; INSERT tb3(username) VALUES(</code><code>'Tom'</code><code>)</code>

<code>mysql&gt; INSERT tb3(username) VALUES(</code><code>'John'</code><code>)</code>

<code>mysql&gt; INSERT tb3(username) VALUES(</code><code>'Rose'</code><code>)</code>

<code>mysql&gt; INSERT tb3(username) VALUES(</code><code>'Dimitar'</code><code>)</code>

<code>mysql&gt; SELECT * FROM tb3;</code>

<code>+----+----------+</code>

<code>| </code><code>id</code> <code>| username |</code>

<code>|  1 | Tom      |</code>

<code>|  2 | John     |</code>

<code>|  3 | Rose     |</code>

<code>|  4 | Dimitar  |</code>

  7.MySQL唯一限制 UNIQUE KEY

*** 唯一限制

*** 唯一限制可以保證記錄的唯一性

*** 唯一限制的字段可以為空值(NULL)

*** 每張資料表可以存在多個唯一限制

建立資料表tb4:

<code>mysql&gt; CREATE TABLE tb4(</code>

<code>    </code><code>-&gt; </code><code>id</code> <code>SMALLINT AUTO_INCREMENT PRIMARY KEY, </code>

<code>    </code><code>-&gt; username VARCHAR(20) NOT NULL UNIQUE KEY, </code>

<code>    </code><code>-&gt; age TINYINT UNSIGNED</code>

<code>    </code> 

<code>mysql&gt; SHOW COLUMNS FROM tb4;</code>

<code>+----------+---------------------+------+-----+---------+----------------+</code>

<code>| Field    | Type                | Null | Key | Default | Extra          |</code>

<code>| </code><code>id</code>       <code>| smallint(6)         | NO   | PRI | NULL    | auto_increment |</code>

<code>| username | varchar(20)         | NO   | UNI | NULL    |                |</code>

<code>| age      | tinyint(3) unsigned | YES  |     | NULL    |                |</code>

插入記錄:

<code>mysql&gt; INSERT tb4(username,age) VALUES(</code><code>'Tom'</code><code>,25);</code>

<code>Query OK, 1 row affected (0.00 sec)</code>

再插入一條username同時‘Tom'的記錄,提示重複:

<code>mysql&gt; INSERT tb4(username,age) VALUES(</code><code>'Tom'</code><code>,23);</code>

<code>ERROR 1062 (23000): Duplicate entry </code><code>'Tom'</code> <code>for</code> <code>key </code><code>'username'</code>

8.MySQL預設限制

*** 預設值

*** 當插入記錄時,如果沒有明确為字段指派,則自動賦予預設值

建立資料表tb6,設定sex列的預設值為3:

<code>mysql&gt; CREATE TABLE tb6(</code>

<code>    </code><code>-&gt; username VARCHAR(20) NOT NULL UNIQUE KEY,</code>

<code>    </code><code>-&gt; sex ENUM(</code><code>'1'</code><code>,</code><code>'2'</code><code>,</code><code>'3'</code><code>) DEFAULT </code><code>'3'</code>

<code>mysql&gt; SHOW COLUMNS FROM tb6;</code>

<code>| username | varchar(20)          | NO   | UNI | NULL    |                |</code>

<code>| sex      | enum(</code><code>'1'</code><code>,</code><code>'2'</code><code>,</code><code>'3'</code><code>)    | YES  |     | 3       |                |</code>

插入記錄,不給sex指派:

<code>mysql&gt; INSERT tb6(username) VALUES(</code><code>'Tom'</code><code>);</code>

<code>mysql&gt; INSERT tb6(username) VALUES(</code><code>'John'</code><code>);</code>

<code>mysql&gt; INSERT tb6(username) VALUES(</code><code>'Mimiter'</code><code>);</code>

檢視資料表,sex自動為預設值3:

<code>mysql&gt; SELECT * FROM tb6;                     </code>

<code>+----+----------+------+</code>

<code>| </code><code>id</code> <code>| username | sex  |</code>

<code>|  1 | Tom      | 3    |</code>

<code>|  2 | John     | 3    |</code>

<code>|  3 | Mimiter  | 3    |</code>

      本文轉自謝育政 51CTO部落格,原文連結:http://blog.51cto.com/kurolz/1876234,如需轉載請自行聯系原作者