4.更新數(shù)據(jù)表
更新數(shù)據(jù)表
語法:
UPDATE? 表名
SET 字段名=表達(dá)式 [, 字段名=表達(dá)式 ...]
[WHERE 更新條件]
[ORDER BY? 更新順序]
[LIMIT 限制更新記錄數(shù)量]
實例1:開發(fā)部加薪啦!將開發(fā)部全體員工加薪500元
為了看到更新效果,我使用了分組與排序!在以后的操作中,我們會更多的用到之前學(xué)到過的知識,如果仍感到吃力,建議把前面章節(jié)的知識,再仔細(xì)看一遍!
先看一下更新之前的開發(fā)部員工工資情況吧
查詢語句如下:
SELECT * FROM `tp5_staff` ORDER BY dept DESC;
現(xiàn)在開始更新操作,開發(fā)部的同志們,加薪啦~~~
更新語句如下:
UPDATE `tp5_staff` SET salary = salary + 500
WHERE dept = '開發(fā)部';
#查看加薪后的工資
SELECT * FROM `tp5_staff` ORDER BY dept DESC;
實例2: 將編號為1001的員工,姓名md5加密,入職日期設(shè)置為當(dāng)前日期
本例中,姓名加密沒有任何實際意義,僅用于演示函數(shù)使用效果
語句如下:
#將id=1001的記錄的姓名md5加密,入職日期設(shè)置為當(dāng)前日期
UPDATE `tp5_staff` SET name = MD5('name'), hiredate = CURRENT_DATE
WHERE id = 1001;
#查看更新結(jié)果
SELECT * FROM `tp5_staff` ;
分析:
SET關(guān)鍵字后面,用于表中字段的值,可以用常量、可以用表達(dá)式,也可用函數(shù)。本例中,使用了常量 :CURRENT_DATE表示當(dāng)前時間,MD5()函數(shù)對字符串name進行了加密!
實例3:將id=1001的員工姓名,工資,入職日期全部設(shè)置為NULL
分析
>[success] * 將字段值設(shè)置為NULL,根據(jù)字段類型不同,有不同的顯示方式
>* 數(shù)據(jù)型字段顯示為:0;
> * 字符串字段顯示為:空;
> * 日期時間型字段顯示為:NULL。
語句如下:
#將id=1001的記錄的姓名、工資、入職日期全部設(shè)置為NULL
UPDATE `user` SET name = NULL, salary = NULL, hiredate = NULL
WHERE id = 1001;
#查看更新結(jié)果
SELECT * FROM `tp5_staff` ;
5.編輯數(shù)據(jù)表結(jié)構(gòu)(重點)
編輯數(shù)據(jù)表結(jié)構(gòu)
基本語法:
ALTER TABLE 表名 [ADD ...]? [DROP ... ]? [CHANGE ...] [ RENAME ...]
####語句看上去并不復(fù)雜,下面我用一個個實例演示用法
FIRST :添加到表中第一個字段之前!
默認(rèn)情況下,新添加的字段做為表的最后一個字段。
實例:user表sex字段后添加新字段:age(年齡),要求整型、無符號、不為空、默認(rèn)值為22;
語句如下:
#添加新字段:age(年齡),要求整型、無符號、不為空、默認(rèn)值為22,加到sex字段后面
ALTER TABLE `tp5_staff` ADD age TINYINT(3) UNSIGNED NOT NULL DEFAULT '22'? AFTER sex;
#查看增加age字段后的表結(jié)構(gòu)
DESC `tp5_staff`;
2、修改字段名稱
語法:
ALTER TABLE 表名 CHANGE? 原字段名? 新字段名? 原字段類型? 原約束條件 ;
1、哪怕僅僅是修改字段名稱,新字段的類型也必須給出;
2、如果僅僅修改字段名稱,那么最好在修改之前,查詢一下原表要修改的字段類型和約束條件(DESC 表名),防止原來存儲的數(shù)據(jù)因類型不對而出錯;
實例:將user表sex字段修改為xb,其它內(nèi)容不變;
語句如下:
#添加新字段:age(年齡),要求整型、無符號、不為空、默認(rèn)值為22,加到sex字段后面
ALTER TABLE `user` CHANGE? sex? xb TINYINT(2) UNSIGNED NOT NULL DEFAULT? 1;
#查看增加age字段后的表結(jié)構(gòu)
DESC `user`;
3、修改字段名稱和類型
其實與上面的語法基本是一樣的。
1、如果僅修改類型,只要將新字段名,設(shè)置與原字段同名即可。
2、新字段后面要寫新的類型和約束條件等,不要復(fù)制原來字段的內(nèi)容。
語法:
ALTER TABLE 表名 CHANGE? 原字段名? 新字段名? 新字段類型? 新約束條件 ;
實例:user表中,salary字段變更為gz,類型修改成INT(8),無符號、不為空;
語句:
#將salary字段變更為gz,類型變更為INT(8),無符號,不為空
ALTER TABLE `user` CHANGE? salary? ? gz INT(8) UNSIGNED NOT NULL ;
#查看字段變更后的表結(jié)構(gòu)
DESC `user`;
如果想修改數(shù)據(jù)表的當(dāng)前主鍵,并將主鍵起始值設(shè)置為指定值,可這樣操作:
# 修改一下表結(jié)構(gòu),設(shè)置主鍵和約束條件
ALTER TABLE 表名? CHANGE id id INT(4) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT ;
#設(shè)置自增起始于1001
ALTER TABLE? 表名? ? AUTO_INCREMENT? = 自增主鍵起始值 ;
4、刪除字段
刪除字段是不可撤消的操作,所以刪除字段之前,請確保該字段值已無效
語法:(即使簡單也要背誦)
ALTER TABLE 表名 DROP? 要刪除的字段名 ;
實例:刪除user表中的job 字段
為不了破壞原數(shù)據(jù),我們新建一個字段來演示刪除操作
語句:
# 先添加一個job字段
ALTER TABLE `tp5_staff` ADD job CHAR(20) NOT NULL ;
#查看是否添加成功
DESC `tp5_staff`;
#刪除剛添加的job字段
ALTER TABLE `tp5_staff`? DROP? job;
#查看是否刪除成功
DESC `tp5_staff`;
5、數(shù)據(jù)表更名
語法:
ALTER TABLE? '原表名' RENAME ‘新表名’;
RENAME? TABLE '原表名' TO? ?‘新表名’;
例子:
#語法一:
ALTER TABLE `user` RENAME tp_user;
# 語法二:
RENAME? TABLE? user? TO? tp_user;
6、添加索引
ALTER TABLE? 表名? ADD INDEX (字段名)? [ , ADD INDEX (字段名) ];
實例:給user表中的name字段,salary 字段添加索引
語句:
ALTER TABLE `user` ADD INDEX (name), ADD INDEX (salary); (重要)
#經(jīng)測試,salary字段經(jīng)過索引后,已按升序輸出
SELECT? salary FROM `user`;
7、其它數(shù)據(jù)表編輯操作
如果僅僅修改字段類型,除了可以用CHANGE關(guān)鍵字后,還可以用MODIFY;
修改數(shù)據(jù)表的存儲引擎
#修改數(shù)據(jù)表引擎
ALTER TABLE 表名? ENGINE = MyISAM 或者? InnoDB
#修改數(shù)據(jù)表默認(rèn)字符集
ALTER TABLE 表名? DEFAULT CHARSET = 編碼集
實例:將user 表存儲引擎變更成:InnoDB
語句:
ALTER TABLE user ENGINE =InnoDB;
#查看變更之后的引擎
show table status from tp5 where name='user';
8、設(shè)置或刪除字段默認(rèn)值