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 ;