1? 概述
表是一種很重要的數(shù)據(jù)庫(kù)對(duì)象,是組成數(shù)據(jù)庫(kù)的基本元素赏殃,由若干個(gè)字段組成敷待。主要用來(lái)存儲(chǔ)數(shù)據(jù)記錄。表的操作仁热,包含創(chuàng)建表榜揖、刪除表勾哩、修改表等。給表中的字段創(chuàng)建索引举哟,將提高查詢的速度思劳。
表的操作涉及DDL: DataDefinationLanguage,數(shù)據(jù)定義語(yǔ)言妨猩,關(guān)鍵字:CREATE, DROP, ALTER
2? 創(chuàng)建表
.CREATE TABLE [IF NOT EXISTS] ‘tbl_name’ (col1 type1修飾符, col2 type2修飾符, ...)
創(chuàng)建表的時(shí)候要指定類型
.字段信息
.col type1
.PRIMARY KEY(col1,...)
.INDEX(col1, ...)
.UNIQUE KEY(col1, ...)
.表選項(xiàng):
.ENGINE [=] engine_name
可以人為指定表支持的引擎
SHOW ENGINES;查看支持的engine類型
.ROW_FORMAT [=]
{DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT}
.獲取幫助:mysql>HELP CREATE TABLE;
.查看所有的引擎:SHOW ENGINES;
.查看表:SHOWTABLES [FROM db_name];
.查看表結(jié)構(gòu):DESC[db_name.]tb_name;
desc? user;查看表里的字段有哪些,類型潜叛,默認(rèn)值等
修飾符
.所有類型:
.NULL數(shù)據(jù)列可包含NULL值
.NOT NULL數(shù)據(jù)列不允許包含NULL值
.DEFAULT默認(rèn)值
.PRIMARY KEY主鍵
.UNIQUE KEY唯一鍵
.CHARACTER SET name指定一個(gè)字符集
.數(shù)值型
.AUTO_INCREMENT自動(dòng)遞增,適用于整數(shù)類型(數(shù)值型的)
.UNSIGNED無(wú)符號(hào)壶硅,默認(rèn)整數(shù)是帶負(fù)號(hào)的威兜,加上這個(gè)字段就都是正整數(shù)
創(chuàng)建表示例
create table classlist (name varchar(20) not null, nu int unsigned not null, scorce float(5,2), primarykey (nu) );
創(chuàng)建一張表,score;
CREATE TABLE score (`id` int(3) NOT NULL AUTO_INCREMENT,`name` char(10) NOTNULL,`math` float(4,2) DEFAULT 60.00,`english` float(4,2) NOT NULL,PRIMARY KEY (`id`) );
其中id是自動(dòng)增加的數(shù)值型庐椒,math有個(gè)默認(rèn)值是60.00
mysql中椒舵,要插入默認(rèn)數(shù)值有以下兩個(gè)語(yǔ)法
方法一
MySQL在創(chuàng)建默認(rèn)字段時(shí)使用default關(guān)鍵字,插入值得時(shí)候也是使用default關(guān)鍵字约谈。
insert into score values
(16,"lin",default,90);
這樣新生成id=16的這條記錄中笔宿,math的值是default;
方法二
在插入值得時(shí)候指定非默認(rèn)值字段的名稱,如指定name和english的值棱诱,當(dāng)前id最大值是16泼橘,不指定id的值
insert intoscore(name,english) values ("li",88);
此時(shí),math的值還是默認(rèn)的60.00迈勋,同時(shí)炬灭,由于,沒(méi)有指定id的值粪躬,id是自動(dòng)增加的担败,所以,新生成的記錄中id的數(shù)值自動(dòng)變更為17.
.CREATE TABLE student (id
int UNSIGNED NOT NULL PRIMARY KEY,name VARCHAR(20)NOT NULL,age tinyint UNSIGNED);
.DESC students;
DESC查看students這張表的表結(jié)構(gòu)
.CREATE TABLE students2
(id int UNSIGNED NOT NULL ,name VARCHAR(20)NOT NULL,age tinyint UNSIGNED,PRIMARYKEY(id,name));
PRIMARY KEY(id,name)這個(gè)是復(fù)合主鍵的寫法镰官;這是固定寫法
3? 刪除表
DROP? TABLE [IF EXISTS] tb_name提前;
.查看表創(chuàng)建命令:SHOW CREATE TABLE tbl_name;
.查看表狀態(tài):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;
如果表里已經(jīng)有記錄了,如果插入的字段屬性變化可能會(huì)對(duì)原來(lái)的表的數(shù)據(jù)有影響泳唠,可以用視圖的方式來(lái)處理
刪除字段:drop
alter table score drop? chinese;
修改字段:
alter(默認(rèn)值), change(字段名), modify(字段屬性)
數(shù)字可定義為int狈网,也可以當(dāng)做字符串存放
索引:
添加索引:add
刪除索引: drop
表選項(xiàng)
修改:
.查看表上的索引: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;更改字段的屬性,如果要改動(dòng),那么要將該字段的所有的屬性都定義笨腥,因?yàn)楦膭?dòng)字段的其中一個(gè)屬性拓哺,所有的屬性都會(huì)改,如只改變類型脖母,那么其他士鸥,如默認(rèn)值也會(huì)改變;
.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')枚舉值谆级,一旦設(shè)置枚舉值后烤礁,該字段讼积,gender只能設(shè)置為m或者f。
update score set
gender="f" where id=2;注意脚仔,要加上引號(hào)勤众;
insert intoscore(name,gender,english) values ("jake","f",80);
.ALETR TABLE students? CHANGE id sid int UNSIGNED NOT NULL PRIMARY KEY;
更改字段id名為sid,并設(shè)置相關(guān)的屬性;
.ALTER TABLE students ADD? UNIQUE KEY(name);
將name這一列添加為唯一鍵鲤脏,該列不能有重復(fù)们颜,在一張表中唯一鍵可以設(shè)置多列,但是主鍵只能是一列
.ALTER TABLE students ADD? INDEX(age);
主鍵和唯一鍵默認(rèn)會(huì)創(chuàng)建索引
.DESC students;
查看表的結(jié)構(gòu)
.SHOW INDEXES FROM? students;
查看表中字段的索引猎醇,其中窥突,主鍵和唯一鍵是默認(rèn)有的,其他的索引是通過(guò)創(chuàng)建生成的
.ALTER TABLE students DROPage;
將表students的列age刪掉硫嘶。
delete? from? ?test6? ?where id=2;
將表test6滿足條件id=2的行刪掉
5? 索引
.索引:索引是特殊數(shù)據(jù)結(jié)構(gòu)波岛,定義在查找時(shí)作為查找條件的字段。索引將表中的一個(gè)或多個(gè)字段中的數(shù)據(jù)復(fù)制一份另存音半,并且這些需要按特定次序排序存儲(chǔ),實(shí)現(xiàn)快速定位數(shù)據(jù)庫(kù)里資源的作用贡蓖,建立主鍵和唯一鍵會(huì)自動(dòng)創(chuàng)建索引
索引提高了查詢性能曹鸠,但是提高不一定是好事,可能會(huì)起到反向的作用斥铺,如索引建立好之后彻桃,臨時(shí)要更改表的結(jié)構(gòu)信息,索引表也要一起更新晾蜘,多了一個(gè)動(dòng)作邻眷,會(huì)影響對(duì)數(shù)據(jù)庫(kù)的修改性能,即索引或?qū)е滦薷男阅芙档吞藿弧_@里需要權(quán)衡肆饶,如果查數(shù)據(jù)多,建立索引是有必要的岖常。
.優(yōu)點(diǎn):提高查詢速度
.缺點(diǎn):占用額外空間驯镊,影響插入速度
.創(chuàng)建索引必須要有索引名稱
.創(chuàng)建索引:
CREATE INDEX index_nameONtbl_name(index_col_name,...);
help CREATE INDEX;查看幫助
.刪除索引:
DROP INDEX index_nameONtbl_name;
.查看索引:
SHOW INDEXES FROM[db_name.]tbl_name;
不同的表里,索引值可以不一樣
索引在運(yùn)維優(yōu)化里有比較明顯的效果竭鞍,提高查詢速度