1. 程式人生 > >MySQL建庫 建表及其相關操作

MySQL建庫 建表及其相關操作

建立資料庫

使用根登入後,可以使用

create database if not exists UNOOB default charset utf8;

建立資料庫,該命令的作用:

如果資料庫不存在則建立,存在則不建立。 建立UNOOB資料庫,並設定編碼集為UTF8

刪除資料庫

刪庫有風險,動手需謹慎

drop database py;

MySQL資料表

建立MySQL的資料表需要以下資訊:

  • 表名
  • 表字段名
  • 定義每個表字段

    create table 表名(

      欄位名 型別 [欄位約束],
      欄位名 型別 [欄位約束],
      欄位名 型別 [欄位約束]
      ...
    

    );

建立表

通過mysql>命令視窗可以很簡單的建立MySQL資料表。你可以使用SQL語句 CREATE TABLE來建立資料表。

例項

以下為建立資料表runoob_tbl例項:

    create table user(
        id int unsigned not null AUTO_INCREMENT PRIMARY KEY,
        username varchar(30) not null,
        password char(32) not null,
        email varchar(100) not null,
        pic varchar(50) default './public/img/pic.jpg'
    )engine=innodb default charset=utf8;

例項解析:

如果你不想欄位為NULL可以設定欄位的屬性為NOT NULL,在操作資料庫時如果輸入該欄位的資料為NULL,就會報錯。

AUTO_INCREMENT定義列為自增的屬性,>一般用於主鍵,數值會自動加1。

PRIMARY KEY關鍵字用於定義列為主鍵。您可以使用多列來定義主鍵,列間以逗號分隔。

ENGINE設定儲存引擎,CHARSET設定編碼。

查看錶結構 desc stu;

檢視建表語句 show create table stu \ G - 檢視建表的語句

修改表結構

格式:alter table 表名 action(更改選項);

新增:

新增欄位:

alter table 表名 add 欄位名資訊

例如:

    -- 在user表的最後追加一個num欄位 設定為int not null

    alter table user add num int not null;


    -- 在user表的email欄位後新增一個age欄位,設定int not null default 20;

    alter table user add age int not null default 20 after email;


    -- 在user表的最前面新增一個aa欄位設定為int型別

    alter table user add aa int first;

刪除:

刪除欄位:

alter table 表名 drop 被刪除的欄位名

例如:

-- 刪除user表的aa欄位

 alter table user drop aa;

修改 :

修改欄位:

alter   table    表名      change[modify]      被修改後的欄位資訊

其中:change可以修改欄位名, modify 不修改

例如:

-- 修改user表中age欄位資訊(型別),(使用modify關鍵字的目的不修改欄位名)

  alter table user modify age tinyint unsigned not null default 20;

-- 修改user表的num欄位改為mm欄位並添加了預設值(使用change可以改欄位名)

  alter table user change num mm int not null default 10;

新增和刪​​除索引:


-- 為user表中的name欄位新增唯一性索引,索引名為uni_name;
 alter table user add unique uni_name(name);

-- 為user表中的email欄位新增普通索引,索引名為index_eamil

 alter table user add index index_email(email);

-- 將user表中index_email的索引刪除

 alter table user drop index index_email;

修改表名:

ALTER TABLE 舊錶名 RENAME AS 新表名

ALTER TABLE 原表名 RENAME 新表名

RENAME TABLE 原表名 to  新表名

更改AUTO_INCREMENT初始值:

ALTER TABLE 表名稱 AUTO_INCREMENT=1

更改表型別:

ALTER TABLE 表名稱 ENGINE="InnoDB"

例子:

在一個表中添加了一些資料,id最大為6,刪除id為6,然後重啟服務,在新增一個id為幾?
 MyISAM 再新增一個為7
 InnoDB再新增一個為6
MyISAM表將最大的ID記錄到了資料檔案裡,重啟mysql自增主鍵的最大ID值也不會丟失;
InnoDB則是把最大的ID值記錄到了記憶體中,所以重啟mysql或者對錶進行了OPTIMIZE操作後,最大ID值將會丟失。 

關於表型別 MySQL的資料庫中的表型別一般常用兩種:MyISAM資料和InnoDB

1、MyISAM:預設表型別,它是基於傳統的ISAM型別,ISAM是Indexed Sequential Access Method (有索引的順序訪問方法) 的縮寫,它是儲存記錄和檔案的標準方法。不支援事務,安全較弱,而且不支援外來鍵,如果執行大量的select,insert MyISAM比較適合。

2、InnoDB:支援事務安全的引擎,支援外來鍵、行鎖、事務是他的最大特點。如果有大量的update和insert,建議使用InnoDB,特別是針對多個併發和QPS較高的情況。

區別:

總的來說,MyISAM和InnoDB各有優劣,各有各的使用環境。

但是InnoDB的設計目標是處理大容量資料庫系統,它的CPU利用率是其它基於磁碟的關係資料庫引擎所不能比的。

我覺得使用InnoDB可以應對更為複雜的情況,特別是對併發的處理要比MyISAM高效。同時結合memcache也可以快取SELECT來減少SELECT查詢,從而提高整體效能

刪除表

MySQL中刪除資料表是非常容易操作的,但是你再進行刪除表操作時要非常小心,因為執行刪除命令後所有資料都會消失。

DROP TABLE table_name ;