數據庫 之 表操作(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語句)和索引