資料表相關操作
資料表是由行和列組成的二維網路,為什麼說MySQL是典型的關係型資料庫,就是因為表和表之間存在關係
資料表相關操作
-
資料表
- 是資料庫最重要的成分之一,資料是儲存在資料表中的
- 資料表由行(row)和列(column)組成
- 每個資料表中至少有一列,行可以有零行、一行或者多行組成
- 表明要求唯一,不要含有特殊字元,最好含義明確
-
建立表
-
CREATE TABLE [IF NOT EXISTS] tbl_name{
欄位名稱 欄位型別 [完整性約束條件],
欄位名稱 欄位型別 [完整性約束條件],
…
}ENGINE = 儲存引擎 CHARSET = 編碼方式;
-
欄位名稱,如:使用者名稱(userName),年齡(age),編號(id)等
我們儘量不要使用中文,儘量使用英文
可以使用COMMENT給欄位加註釋
-
完整性約束條件
- UNSIGNED:無符號,沒有負數,從0開始
- ZEROFILL:零填充,當資料的顯示長度不夠的時候可以使用前補0的效果填充至指定長度
- NOT NULL:非空約束,也就是插入值的時候這個欄位必須要給值,並且值不能為空值
- DEFAULT:預設值,如果插入記錄的時候沒有給欄位賦值,則使用預設值。一般配合NOT NULL來使用
- PRIMARY KEY:主鍵,標識記錄的唯一性,一個表只能有一個主鍵,自動禁止為空
- UNIQUE KEY:唯一性,一個表中可以有多個欄位是唯一索引,同樣的值不能重複,但是NULL值除外
- AUTO_INCREMENT:自動增長,只能用於數值列,而且配合索引。一般我們給主鍵一個自動增長,實現一個自動化的效果。預設起始值從1開始,每次增長1。在測試UNIQUE時發現,就算記錄插入失敗了,AUTO_INCREMENT還是會自動增加。我們如果想讓它自動增長,並且在插入記錄的時候寫了它,只能給它NULL。
- FOREIGN KEY:外來鍵約束
-
CHECK:CHECK(條件)檢查約束,在插入記錄時,必須要滿足檢查約束中的內容,條件的邏輯可以用or或者and來連線
-
-
-
MySQL中的資料型別
-
數值型
-
整數型
我們可以根據我們資料物件的不同選用不同的型別。比如記錄中國的人口,那麼就有十幾億,我們就要選擇較大的型別。選擇記錄一個班級,那麼我們可以選擇TINYINT,並且應該是無符號值,因為人數不會為負數。
-
浮點數型
M代表浮點數的總長度,D代表小數點後幾位。如:(9,2)代表它的小數位是兩位,然後小數點前是七位。
DECIMAL是定點數。
DOUBLE型別是存在誤差的,如果對精度要求較高,可以使用定點數,因為它的內部是用字串的形式儲存數值的(我也不知道為什麼這樣精度更高(* ̄(oo) ̄))
浮點型的儲存範圍比整數型要大。
-
-
字串型別
CHAR是一種固定長度的型別,VARCHAR則是一種可變長度的型別
例如:
我們定義一個地址欄位,我們寫CHAR(50),代表最大長度為50個字元,而VARCHAR(50)代表0~50個字元之間;
在儲存空間上來說,如果只是往CHAR(50)中存入一個a,那麼也要佔用50個位元組;如果往VARCHAR(50)中存入一個a,那麼只佔用2個位元組,即長度+1個位元組(那多出來的1個是儲存我們的長度的)
由此,CHAR是比較浪費空間的,而VARCHAR則會根據你給的內容的多少來分配空間。
但是有好處也有弊端,因為它們的儲存方式,包括它們的檢索方式不一樣,CHAR型別的檢索速度比VARCAHR要快。可以想象成CHAR是拿空間換時間,而VARCHAR是拿時間換空間
CHAR在儲存值的時候,如果內容達不到指定的長度,後面會用空格來填充到指定的長度,但是在檢索和查詢這個資料的時候,它會把後面的空格給去掉。而VARCHAR在儲存時不進行填充,尾部的空格會留下。這就是CHAR和VARCHAR在儲存方式上的不同。
如何選擇?
如果明確的知道儲存內容的長度,那麼就可以使用CHAR;不固定的長度則可以選用VARCHAR。當然,如果儲存的長度大於255,那麼就不能選擇CHAR了。
下面還有一堆TEXT型別的,可以儲存文章、新聞內容。注意:TEXT相關的列不能有預設值;檢索的時候不存在大小寫轉換,即區分大小寫;儲存效率沒有CHAR或者VARCHAR高
**ENUM型別:**在這個型別中,每一個值都有一個序號,按序號來進行排列。儲存的時候儲存的也不是這個值,而是這個值對應的編號。列舉型別會自動過濾掉空格。
**SET型別:**可以和ENUM型別對照的去看,同樣的每一個值都有一個序號,儲存的時候儲存的也不是這個值,而是這個值對應的編號。同樣這個值後面的空格也會把它去掉。集合還有一個特性,在插入的時候,我們不用按照它的順序來寫,它會按照指定的列表中的順序來重新排列。**應用:**使用者的許可權。如MySQL資料庫中建立資料庫,建表,增刪改查。我們可以建立集合來給不同的使用者不同的許可權
-
日期時間型別
-
TIME佔用的記憶體是3個位元組,如果我們儲存單個的時間還是可以的,將來我們可以使用整型並利用時間戳來儲存時間
DATETIME就是TIME和DATE的結合版,不過在時間容量上沒有TIME大
TIMESTAMP和DATETIME基本一致,插入值的形式是一樣的,不過前者的時間和日期的範圍比後者更小。並且前者是自動帶有時區的,它會根據你係統的時區來獲得值
**YEAR:**根據手冊範圍是1000到9999,但是實際測試是1901~2155。它的佔用位元組數很小,當我們只考慮儲存年份的時候,我們可以使用year。
-
-
檢視當前資料庫下已有資料表
-
SHOW TABLES;
手冊中的語法
SHOW [EXTENDED] [FULL] TABLES
[{FROM | IN} db_name]
[LIKE ‘pattern’ | WHERE expr]其中FULL是預設的,也可以不寫,使用FROM或者IN可以不用開啟資料庫就檢視錶,最後一行是帶有正規表示式的語句,我們先暫時不用理他
-
-
檢視指定資料表的詳細資訊
- SHOW CREATE TABLE tbl_name;
-
檢視錶結構
- DESC tbl_name;
- DESCRIBE tbl_name;
- SHOW COLUMNS FROM tbl_name;
-
刪除指定的資料表
- DROP TABLE [IF EXISTS] tbl_name;
-
查詢表中所有記錄
- SELECT * FROM tbl_name 其中*表示所有的欄位,如果寫的是*,那麼所有的欄位都會被查出來
-
查詢非預設資料庫中的表資訊
- SELECT * FROM db_name.tbl_name;
因為欄位名稱會一下子定義很多個,所以我們可以先在編輯器裡面打好,然後再複製到命令列中去(但是我複製到命令列後,在編輯器裡不同行的語句直接都擠到了一起,難受死了/(ㄒoㄒ)/~~)
例項:使用者名稱錶
-- 使用者名稱錶
CREATE TABLE IF NOT EXISTS imooc_user(
id INT,
username VARCHAR(20),
password CHAR(32),
email VARCHAR(50),
age TINYINT,
card CHAR(18),
tel CHAR(11),
salary FLOAT(8,2),
married TINYINT(1),
addr VARCHAR(100),
sex ENUM('男','女','保密')
)ENGINE=INNODB,CHARSET=UTF8; #這裡它預設的儲存引擎就是這個東東
-- 向表中插入記錄
-- INSERT [INTO] tbl_name(id,username,...) VALUES(1,...)
INSERT INTO imooc_user(id,username,password,email,age,card,tel,salary,married,addr,sex)
VALUES(1,'hanghang','hanghang','1005130450@qq.com',20,330328200103273913,15258496596,0,0,'浙江省','男');
-- 查詢表中所有記錄 SELECT * FROM tbl_name 其中*表示所有的欄位,如果寫的是*,那麼所有的欄位都會被查出來
INSERT INTO imooc_user(id,username,password,email,age,card,tel,salary,married,addr,sex)
VALUES(-5,'hanghang','hanghang','1005130450@qq.com',127,'330328200103273913','15258496596',0,1,'浙江省','女');
測試資料型別
測試整型
-- 測試整型
CREATE TABLE test_int(
a TINYINT,
b SMALLINT,
c MEDIUMINT,
d INT,
f BIGINT
);
我們在建立表的時候並沒有給上括號,但是在建立後檢視錶結構,發現每一個後面都跟著一個括號,我們來拿tinyint舉例說明。
這裡面的(4)表示的是顯示寬度,tinyint我們沒有指定它是否無符號,它的範圍是從-128~127,負數-128顯示的時候正好是4位,所以寬度位4。其它幾項亦如此
-- 可以只插入一個值
INSERT INTO test_int(a) VALUES(-128);
INSERT INTO test_int(a) VALUES(-129);
超出範圍,會報錯,並且無法插入
測試無符號整型
-- 測試無符號
CREATE TABLE test_unsigned(
a tinyint,
b tinyint unsigned
);
INSERT INTO test_unsigned(a,b) VALUES(-12,-12);
INSERT INTO test_unsigned(a,b) VALUES(0,0);
INSERT INTO test_unsigned(a,b) VALUES(0,256);
同理,超出範圍直接報錯
測試零填充
-- 測試零填充 ZEROFILL
CREATE TABLE test_int1(
a TINYINT ZEROFILL,
b SMALLINT ZEROFILL,
c MEDIUMINT ZEROFILL,
d INT ZEROFILL,
f BIGINT ZEROFILL
);
INSERT test_int1(a,b,c,d,f) VALUES(1,1,1,1,1);
我們可以發現加了零填充之後,直接就加上了unsigned,就不能位負了,tinyint括號裡面的數字也變成了3
但是這個顯示長度並不能限制我們插入資料的一個結果,它只是為了資料結構格式的統一與好看
CREATE TABLE test_int2(
a tinyint(2),
b smallint(2)
);
INSERT INTO test_int2(a,b) VALUES(123,4567);
測試浮點型
-- 測試浮點型
CREATE TABLE test_float(
a FLOAT(6,2),
b DOUBLE(6,2),
c DECIMAL(6,2)
);
INSERT INTO test_float(a,b,C) VALUES(4.143,4.146,4.149);
CREATE TABLE test_float1(
a FLOAT,
b DOUBLE,
c DECIMAL
);
INSERT INTO test_float1(a,b,C) VALUES(4.143,4.146,4.149);
INSERT INTO test_float1(a,b,C) VALUES(4.143,4.146,4.649);
我們在test_float表中,給各個欄位的浮點型設定了小數點位數為2位。我們可以發現,它們都保留兩位小數並進行了四捨五入。但是decimal報了警告被截斷。我們繼續來看test_float1表。
這一次,我們沒有給它們設定小數點位數的限制,但是decimal又進行了四捨五入,並且還是報了被截斷的警告,下面也同理,這是因為decimal預設儲存的是整數,如果對精度要求較高,選擇decimal型別??????
測試字串
測試CHAR和VARCHAR
-- 測試CHAR和VARCHAR
CREATE TABLE test_str(
a CHAR(5),
b VARCHAR(5)
);
INSERT INTO test_str(a,b) VALUES('','');
INSERT INTO test_str(a,b) VALUES('a','a');
INSERT INTO test_str(a,b) VALUES('ab','ab');
INSERT INTO test_str(a,b) VALUES('abc','abc');
INSERT INTO test_str(a,b) VALUES('abcd','abcd');
INSERT INTO test_str(a,b) VALUES('abcde','abcde');
INSERT INTO test_str(a,b) VALUES('abcdef','abcdef');
INSERT INTO test_str(a,b) VALUES(' 123 ',' 123 ');
SELECT CONCAT('*',a,'*'),CONCAT('*',b,'*') FROM test_str;
前面的插入都是正常的
我們用第14行和第16行的語句來體現CHAR和VARCHAR的不同,第16行的語句也就是在欄位的前後加東西
我們可以發現在char那裡末尾的空格給刪掉了,這是因為CHAR在儲存值的時候,如果內容達不到指定的長度,後面會用空格來填充到指定的長度,但是在檢索和查詢這個資料的時候,它會把後面的空格給去掉。這就是CHAR和VARCHAR在儲存方式上的不同。
測試TEXT不能有預設值
-- 測試TEXT不能有預設值
CREATE TABLE test_str1(
context TEXT DEFAULT 'THIS IS A TEXT'
);
測試enum型別
-- 測試enum
CREATE TABLE test_enum(
sex ENUM('男','女','保密')
);
INSERT INTO test_enum(sex) VALUES('男');
INSERT INTO test_enum(sex) VALUES('男1');
-- 沒有指定這個欄位不能為空,所以可以指定這個NULL值
INSERT INTO test_enum(sex) VALUES(NULL);
-- 1對應的是男
INSERT INTO test_enum(sex) VALUES(1);
INSERT INTO test_enum(sex) VALUES(3);
INSERT INTO test_enum(sex) VALUES(5);
插入enum中不存在的東東,是會報錯的。
沒有指定這個欄位不能為空,所以可以指定這個NULL值。
這個下標對應的從1開始,如果超出列舉數目則會報錯
CREATE TABLE test_enum1(
sex ENUM('男 ','女','保密 ')
);
INSERT INTO test_enum1(sex) VALUES('男');
列舉型別會自動過濾掉空格
測試SET型別
-- 測試SET
CREATE TABLE IF NOT EXISTS test_set(
a SET('A','B','C','D','E','F')
);
INSERT INTO test_set(a) VALUES('A');
INSERT INTO test_set(a) VALUES('C');
INSERT INTO test_set(a) VALUES('C,D,E');
-- 會自動地幫你排序好
INSERT INTO test_set(a) VALUES('C,F,A');
-- 插入集合中沒有地會報錯,插入失敗
INSERT INTO test_set(a) VALUES('C,F,A,H');
-- 插入序號為2的那一項
INSERT INTO test_set(a) VALUES(2);
-- 會轉換大小寫,集合中是大寫地,插入小寫地也插入成功了
INSERT INTO test_set(a) VALUES('c,f,a');
1~8行都是顯然的
第十行,會自動幫你按照你建立欄位時的順序幫你排序好。
第十二行,插入集合中沒有的東東會報錯
第十四行插入的是序號為2的那一項
第十六行,會自動地轉換大小寫
測試日期和時間型別
測試TIME型別
-- 測試日期時間型別
-- TIME型別的時間範圍是-838:59:59~838:59:59 HH:MM:SS
-- 為什麼會這麼大呢 其實還有可選的定義方式 [D] HH:MM:SS
-- D表示天數,範圍為0~34,如:2 3:23:45 即 51:23;45 所以才會有那麼大的範圍
-- 測試TIME型別
CREATE TABLE IF NOT EXISTS test_time(
a TIME
);
INSERT INTO test_time(a) VALUES('12:43:45');
INSERT INTO test_time(a) VALUES('2 12:43:45');
INSERT INTO test_time(a) VALUES('22:22');
INSERT INTO test_time(a) VALUES('22');
-- ERROR 1292 (22007): Incorrect time value: '22:' for column 'a' at row 1
INSERT INTO test_time(a) VALUES('22:');
INSERT INTO test_time(a) VALUES('2 22');
-- 相當於HHMMSS
INSERT INTO test_time(a) VALUES('121212');
-- 都相當於00:00:00
INSERT INTO test_time(a) VALUES(0);
INSERT INTO test_time(a) VALUES('0');
INSERT INTO test_time(a) VALUES(1212); -- 00:12:12
INSERT INTO test_time(a) VALUES(121212); -- 12:12:12
-- ERROR 1292 (22007): Incorrect time value: '787878' for column 'a' at row 1
INSERT INTO test_time(a) VALUES(787878);
-- 系統函式NOW()和CURRENT_TIME會直接取當前系統時間
INSERT INTO test_time(a) VALUES(NOW());
INSERT INTO test_time(a) VALUES(CURRENT_TIME());
測試DATA型別
-- 測試DATA型別 YYYYMMDD YYYY-MM-DD
CREATE TABLE IF NOT EXISTS test_date(
a DATE
);
INSERT INTO test_date(a) VALUES('2020-9-25');
INSERT INTO test_date(a) VALUES('2020-09-01');
INSERT INTO test_date(a) VALUES('4007-03-27');
-- 會自動轉換成4007-12-12
INSERT INTO test_date(a) VALUES('40071212');
-- MySQL中還支援一些不嚴格的語法格式 可以指定一些任意的分隔符,來當作我們日期時間的分割符,但是讀出表後還是-連線的
INSERT INTO test_date(a) VALUES('4007.11.11');
INSERT INTO test_date(a) VALUES('4008@12@12');
-- ERROR 1292 (22007): Incorrect date value: '4009.13.13' for column 'a' at row 1
INSERT INTO test_date(a) VALUES('4009.13.13');
-- 還可以使用兩位的年份,在70~99之間,會轉換成1970~1999;在00~69之間會轉換成2000~2069之間
-- YY-MM-DD YYMMDD
INSERT INTO test_date(a) VALUES('780902');
INSERT INTO test_date(a) VALUES('690327');
-- 使用庫函式插入系統時間
INSERT INTO test_date(a) VALUES(NOW());
INSERT INTO test_date(a) VALUES(CURRENT_DATE);
在第23行使用NOW()插入系統時間會報警告,顯示又有時間又有日期,但是前面測試TIME的時候並沒有出現這樣的問題
測試DATETIME型別
-- 測試DATETIME型別
CREATE TABLE IF NOT EXISTS test_datetime(
a DATETIME
);
INSERT INTO test_datetime(a) VALUES('2020-09-01 00:00:00');
-- 1972-03-05 12:12:12
INSERT INTO test_datetime(a) VALUES('720305121212');
-- 使用庫函式插入時間
INSERT INTO test_datetime(a) VALUES(NOW());
測試TIMESTAMP型別
-- 測試TIMESTAMP
CREATE TABLE IF NOT EXISTS test_timestamp(
a TIMESTAMP
);
INSERT INTO test_timestamp(a) VALUES('1978-10-23 12:12:12');
-- 插入CURRENT_TIMESTAMP得到當前系統時間和日期
INSERT INTO test_timestamp(a) VALUES(CURRENT_TIMESTAMP);
INSERT INTO test_timestamp(a) VALUES(NULL);
測試完整性約束條件
測試主鍵和AUTO_INCREMENT
-- 測試主鍵
CREATE TABLE IF NOT EXISTS test_primary_key(
id INT UNSIGNED PRIMARY KEY,
username VARCHAR(20)
);
INSERT INTO test_primary_key(id,username) VALUES(1,'king');
-- ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
INSERT INTO test_primary_key(id,username) VALUES(1,'king123');
-- ERROR 1364 (HY000): Field 'id' doesn't have a default value
INSERT INTO test_primary_key(username) VALUES('queen');
-- 不打PRIMARY的表結構和打了是一樣的
CREATE TABLE IF NOT EXISTS test_primary_key1(
id INT UNSIGNED KEY,
username VARCHAR(20)
);
-- 還可以通過PRIMARY KEY(id)的方式來指定主鍵 對於多欄位主鍵 用這種方式比較方便
CREATE TABLE IF NOT EXISTS test_primary_key2(
id INT UNSIGNED,
username VARCHAR(20),
PRIMARY KEY(id)
);
-- ERROR 1068 (42000): Multiple primary key defined
-- 一個表只能有一個主鍵 但是一個表可以有複合主鍵(很多個欄位共同組成的主鍵)
CREATE TABLE IF NOT EXISTS test_primary_key3(
id INT UNSIGNED PRIMARY KEY,
courseId INT UNSIGNED PRIMARY KEY,
username VARCHAR(20),
email VARCHAR(50)
);
我們可以通過檢視錶結構來觀察,可以看到id的Key那一欄標了PRI,Null那一欄標了NO
複合主鍵
-- 複合主鍵
CREATE TABLE IF NOT EXISTS test_primary_key4(
id INT UNSIGNED,
courseId VARCHAR(20),
username VARCHAR(20),
email VARCHAR(50),
PRIMARY KEY(id, courseId)
);
-- 1-a
INSERT INTO test_primary_key4(id,courseId,username,email)
VALUES(1,'a','king','1005130450@qq.com');
-- 1-b
INSERT INTO test_primary_key4(id,courseId,username,email)
VALUES(1,'b','king','1005130450@qq.com');
-- 2-a
INSERT INTO test_primary_key4(id,courseId,username,email)
VALUES(2,'a','king','1005130450@qq.com');
-- 1-a
-- ERROR 1062 (23000): Duplicate entry '1-a' for key 'PRIMARY'
INSERT INTO test_primary_key4(id,courseId,username,email)
VALUES(1,'a','king','1005130450@qq.com');
觀察一下它的表結構,它實際上就是一個由多個欄位組合起來的鍵
測試AUTO_INCREMENT
-- 測試AUTO_INCREMENT
-- 這個AUTO_INCRMENT要配合主鍵來使用,如果往不是主鍵的欄位上面來加,就會報下面的錯誤
-- ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
CREATE TABLE test_auto_increment(
id INT UNSIGNED KEY AUTO_INCREMENT,
username VARCHAR(20)
);
INSERT INTO test_auto_increment(username) VALUES('a');
INSERT INTO test_auto_increment(username) VALUES('b');
INSERT INTO test_auto_increment(username) VALUES('c');
-- 可以直接在id的VALUE那填NULL或者DEFAULT,它可以自動實現增長
INSERT INTO test_auto_increment(id,username) VALUES(NULL,'d');
INSERT INTO test_auto_increment(id,username) VALUES(DEFAULT,'e');
-- 也可以直接跳著自己指定,不過這樣子下一個增長的id就變成了16
INSERT INTO test_auto_increment(id,username) VALUES(15,'f');
這裡的AUTO_INCREMENT就是下一次自動增長成的值
測試非空
-- 測試非空
CREATE TABLE IF NOT EXISTS test_not_null(
a VARCHAR(20),
b VARCHAR(20) NOT NULL
);
INSERT INTO test_not_null(a,b) VALUES('','');
-- ERROR 1048 (23000): Column 'b' cannot be null
INSERT INTO test_not_null(a,b) VALUES(NULL,NULL);
INSERT INTO test_not_null(a,b) VALUES(NULL,'abc');
-- ERROR 1364 (HY000): Field 'b' doesn't have a default value
-- 檢視錶結構我們可以發現 欄位b的NULL那一欄是NO,代表不能為空 但是它的default那一欄是NULL 所以這就起了矛盾
INSERT INTO test_not_null(a) VALUES('TEST');
測試預設值
-- 測試預設值default
CREATE TABLE IF NOT EXISTS test_default(
id INT UNSIGNED AUTO_INCREMENT KEY,
username VARCHAR(20) NOT NULL,
age TINYINT UNSIGNED DEFAULT 18,
email VARCHAR(50) NOT NULL DEFAULT '1005130450@qq.COM'
);
INSERT INTO test_default(username) VALUES('HANGHANG');
-- 給帶有預設值的值賦值,會將預設值覆蓋掉
INSERT INTO test_default(username,age,email) VALUES('B',30,'imooc@qq.com');
INSERT INTO test_default(username,age,email) VALUES('C',NULL,'izhu@qq.com');
-- ERROR 1048 (23000): Column 'email' cannot be null
INSERT INTO test_default(username,age,email) VALUES('D',NULL,NULL);
-- 打default就是插入預設值
INSERT INTO test_default(username,age,email) VALUES('E',NULL,DEFAULT);
-- 列舉型別配合default
CREATE TABLE IF NOT EXISTS test_default1(
sex ENUM('男','女','保密') NOT NULL DEFAULT '保密'
);
INSERT INTO test_default1(sex) VALUES(DEFAULT);
-- 給列舉型別設定預設值的時候 如果不設定在列舉項中的預設值會報錯
-- ERROR 1067 (42000): Invalid default value for 'sex'
CREATE TABLE IF NOT EXISTS test_default2(
sex ENUM('男','女','保密') NOT NULL DEFAULT '不是列舉中的'
);
學完資料型別和完整性約束條件後重建使用者表
-- 學完資料型別、完整性約束條件後重寫使用者名稱錶
CREATE TABLE IF NOT EXISTS `imooc_user1`(
`id` INT UNSIGNED AUTO_INCREMENT KEY COMMENT '使用者編號',
`username` VARCHAR(20) NOT NULL UNIQUE COMMENT '使用者名稱',
`password` VARCHAR(32) NOT NULL COMMENT '密碼',
`email` VARCHAR(50) NOT NULL UNIQUE COMMENT '郵箱',
`age` TINYINT NOT NULL DEFAULT 18 COMMENT '年齡',
`sex` ENUM('男','女','保密') NOT NULL DEFAULT '保密' COMMENT '性別,預設為保密',
`tel` CHAR(11) NOT NULL UNIQUE COMMENT '電話號碼',
`addr` VARCHAR(50) NOT NULL COMMENT '住址',
`card` CHAR(18) NOT NULL UNIQUE COMMENT '身份證號碼',
`married` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '非0已婚,0為未婚',
`salary` FLOAT(8,2) NOT NULL DEFAULT 0 COMMENT'工資'
)ENGINE=INNODB DEFAULT CHARSET=UTF8;
相關文章
- Mysql運維-資料庫及表相關操作MySql運維資料庫
- Oracle - 表相關常用操作語句Oracle
- 《資料庫》基礎題一:兩表相關查詢資料庫
- 埋點表相關
- mybatise外掛反向生成資料庫表相關Java程式碼MyBatis資料庫Java
- oracle報表相關指令碼Oracle指令碼
- Oracle臨時表相關知識Oracle
- 刪除a表中和b表相同的資料
- 資料庫有關操作資料庫
- 關於SqlServer資料表操作SQLServer
- C#連線Oracle資料庫,通過EF自動生成與資料庫表相關的實體類C#Oracle資料庫
- MySQL鎖表相關問題查詢思路MySql
- 轉:Mysql 分割槽 分表相關總結MySql
- 和分割槽表相關的一點總結
- SQLALchemy操作MySQL關係型資料庫MySql資料庫
- mysqlclient操作MySQL關係型資料庫MySqlclient資料庫
- FastAPI(44)- 操作關係型資料庫ASTAPI資料庫
- .NET關於資料庫操作的類-囊括所有的操作資料庫
- MSSQL系列 (一):資料庫的相關操作SQL資料庫
- 關於流資料上的事務操作
- Oracle 11g資料庫相關操作Oracle資料庫
- 關於操作失誤的資料修復
- 關於資料庫操作多個操作組合的處理資料庫
- 關於資料庫操作的封裝程式碼資料庫封裝
- Python基礎之列表相關知識-day5Python
- 常用操作 / 資料庫操作資料庫
- Redis 五種資料型別和相關操作命令Redis資料型別
- Oracle 資料庫常見檔案及相關操作Oracle資料庫
- 開發:異常收集之 DB2建表相關問題DB2
- 資料庫操作資料庫
- 資料夾操作
- perl資料操作
- 資料庫操作·資料庫
- python中列表相加Python
- c#資料操作:資料庫訪問 和 檔案操作C#資料庫
- 值得白嫖的資料庫常用操作語句彙總(資料庫、資料表、資料操作)資料庫
- C# 資料操作系列 - 6 EF Core 配置對映關係C#
- 從零自學Hadoop(20):HBase資料模型相關操作上Hadoop模型