1. 程式人生 > >細說MySQL表操作

細說MySQL表操作

目錄

要想在某一個數據庫裡建立表,首先要使用(進入)這個資料庫,使用命令 use 資料名

如果是通過Windows控制檯建立表,則一定注意,將控制檯的編碼設定為gbk(set names gbk),因為控制檯就只有一種編碼,那就是gbk。如果不設定會出錯。雖然這裡設定的編碼是gbk,這裡設定的是控制檯的編碼,不是資料庫的編碼也不是表的編碼。資料庫管理系統會自動將表的格式轉換為建立表時設定的格式。

如果是通過MacOS的終端建立表,則需要設定編碼的編碼和資料庫的字元編碼保持一致。

語法

CREATE TABLE 表名 (
欄位名1  資料型別  欄位選項 ,
欄位名2  資料型別  欄位選項 ,
欄位名3  資料型別   欄位選項,
欄位名4  資料型別   欄位選項,
欄位名n  資料型別 (這裡千萬不能再有逗號,否則會報錯)
)CHARACTER SET 字符集 COLLATE 校對規則 ENGINE 儲存引擎方式;

(欄位選項、字符集、校對規則、儲存引擎等都可以不寫)

欄位名: 自定義的名稱,來告訴表資料表頭是什麼

欄位型別: mysql資料型別分三大類,數值型,字串型,日期時間型

欄位選項: 每個欄位有不同的功能,可以新增不同選項來特殊化欄位

主鍵: primary key,作用:加上主鍵後資料不能重複,查詢時主要用這個欄位

ENGINE: 資料庫表的儲存引擎(PHP程式設計師需要掌握MyISAM、InnoDB、Memory),目前我們使用最多的是MyISMAM和InnoDB,預設是InnoDB.該值在my.ini中設定

說明:

(1) 表也可以指定字符集

(2) 如果表指定了字符集和校對規則,則以表指定的為準,如果表沒有指定,則以表所在的資料庫的字符集和校對規則。

(3) engin 就是儲存引擎,比如常用的(MyISAM、InnoDB, Memory), 如果建立表的時指定了這個儲存引擎,則以這個準,如果沒有指定以預設的. 在my.ini中設定的有

(4) AUTO_INCREMENT,加上這個資料就會自動增長

示例:

CREATE TABLE `user`
(
    `id` int unsigned AUTO_INCREMENT PRIMARY KEY COMMENT "主鍵ID",
    `name` varchar(64) NOT NULL COMMENT "姓名",
    `nickname` varchar(64) NOT NULL DEFAULT "" COMMENT "暱稱",
    `password` char(32) NOT NULL COMMENT "密碼",
    `birthday` date COMMENT "出生日期"
)CHARSET=UTF8 COLLATE=utf8_general_ci ENGINE=InnoDB;

查看錶結構

desc 表名;
describe 表名;

檢視所有的表

show tables;

刪除表

drop table 表名;

該命令一旦執行,那麼這個表連同表中的資料都會被刪掉,雖然有恢復資料的方法,但是很困難,除非你想刪庫跑路,否則,在遇到在刪除資料或者資料庫的時候一定要謹慎操作,除非真的有必要。

檢視建立表的語句

show create table 表名;

修改表的字符集和校驗規則

ALTER  TABLE  表名 CONVERT TO CHARACTER SET 字符集 COLLATE 校對規則;

修改表名

rename table 舊錶名 to 新表名;

在表中新增新欄位

alter table 表名 add  新欄位名 欄位型別 [欄位屬性列表];

原本abc表中,只有兩個欄位,新增一個hobby欄位

在指定位置後面新增新的欄位

alter  table  表名  add  新欄位  欄位型別[欄位屬性列表]   after  指定位置的欄位名;

在name後面新增一個age欄位

在表的最前面新增新的欄位

alter  table  表名  add  新欄位  欄位型別[欄位屬性列表]  first;

注意:使用first只能是在表的最前面新增欄位,first後面不要再接欄位名;

修改表的欄位名

alter table 表名 change  舊欄位名 新欄位名 新欄位型別 [新欄位屬性列表];

注意: 不能修改主鍵的名字, 修改欄位名的時候一定要給新欄位名新增屬性設定,並且設定的欄位型別的儲存範圍要大於等於儲存的資料,否則保護機制會提醒,更改後原有的資料無法存下,比如原有的欄位名型別為varchar(4),儲存了一個數據為'1234',如果改為char(2),就無法存下'1234'了,這樣是不允許的。

而且修改欄位名的時候就必須宣告欄位型別,即使是欄位型別和原來的欄位型別一樣也要重新宣告。

下圖中把hobby欄位改成了love

修改表中欄位的屬性

alter table 表名 modify  欄位名 新欄位型別 [新欄位屬性列表];

這個屬性是指欄位的資料型別int ,decimal等

刪除表中的某個欄位

alter table 表名 drop 欄位名;

設定某個欄位為主鍵

alter table 表名 add primary key(要設定為主鍵的欄位名);

把某個欄位的主鍵屬性刪掉

alter table 表名 drop primary key;

注意:如果把某個欄位設定為了主鍵,並且該欄位是auto_increment,那麼我們將無法把他的主鍵屬性刪除掉,如果我們想刪除這個帶auto_increment的屬性的主鍵屬性,那麼就必須直接把這個欄位刪除掉(用alter table 表名 drop 欄位名;來刪除),如果我們還需要這個欄位,只是不需要它成為主鍵了,我們可以再通過增加欄位的方法再添上該欄位,由於一個表中只能有一個主鍵(這個主鍵也可能是由多個欄位組合而成的主鍵),所以當一個表中已經存在一個主鍵時,我們不能再同時新增另一個主鍵,要想在新增其它主鍵就必須刪除原有的主鍵。

只有主鍵和unique才能使用auto_increment,如果一個欄位不是主鍵或unique,那麼他也不能使用auto_increment。

移動欄位

如果把某個欄位移動到另一個欄位的後面(比如把B欄位移動到A欄位後面)

alter table 表名  modify 要被移動的欄位名(B) 要被移動的欄位的定義(和原來的定義一樣)  after A欄位名(也就是所說的另一個欄位A);

示例:將name欄位移到nickname欄位後面

注意,要被移動的欄位一定要帶上它本身的屬性,不然會報錯。比如如果使用這樣的語句就會報錯。

錯誤用法:alter table user modify name after nickname;

清空表資料

# 這個只是清空了表的資料,表和表結構都還在,等同於一張從沒插入過資料的新表,如果插入資料主鍵ID重新開始計數
truncate  tableName;

從圖中資料的主鍵ID就可以看到,通過truncate 表名清空的資料表就相當於一張新表,好像以前就沒插入過資料一樣。

刪除表資料

# 這條命令刪除整個表的資料,表結構還在,插入資料時,主鍵ID會按照原來以後的主鍵ID基數基礎上繼續計數
delete from 表名;

從圖中可以看出,delete 命令只是刪除資料,被刪除的資料佔用的空間依然存在,所以插入的資料時候主鍵ID會在原來主鍵ID基數的基礎上開始增加。

複製一張表

如果我們需要建立的表和原來的表的結構類似,我們就可以依據原來的表複製一張新表,只是複製了結構,並不複製資料,然後可以通過命令把不需要的欄位刪除掉。這樣我們就可以快速建立一張類似的資料表。

create table 新表名 like  被複制的表名;