1. 程式人生 > >數據庫 之 表操作(DDL語句)和索引

數據庫 之 表操作(DDL語句)和索引

數據庫 表操作

1 概述

表是一種很重要的數據庫對象,是組成數據庫的基本元素,由若幹個字段組成。主要用來存儲數據記錄。表的操作,包含創建表、刪除表、修改表等。給表中的字段創建索引,將提高查詢的速度。

表的操作涉及DDL: DataDefinationLanguage,數據定義語言,關鍵字:CREATE, DROP, ALTER

2 創建表

.CREATE TABLE [IF NOT EXISTS] ‘tbl_name’ (col1 type1修飾符, col2 type2修飾符, ...)

創建表的時候要指定類型

.字段信息

.col type1

.PRIMARY KEY(col1,...)

.INDEX(col1, ...)

.UNIQUE KEY(col1, ...)

.表選項:

.ENGINE [=] engine_name

可以人為指定表支持的引擎

SHOW ENGINES;查看支持的engine類型

.ROW_FORMAT [=]

{DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT}

.獲取幫助:mysql>HELP CREATE TABLE;

.查看所有的引擎:SHOW ENGINES;

.查看表:SHOWTABLES [FROM db_name];

.查看表結構:DESC[db_name.]tb_name;

desc user;查看表裏的字段有哪些,類型,默認值等

修飾符

.所有類型:

.NULL數據列可包含NULL值

.NOT NULL數據列不允許包含NULL值

.DEFAULT默認值

.PRIMARY KEY主鍵

.UNIQUE KEY唯一鍵

.CHARACTER SET name指定一個字符集

.數值型

.AUTO_INCREMENT自動遞增,適用於整數類型(數值型的)

.UNSIGNED無符號,默認整數是帶負號的,加上這個字段就都是正整數

創建表示例

create table classlist (name varchar(20) not null, nu int unsigned not null, scorce float(5,2), primarykey (nu) );

創建一張表,score;

CREATE TABLE `score`(`id` int(3) NOT NULLAUTO_INCREMENT,`name` char(10) NOTNULL,`math` float(4,2) DEFAULT 60.00,`english` float(4,2) NOT NULL,PRIMARY KEY (`id`) );

其中id是自動增加的數值型,math有個默認值是60.00

mysql中,要插入默認數值有以下兩個語法

方法一

MySQL在創建默認字段時使用default關鍵字,插入值得時候也是使用default關鍵字。

insert into score values

(16,"lin",default,90);

這樣新生成id=16的這條記錄中,math的值是default;

方法二

在插入值得時候指定非默認值字段的名稱,如指定name和english的值,當前id最大值是16,不指定id的值

insert intoscore(name,english) values ("li",88);

此時,math的值還是默認的60.00,同時,由於,沒有指定id的值,id是自動增加的,所以,新生成的記錄中id的數值自動變更為17.

.CREATE TABLE student (id

int UNSIGNED NOT NULL PRIMARY KEY,name VARCHAR(20)NOT NULL,age tinyint UNSIGNED);

.DESC students;

DESC查看students這張表的表結構

.CREATE TABLE students2

(id int UNSIGNED NOT NULL ,name VARCHAR(20)NOT NULL,age tinyint UNSIGNED,PRIMARYKEY(id,name));

PRIMARY KEY(id,name)這個是復合主鍵的寫法;這是固定寫法

3 刪除表

DROP TABLE [IF EXISTS] tb_name;

.查看表創建命令:SHOW CREATE TABLE tbl_name;

.查看表狀態:SHOW TABLE STATUS LIKE ‘tbl_name‘\G

刪除表示例

將fenshu這張表刪掉

drop table fenshu;

4 修改表

修改表的某些字段或者屬性

.ALTER TABLE ‘tbl_name‘

字段:

添加字段:add

ADD col1data_type[FIRST|AFTER col_name]

AFTER在某一列後面添加一列

alter table score addchinese float(3,1) not null after name;

如果表裏已經有記錄了,如果插入的字段屬性變化可能會對原來的表的數據有影響,可以用視圖的方式來處理

刪除字段:drop

alter table score drop chinese;

修改字段:

alter(默認值), change(字段名), modify(字段屬性)

數字可定義為int,也可以當做字符串存放

索引:

添加索引:add

刪除索引: drop

表選項

修改:

.查看表上的索引:SHOW INDEXES FROM[db_name.]tbl_name;

.查看幫助:Help ALTER TABLE

修改表示例

.ALTER TABLE students

RENAME s1;將表名從students改名為s1;

.ALTER TABLE s1 ADD phone

varchar(11) AFTER name;在name這列後添加一列phone;

.ALTER TABLE s1 MODIFY

phone int;更改字段的屬性,如果要改動,那麽要將該字段的所有的屬性都定義,因為改動字段的其中一個屬性,所有的屬性都會改,如只改變類型,那麽其他,如默認值也會改變;

.ALTER TABLE s1 CHANGE

COLUMN phone mobile char(11);更改字段名;

.ALTER TABLE s1 DROP

COLUMN mobile;刪除mobile這一列;

.Help ALTER TABLE查看幫助

.ALTER TABLE students ADD gender ENUM(‘m‘,‘f‘)

gender ENUM(‘m‘,‘f‘)枚舉值,一旦設置枚舉值後,該字段,gender只能設置為m或者f。

update score set

gender="f" where id=2;註意,要加上引號;

insert intoscore(name,gender,english) values ("jake","f",80);

.ALETR TABLE students CHANGE id sid int UNSIGNED NOT NULL PRIMARY KEY;

更改字段id名為sid,並設置相關的屬性;

.ALTER TABLE students ADD UNIQUE KEY(name);

將name這一列添加為唯一鍵,該列不能有重復,在一張表中唯一鍵可以設置多列,但是主鍵只能是一列

.ALTER TABLE students ADD INDEX(age);

主鍵和唯一鍵默認會創建索引

.DESC students;

查看表的結構

.SHOW INDEXES FROM students;

查看表中字段的索引,其中,主鍵和唯一鍵是默認有的,其他的索引是通過創建生成的

.ALTER TABLE students DROPage;

將表students的列age刪掉。

delete from test6 where id=2;

將表test6滿足條件id=2的行刪掉

5 索引

.索引:索引是特殊數據結構,定義在查找時作為查找條件的字段。索引將表中的一個或多個字段中的數據復制一份另存,並且這些需要按特定次序排序存儲,實現快速定位數據庫裏資源的作用,建立主鍵和唯一鍵會自動創建索引

索引提高了查詢性能,但是提高不一定是好事,可能會起到反向的作用,如索引建立好之後,臨時要更改表的結構信息,索引表也要一起更新,多了一個動作,會影響對數據庫的修改性能,即索引或導致修改性能降低。這裏需要權衡,如果查數據多,建立索引是有必要的。

.優點:提高查詢速度

.缺點:占用額外空間,影響插入速度

.創建索引必須要有索引名稱

.創建索引必須要有索引名稱

.創建索引:

CREATE INDEX index_nameONtbl_name(index_col_name,...);

help CREATE INDEX;查看幫助

.刪除索引:

DROP INDEX index_nameONtbl_name;

.查看索引:

SHOW INDEXES FROM[db_name.]tbl_name;

不同的表裏,索引值可以不一樣

索引在運維優化裏有比較明顯的效果,提高查詢速度


本文出自 “陽光運維” 博客,請務必保留此出處http://ghbsunny.blog.51cto.com/7759574/1970190

數據庫 之 表操作(DDL語句)和索引