創(chuàng)建表時(shí)設(shè)置默認(rèn)值,請見下例(設(shè)置員工工資默認(rèn)值=2500):
成都創(chuàng)新互聯(lián)公司專注于企業(yè)成都全網(wǎng)營銷、網(wǎng)站重做改版、陽信網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5高端網(wǎng)站建設(shè)、成都商城網(wǎng)站開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為陽信等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
create table employees (eid varchar(10) primary key,
empname varchar(50),entrydate date,
salary int default 2500);
修改字段默認(rèn)值,請見下例(修改員工工資默認(rèn)值為3000):
alter table employees modify salary int default 3000;
1、如果您打算插入記錄時(shí)使用默認(rèn)值INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [(col_name,...)]
VALUES ({expr | DEFAULT},...),(...),...
[ ON DUPLICATE KEY UPDATE col_name=expr, ... ]這是mysql增加記錄的SQL語句,在VALUES后面的括號(hào)內(nèi)使用DEFAULT將會(huì)使用默認(rèn)值最為字段的值。2、如果您打算讀取某個(gè)表字段的默認(rèn)值可以使用DESCRIBE {DESCRIBE | DESC} tbl_name [col_name | wild]參考下面的例子mysql DESCRIBE city;
+------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+----------+------+-----+---------+----------------+
| Id | int(11) | NO | PRI | NULL | auto_increment |
| Name | char(35) | NO | | | |
| Country | char(3) | NO | UNI | | |
| District | char(20) | YES | MUL | | |
| Population | int(11) | NO | | 0 | |
+------------+----------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
--SQL:
CREATE
TABLE
test(
i_a
int
NOT
NULL
DEFAULT
1,
ts_b
timestamp
NOT
NULL
DEFAULT
NOW(),
c_c
char(2)
NOT
NULL
DEFAULT
'1'
);
int類型:默認(rèn)值也得是整型,并且default后邊不要()括號(hào)。
char類型:默認(rèn)值使用單引號(hào)。
DATETIME類型:NOW()函數(shù)以'YYYY-MM-DD
HH:MM:SS'返回當(dāng)前的日期時(shí)間,可以直接存到DATETIME字段中。不支持使用系統(tǒng)默認(rèn)值。
DATE類型:CURDATE()以'YYYY-MM-DD'的格式返回今天的日期,可以直接存到DATE字段中。不支持使用系統(tǒng)默認(rèn)值。
TIME類型:CURTIME()以'HH:MM:SS'的格式返回當(dāng)前的時(shí)間,可以直接存到TIME字段中。不支持使用系統(tǒng)默認(rèn)值。
用mysql建數(shù)據(jù)表設(shè)置默認(rèn)值,代碼為【stuSex varchar(2) default '男' check(stuSex in('男', '女'))】。
mysql設(shè)置默認(rèn)值的方法:
create table stu(
stuId varchar(30) primary key,
stuName varchar(50) not null,
stuSex varchar(2) default '男' check(stuSex in('男', '女')),
stuJg varchar(30),
stuDept varchar(40)
)
用mysql建數(shù)據(jù)表設(shè)置默認(rèn)值:
int 類型:default 1; (直接加數(shù)值)
varchar類型:default 'aaa'(用單引號(hào))
另:經(jīng)試驗(yàn),在mysql中default 要寫在 check之前,否則報(bào)錯(cuò)
-- 方法一:
由于MySQL目前字段的默認(rèn)值不支持函數(shù),所以以create_time datetime default now() 的形式設(shè)置默認(rèn)值是不可能的。代替的方案是使用TIMESTAMP類型代替DATETIME類型。
TIMESTAMP列類型自動(dòng)地用當(dāng)前的日期和時(shí)間標(biāo)記INSERT或UPDATE的操作。如果有多個(gè)TIMESTAMP列,只有第一個(gè)自動(dòng)更新。
自動(dòng)更新第一個(gè)TIMESTAMP列在下列任何條件下發(fā)生:
1.列值沒有明確地在一個(gè)INSERT或LOAD DATA INFILE語句中指定。
2.列值沒有明確地在一個(gè)UPDATE語句中指定且另外一些的列改變值。(注意一個(gè)UPDATE設(shè)置一個(gè)列為它已經(jīng)有的值,這將不引起TIMESTAMP列被更新,因?yàn)槿绻阍O(shè)置一個(gè)列為它當(dāng)前的值,MySQL為了效率而忽略更改。)
3.你明確地設(shè)定TIMESTAMP列為NULL.
4.除第一個(gè)以外的TIMESTAMP列也可以設(shè)置到當(dāng)前的日期和時(shí)間,只要將列設(shè)為NULL,或NOW()。
所以把日期類型 選擇成timestamp 允許空就可以了
CREATE TABLE test (
uname varchar(50) NOT NULL,
updatetime timestamp NULL DEFAULTCURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
如果要在navicat下操作的話,將字段設(shè)置為timestamp,然后默認(rèn)值寫上CURRENT_TIMESTAMP即可
MySQL目前不支持列的Default 為函數(shù)的形式 如達(dá)到你某列的默認(rèn)值為當(dāng)前更新日期與時(shí)間的功能 你可以使用TIMESTAMP列類型下面就詳細(xì)說明TIMESTAMP列類型 TIMESTAMP列類型 TIMESTAMP值可以從 的某時(shí)的開始一直到 年 精度為一秒 其值作為數(shù)字顯示 TIMESTAMP值顯示尺寸的格式如下表所示 + + +| 列類型| 顯示格式 || TIMESTAMP( ) | YYYYMMDDHHMMSS | | TIMESTAMP( ) | YYMMDDHHMMSS || TIMESTAMP( ) | YYMMDDHHMM || TIMESTAMP( ) | YYYYMMDD || TIMESTAMP( ) | YYMMDD || TIMESTAMP( ) | YYMM || TIMESTAMP( ) | YY |+ + + 完整 TIMESTAMP格式是 位 但TIMESTAMP列也可以用更短的顯示尺寸創(chuàng)造最常見的顯示尺寸是 和 你可以在創(chuàng)建表時(shí)指定一個(gè)任意的顯示尺寸 但是定義列長為 或比 大均會(huì)被強(qiáng)制定義為列長 列長在從 ~ 范圍的奇數(shù)值尺寸均被強(qiáng)制為下一個(gè)更大的偶數(shù) 列如 定義字段長度 強(qiáng)制字段長度TIMESTAMP( ) TIMESTAMP( )TIMESTAMP( ) TIMESTAMP( )TIMESTAMP( ) TIMESTAMP( )TIMESTAMP( ) TIMESTAMP( )所有的TIMESTAMP列都有同樣的存儲(chǔ)大小 使用被指定的時(shí)期時(shí)間值的完整精度( 位)存儲(chǔ)合法的值不考慮顯示尺寸 不合法的日期 將會(huì)被強(qiáng)制為 存儲(chǔ) 這有幾個(gè)含意 雖然你建表時(shí)定義了列TIMESTAMP( ) 但在你進(jìn)行數(shù)據(jù)插入與更新時(shí)TIMESTAMP列實(shí)際上保存了 位的數(shù)據(jù)(包括年月日時(shí)分秒) 只不過在你進(jìn)行查詢時(shí)MySQL返回給你的是 位的年月日數(shù)據(jù) 如果你使用ALTER TABLE拓寬一個(gè)狹窄的TIMESTAMP列 以前被 隱蔽 的信息將被顯示 同樣 縮小一個(gè)TIMESTAMP列不會(huì)導(dǎo)致信息失去 除了感覺上值在顯示時(shí) 較少的信息被顯示出 盡管TIMESTAMP值被存儲(chǔ)為完整精度 直接操作存儲(chǔ)值的唯一函數(shù)是UNIX_TIMESTAMP() 由于MySQL返回TIMESTAMP列的列值是進(jìn)過格式化后的檢索的值 這意味著你可能不能使用某些函數(shù)來操作TIMESTAMP列(例如HOUR()或SECOND()) 除非TIMESTAMP值的相關(guān)部分被包含在格式化的值中 例如 一個(gè)TIMESTAMP列只有被定義為TIMESTAMP( )以上時(shí) TIMESTAMP列的HH部分才會(huì)被顯示 因此在更短的TIMESTAMP值上使用HOUR()會(huì)產(chǎn)生一個(gè)不可預(yù)知的結(jié)果 不合法TIMESTAMP值被變換到適當(dāng)類型的 零 值( ) (DATETIME DATE亦然) 你可以使用下列語句來驗(yàn)證 CREATE TABLE test ( id INT ( ) UNSIGNED AUTO_INCREMENT date TIMESTAMP ( ) PRIMARY KEY( id ));INSERT INTO test SET id = ;SELECT * FROM test;+ + +| id | date |+ + +| | |+ + +ALTER TABLE test CHANGE date date TIMESTAMP( );SELECT * FROM test;+ + +| id | date |+ + +| | |+ + +你可以使用TIMESTAMP列類型自動(dòng)地用當(dāng)前的日期和時(shí)間標(biāo)記INSERT或UPDATE的操作 如果你有多個(gè)TIMESTAMP列 只有第一個(gè)自動(dòng)更新 自動(dòng)更新第一個(gè)TIMESTAMP列在下列任何條件下發(fā)生 列值沒有明確地在一個(gè)INSERT或LOAD DATA INFILE語句中指定 列值沒有明確地在一個(gè)UPDATE語句中指定且另外一些的列改變值 (注意一個(gè)UPDATE設(shè)置一個(gè)列為它已經(jīng)有的值 這將不引起TIMESTAMP列被更新 因?yàn)槿绻阍O(shè)置一個(gè)列為它當(dāng)前的值 MySQL為了效率而忽略更改 ) 你明確地設(shè)定TIMESTAMP列為NULL 除第一個(gè)以外的TIMESTAMP列也可以設(shè)置到當(dāng)前的日期和時(shí)間 只要將列設(shè)為NULL 或NOW() CREATE TABLE test ( id INT ( ) UNSIGNED AUTO_INCREMENT date TIMESTAMP ( ) date TIMESTAMP ( ) PRIMARY KEY( id ) );INSERT INTO test (id date date ) VALUES ( NULL NULL);INSERT INTO test SET id= ;+ + + +| id | date | date |+ + + +| | | || | | |+ + + + 第一條指令因設(shè)date date 為NULL 所以date date 值均為當(dāng)前時(shí)間 第二條指令因沒有設(shè)date date 列值 第一個(gè)TIMESTAMP列date 為更新為當(dāng)前時(shí)間 而二個(gè)TIMESTAMP列date 因日期不合法而變?yōu)?UPDATE test SET id= WHERE id= ;+ + + +| id | date | date |+ + + +| | | || | | |+ + + + 這條指令沒有明確地設(shè)定date 的列值 所以第一個(gè)TIMESTAMP列date 將被更新為當(dāng)前時(shí)間UPDATE test SET id= date =date date =NOW() WHERE id= ;+ + + +| id | date | date |+ + + +| | | || | | |+ + + + 這條指令因設(shè)定date =date 所以在更新數(shù)據(jù)時(shí)date 列值并不會(huì)發(fā)生改變 而因設(shè)定date =NOW() 所以在更新數(shù)據(jù)時(shí)date 列值會(huì)被更新為當(dāng)前時(shí)間 此指令等效為 UPDATE test SET id= date =date date =NULL WHERE id= ; 因MySQL返回的 TIMESTAMP 列為數(shù)字顯示形式 你可以用DATE_FROMAT()函數(shù)來格式化 TIMESTAMP 列SELECT id DATE_FORMAT(date %Y %m %d %H:%i:%s ) As date DATE_FORMAT(date %Y %m %d %H:%i:%s ) As date FROM test;+ + + +| id | date | date |+ + + +| | : : | : : || | : : | : : |+ + + +SELECT id DATE_FORMAT(date %Y %m %d ) As date DATE_FORMAT(date %Y %m %d ) As date FROM test; + + + +| id | date | date |+ + + +| | | || | | |+ + + +在某種程度上 你可以把一種日期類型的值賦給一個(gè)不同的日期類型的對象 然而 而尤其注意的是 值有可能發(fā)生一些改變或信息的損失 如果你將一個(gè)DATE值賦給一個(gè)DATETIME或TIMESTAMP對象 結(jié)果值的時(shí)間部分被設(shè)置為 : : 因?yàn)镈ATE值中不包含有時(shí)間信息 如果你將一個(gè)DATETIME或TIMESTAMP值賦給一個(gè)DATE對象 結(jié)果值的時(shí)間部分被刪除 因?yàn)镈ATE類型不存儲(chǔ)時(shí)間信息 盡管DATETIME DATE和TIMESTAMP值全都可以用同樣的格式集來指定 但所有類型不都有同樣的值范圍 例如 TIMESTAMP值不能比 早 也不能比 晚 這意味著 一個(gè)日期例如 當(dāng)作為一個(gè)DATETIME或DATE值時(shí)它是合法的 但它不是一個(gè)正確TIMESTAMP值!并且如果將這樣的一個(gè)對象賦值給TIMESTAMP列 它將被變換為 當(dāng)指定日期值時(shí) 當(dāng)心某些缺陷 允許作為字符串指定值的寬松格式能被欺騙 例如 因?yàn)?: 分隔符的使用 值 : : 可能看起來像時(shí)間值 但是如果在一個(gè)日期中使用 上下文將作為年份被解釋成 值 : : 將被變換到 因?yàn)?不是一個(gè)合法的月份 以 位數(shù)字指定的年值是模糊的 因?yàn)槭兰o(jì)是未知的 MySQL使用下列規(guī)則解釋 位年值 在 范圍的年值被變換到 在范圍 的年值被變換到 lishixinzhi/Article/program/MySQL/201311/11205