1. 程式人生 > >(七)MySQL基礎——庫和表的管理、常見的資料型別、約束

(七)MySQL基礎——庫和表的管理、常見的資料型別、約束

DDL(資料定義語言):包括庫和表的管理

一、庫的管理

1、庫的建立

語法:CREATE DATABASE IF NOT EXISTS 庫名;

2、庫的修改

語法:RENAME DATABASE 舊庫名 TO 新庫名;(版本更新後不使用了,會影響庫內資料)

一般去外部檔案中去修改庫名,先停止服務,修改庫名之後再更新開啟服務。

更改庫的字符集:ALTER  DATABASE  庫名  CHARACTER  SET  gbk;

3、庫的刪除

語法:DROP  DATABASE  IF  EXISTS  庫名;

二、表的管理

1、表的建立

語法:CREATE TABLE    IF  NOT  EXISTS   表名(  列名 列的型別【(長度) 約束】, 

                                                      列名 列的型別【(長度) 約束】,

                                                      . . .

                                                      列名 列的型別【(長度) 約束】   )

CREATE TABLE  IF NOT EXISTS book(
    id INT,
    bName  VARCHAR(20),
    bPrice DOUBLE,
    authorId INT,
    publishDate DATETIME
);

CREATE TABLE author(
    id INT,
    au_name VARCHAR(20),
    nation VARCHAR(10)
)

VARCHAR(20)中20表示最大字串長度,一個字母佔一個字元,一個漢字也佔一個字元。

2、表的修改:alter

(1)可以修改列名;

語法:

ALTER   TABLE   表名   CHANGE  COLUMN   舊列名   新列名   新列名型別  

ALTER TABLE book CHANGE COLUMN publishdate pubDate DATETIME;

(2)可以修改列的型別或約束;

語法:

ALTER   TABLE   表名   MODIFY   COLUMN  列名   列要更改為的型別

ALTER TABLE book MODIFY COLUMN pubdate TIMESTAMP;

(3)可以新增新列;

語法:

ALTER    TABLE   表名   ADD   COLUMN  要新增的列名  要新增列的型別

ALTER TABLE author ADD COLUMN annual DOUBLE;

(4)可以刪除列;

語法:

ALTER    TABLE   表名   DROP   COLUMN   IF  EXISTS   要刪除的列名

ALTER TABLE author DROP COLUMN IF EXISTS annual;

(5)可以修改表名。

語法:

ALTER   TABLE   要修改的表名   RENAME    TO   新表名   

ALTER TABLE author RENAME TO author;

3、表的刪除:drop

語法:

DROP   TABLE   IF   EXISTS   表名

DROP TABLE IF EXISTS bool_author;

4、表的複製:

(1)僅僅複製表的結構,語法如下:

CREATE   TABLE   新表名   LIKE   要複製的表名

CREATE TABLE copy LIKE author;

(2)複製表的結構和資料,語法為:

CREATE   TABLE  新表名   SELECT   *   FROM  要複製的表名

CREATE TABLE copy2 SELECT * FROM author;

(3)在(2)的基礎上,但僅僅複製部分資料和相應的欄位,語法為:

CREATE   TABLE   copy3   SELECT   要複製的資料列名  FROM  要複製的表名   WHERE  篩選條件

CREATE TABLE copy3 SELECT id,au_name FROM author WHERE nation='中國';

(4)僅僅複製某些欄位,語法為:

CREATE    TABLE    新表名   SELECT   要複製的列名  FROM   要複製的表名   WHERE   0

CREATE TABLE copy4 SELECT id,au_name FROM author WHERE 0;

三、常見的資料型別

1、數值型:整型、小數(定點數、浮點數)

2、字元型:較短的文字(char、varchar)、較長的文字(text、blob(較長的二進位制資料))

3、日期型

 

(1)整型

分類:tinyint——1位元組、smallint——2位元組、mediumint——3位元組、int/integer——4位元組、bigint——8位元組

特點:

<1>如果不設定無符號還是有符號,預設是有符號,如果想設定無符號,需要新增你unsigned關鍵字。

<2>如果插入的數值超出整型的範圍,首先會報異常out  of range,並且插入臨界值。

<3>如果不設定長度,會有預設的長度。長度代表了顯示的最大寬度,如果不夠會有0在左邊填充,但必須搭配ZEROFILL使用。

(2)小數

分類:浮點型——ffloat(M,D)——4位元組  double(M,D)——8位元組;定點型——decimal(M,D)——M+2位元組,可以簡寫成dec(M,D)

對於精確度要求較高的小數,建議使用定點型

特點:

<1>M和D:M代表整數部位+小數部位的總長度;D代表小數部位。如果超過範圍,則插入臨界值。M和D都可以省略。如果是decimal,則M預設為10,D預設為0;如果是float或者double,則會根據插入的數值的精度來決定精度。

<2>定點型的精確度較高,如果要求插入數值的精度較高,如:貨幣運算等,就優先考慮使用

(3)字元型

分類:

較短的文字——char和varchar、binary和varbinary(較短的二進位制)、enum用於儲存列舉、set用於儲存集合;

較長的文字——text和blob(較大的二進位制)、

特點:

<1>char(M)、varchar(M)——M的意思是指最大的字元數。

<2>char代表固定長度的字元,比較耗費空間,但效能較高一點;varchar代表可變長度字元,比較節省空間,但效能較低一些。

<3>char中M可以省略,預設為1,而varchar中M不可以省略。

(4)日期型

分類:date(只儲存日期)\datetime(儲存日期+時間)\timestamp(儲存日期+時間)\time(只儲存時間)\year(只儲存年)

特點:

datetime:8位元組、範圍1000—9999、不受時區影響

timestamp:4位元組、範圍1970—2038、受時區影響

四、常見約束

約束的含義:一種限制,用於限制表中的資料,為了保證表中的資料的準確和可靠性

六大分類:

1、NOT NULL (非空約束,用於保證該欄位的值不能為空,比如姓名、學號等)

2、DEFAULT (預設約束,用於保證該欄位有預設值,比如性別等)

3、PRIMARY KEY (主鍵約束,用於保證該欄位的值具有唯一性並且非空,比如學號、員工編號等)

4、UNIQUE (唯一約束,用於保證該欄位的值具有唯一性但可以為空,比如座位號等)

5、CHECK (檢查約束,MySQL中不支援該約束,比如檢查年齡、性別是否符合要求)

6、FOREIGN KEY (外來鍵約束,用於限制兩個表的關係,用於保證該欄位的值必須來自主表的關聯列的值)

注意,外來鍵約束是在從表中新增,用於引用主表中某列的值。比如學生表的專業編號,員工表的部門編號,工種編號等。

新增約束的時機:1、建立表時;2、修改表時

具體格式如下圖所示:

約束的新增分類:

1、列級約束(跟在欄位後面):六大約束語法上都支援,但外來鍵約束沒有效果

語法:直接在欄位名和型別後面追加約束型別即可,只支援:預設、非空、主鍵、唯一

CREATE TABLE stuinfo(
    id INT PRIMARY KEY, #主鍵
    stuName VARCHAR(20) NOT NULL, #非空
    gender CHAR(1) CHECK (gender='男'OR gender='女'), #檢查
    seat INT UNIQUE, #唯一
    age INT DEFAULT 18, #預設約束
    majorId INT REFERENCES major(id) #外來鍵

)

CREATE TABLE major(
    id INT PRIMARY KEY,
    majorName VARCHAR(20)
)

2、表級約束(脫離欄位):除了非空、預設約束,其他都支援

語法:在各個欄位的最下面,【CONSTRAINT  約束名】 約束型別(欄位名)

CREATE TABLE stuinfo(
    id INT,
    stuname VARCHAR(20),
    gender CHAR(1),
    seat INT,
    age INT,
    majorid INT,

    CONSTRAINT pk PRIMARY KEY(id), #主鍵
    CONSTRAINT ck CHECK (gender='男'OR gender='女'), #檢查
    CONSTRAINT uq UNIQUE (seat), #唯一
    CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id) #外來鍵

)

3、通用的寫法

  CREATE TABLE IF NOT EXISTS stuinfo(
    id INT PRIMARY KEY,
    stuname VARCHAR(20) NOT NULL,
    sex CHAR(1),
    seat INT UNIQUE,
    age INT DEFAULT 18,
    majorid INT,

    CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id) #外來鍵

)