數(shù)據(jù)庫MySQL學(xué)習(xí)系列二
創(chuàng)新互聯(lián)建站從2013年成立,先為萬寧等服務(wù)建站,萬寧等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為萬寧企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
一.MYSQL數(shù)據(jù)庫對象與應(yīng)用
2.1-MySQL數(shù)據(jù)類型
· ×××
· 浮點(diǎn)型
· INT
· SMALLINT
· MEDIUMINT
· BIGINT
type | Storage | Minumun Value | Maximum Value |
(Bytes) | (Signed/Unsigned) | (Signed/Unsigned) | |
TINYINT | 1 | -128 | 127 |
0 | 255 | ||
SMALLINT | 2 | -32768 | 32767 |
0 | 65535 | ||
MEDIUMINT | 3 | -8388608 | 8388607 |
0 | 16777215 | ||
INT | 4 | -2147483648 | 2147483647 |
0 | 4294967295 | ||
BIGINT | 8 | -9223372036854775808 | 9223372036854775807 |
0 | 18446744073709551615 |
int(11) VS int(21) 存儲空間,還是存儲范圍有區(qū)別?
答案是:兩者完全一樣,只是在顯示的時(shí)候補(bǔ)全0的位數(shù)不一樣。
可以通過下面的例子來驗(yàn)證:
create table t(aint(11) zerofill, bint(21) zerofill);insert into tvalues (1,1);select * from t;
MySQL默認(rèn)是不帶0補(bǔ)全的。
只是在一些特殊情況下兩者顯示有區(qū)別,其本質(zhì)完全一樣。
· FLOAT(M, D)
· DOUBLE(M, D)
屬性 | 存儲空間 | 精度 | 精確性 |
Float | 4 bytes | 單精度 | 非精確 |
Double | 8 bytes | 雙精度 | 比Float精度高 |
· 精度丟失
一個(gè)例子:
create table t(aint(11), b float(7,4));insert into tvalues (2,123.12345);select * from t;
· DECIMAL
o 高精度的數(shù)據(jù)類型,常用來存儲交易相關(guān)的數(shù)據(jù)
o DECIMAL(M,N).M代表總精度,N代表小數(shù)點(diǎn)右側(cè)的位數(shù)(標(biāo)度)
o 1 < M < 254, 0 < N < 60;
o 存儲空間變長
一般使用tinyint、char(1)、enum類型。
· 存儲性別、省份、類型等分類信息時(shí)選擇TINYINT或者ENUM
· BIGINT存儲空間更大,INT和BIGINT之間通常選擇BIGINT
· 交易等高精度數(shù)據(jù)選擇使用DECIMAL
· CHAR
· VARCHAR
· TEXT
· CHAR和VARCHAR存儲的單位都是字符
· CHAR存儲定長,容易造成空間的浪費(fèi)
· VARCHAR存儲變長,節(jié)省存儲空間
編碼\輸入字符串 | 網(wǎng)易 | netease |
gbk(雙字節(jié)) | varchar(2)/4 bytes | varchar(7)/7 bytes |
utf8(三字節(jié)) | varchar(2)/6 bytes | varchar(7)/7 bytes |
utf8mb4(四字節(jié)) | varchar(2) ? | varchar(7)/7 bytes |
對于utf8mb4號稱占用四字節(jié)但是并不絕對。如果在utf8可以覆蓋到的范圍則仍然占用3字節(jié)。
utf8mb4最有優(yōu)勢的應(yīng)用場景是用于存儲emoji表情
· MySQL版本 > 5.5.3
· JDBC驅(qū)動(dòng)版本 > 5.1.13
· 庫和表的編碼設(shè)為utf8mb4
· CHAR和VARCHAR存儲單位為字符
· TEXT存儲單位為字節(jié),總大小為65535字節(jié),約為64KB
· CHAR數(shù)據(jù)類型最大為255字符
· VARCHAR數(shù)據(jù)類型為變長存儲,可以超過255個(gè)字符
· TEXT在MySQL內(nèi)部大多存儲格式為溢出頁,效率不如CHAR
一個(gè)例子:
create table t (achar(256));create table t (avarchar(256));
· BLOB
· BINARY
性能太差,不推薦
· CHAR與VARCHAR定義的長度是字符長度不是字節(jié)長度
· 存儲字符串推薦使用VARCHAR(N),N盡量小
· 雖然數(shù)據(jù)庫可以存儲二進(jìn)制數(shù)據(jù),但是性能低下,不要使用數(shù)據(jù)庫存儲文件音頻等二進(jìn)制數(shù)據(jù)
· DATE
· TIME
· DATETIME
· TIMESTAMP
· BIGINT
·
存儲空間上的區(qū)別
·
o DATE三字節(jié),如:2015-05-01
o TIME三字節(jié),如:11:12:00
o TIMESTAMP,如:2015-05-01 11::12:00
o DATETIME八字節(jié),如:2015-05-01 11::12:00
·
存儲精度的區(qū)別
·
o DATE精確到年月日
o TIME精確到小時(shí)分鐘和秒
o TIMESTAMP、DATETIME都包含上述兩者
· 存儲范圍的區(qū)別
o TIMESTAMP存儲范圍:1970-01-01 00::00:01 to 2038-01-19 03:14:07
o DATETIME的存儲范圍:1000-01-01 00:00:00 to 9999-12-31 23:59:59
MySQL在5.6.4版本之后,TimeStamp和DateTime支持到微妙
· 字段類型與市區(qū)的關(guān)聯(lián)關(guān)系
o TIMESTAMP會(huì)根據(jù)系統(tǒng)時(shí)區(qū)進(jìn)行轉(zhuǎn)換,DATETIME則不會(huì)
· 國際化的系統(tǒng)
一個(gè)例子:
create table test (a datetime, btimestamp);select now();insert into testvalues (now(), now());select * from test;set time_zone= '+00:00';select * from test;
· 應(yīng)用程序?qū)r(shí)間轉(zhuǎn)換為數(shù)字類型
· DataBase/Schema
· Table
· Index
· View/Trigger/Function/Procedure
· 一個(gè)DataBase對應(yīng)一個(gè)Schema
· 一個(gè)Schema包含一個(gè)或多個(gè)表
· 一個(gè)表里面包含一個(gè)或多個(gè)字段
· 一個(gè)表里包含一條或多條記錄
· 一個(gè)表包含一個(gè)或多個(gè)索引
· 業(yè)務(wù)隔離
· 資源隔離
· 索引
· 約束
· 視圖、觸發(fā)器、函數(shù)、存儲過程
· 讀書的時(shí)候如何快速定位某一章節(jié)
o 查找書籍目錄
o 在自己喜歡的章節(jié)加書簽,直接定位
· 索引就是數(shù)據(jù)庫中的數(shù)據(jù)的目錄(索引和數(shù)據(jù)是分開存儲的)
o 索引和數(shù)據(jù)是兩個(gè)對象
o 索引主要是用來提高數(shù)據(jù)庫的查詢效率
o 數(shù)據(jù)庫中數(shù)據(jù)變更同樣需要同步索引數(shù)據(jù)的變更
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
[index_type]
ON tbl_name (index_col_name,...)
[index_option]
[algorithm_option | lock_option] ...
index_col_name:
col_name [(length)] [ASC |DESC]
index_type:
USING {BTREE | HASH}
ALTER [IGNORE] TABLE tbl_name
[alter_specification [, alter_specification] ...]
[partition_options]
alter_specification:
table_options
| ADD [COLUMN] col_name column_definition
[FIRST | AFTER col_name]
ADD [COLUMN] (col_name column_definition,...)
ADD {INDEX|KEY} [index_name]
[index_type] (index_col_name,...) [index_option] ...
| ADD [CONSTRAINT [symbol]]PRIMARY KEY
[index_type] (index_col_name,...) [index_option] ...
| ADD [CONSTRAINT [symbol]]
UNIQUE [INDEX|KEY] [index_name]
· 生活中的約束有哪些
o 每個(gè)人的指紋信息必須唯一
o 每個(gè)人的×××要求唯一
o 網(wǎng)上購物需要先登錄才能下單
· 唯一約束
o 對一張表的某個(gè)字段或者某幾個(gè)字段設(shè)置唯一鍵約束,保證在這個(gè)表里對應(yīng)的數(shù)據(jù)必須唯一,如:用戶ID、手機(jī)號、×××等。
· 唯一約束是一種特殊的索引
· 唯一約束可以是一個(gè)或者多個(gè)字段
· 唯一約束可以在創(chuàng)建表的時(shí)候建好,也可以后面再補(bǔ)上
· 主鍵也是一種唯一約束
以如下這張表為例
CREATE TABLE `order` (
`id` int(10) unsignedNOT NULL AUTO_INCREMENT,
`orderid` int(10) unsignedNOT NULL,
`bookid` int(10) unsignedNOT NULL DEFAULT'0',
`userid` int(10) unsignedNOT NULL DEFAULT'0',
`number` tinyint(3) unsignedNOT NULL DEFAULT'0',
`address` varchar(128)NOT NULL DEFAULT'',
`postcode` varchar(128)NOT NULL DEFAULT'',
`orderdate` datetimeNOT NULL DEFAULT'0000-00-00 00:00:00',
`status` tinyint(3) unsigned zerofill DEFAULT'000',
PRIMARY KEY (`id`),
UNIQUE KEY`idx_orderid` (`orderid`),
UNIQUE KEY`idx_uid_orderid` (`userid`,`orderid`),
KEY`bookid` (`bookid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
· 索引有哪些
o 主鍵索引 ID
o 單鍵索引 orderid
o 單鍵索引 bookid
o 組合索引 (userid + orderid)
· 唯一約束有哪些
o 主鍵約束 (ID)
o 單鍵唯一索引 (orderid)
o 組合唯一索引 (userid + orderid)
· 添加主鍵
o alter table `order` add primary key (id);
· 添加唯一索引
o alter table `order` add unique key idx_uk_orderid (orderid);
· 外鍵指兩張表的數(shù)據(jù)通過某種條件關(guān)聯(lián)起來
· 將用戶表和訂單表通過外鍵關(guān)聯(lián)起來
o alter table `order` add CONSTRAINT constraint_uid FOREIGN KEY (userid) REFERENCES user(userid);
· 使用外鍵的注意事項(xiàng)
o 必須是INNODB表,Myisam和其他引擎不支持外鍵
o 相互約束的字段類型必須要求一樣
o 主表的約束字段要求有索引
o 約束名稱必須要唯一,即使不在一張表上
· 產(chǎn)品需求
o 假如有其他部門的同事想查詢我們數(shù)據(jù)庫里的數(shù)據(jù),但是我們并不想暴露表結(jié)構(gòu),并且只提供給他們部分?jǐn)?shù)據(jù)
· 視圖將一組查詢語句構(gòu)成的結(jié)果集,是一種虛擬結(jié)構(gòu),并不是實(shí)際數(shù)據(jù)
· 視圖能簡化數(shù)據(jù)庫的訪問,能夠?qū)⒍鄠€(gè)查詢語句結(jié)構(gòu)化為一個(gè)虛擬結(jié)構(gòu)
· 視圖可以隱藏?cái)?shù)據(jù)庫后端表結(jié)構(gòu),提高數(shù)據(jù)庫安全性
· 視圖也是一種權(quán)限管理,只對用戶提供部分?jǐn)?shù)據(jù)
· 創(chuàng)建已完成訂單的視圖
o create view order_view as select * from `order` where status=1;
· 產(chǎn)品需求
o 隨著客戶個(gè)人等級的提升, 系統(tǒng)需要自動(dòng)更新用戶的積分,其中一共有兩張表,分別為:用戶信息表和積分表
· Trigger俗稱觸發(fā)器,指可以在數(shù)據(jù)寫入表A之前或者之后可以做一些其他動(dòng)作
· 使用Trigger在每次更新用戶表的時(shí)候出發(fā)更新積分表
· Function
· Procedure
· 網(wǎng)絡(luò)要通暢
· 用戶名和密碼要正確
· 數(shù)據(jù)庫需要加IP白名單
· 更細(xì)粒度的驗(yàn)證(庫、表、列權(quán)限類型等等)
show privileges命令可以查看全部權(quán)限
· Data Privileges
o DATA: SELECT, INSERT, UPDATE, DELETE
· Definition Privileges
o DataBase: CREATE, ALTER, DROP
o Table: CREATE, ALTER, DROP
o VIEW/FUNCTION/TRIGGER/PROCEDURE: CREATE, ALTER, DROP
· Administrator Privileges
o Shutdown DataBase
o Replication Slave
o Replication Client
o File Privilege
GRANT
priv_type [(column_list)]
[, priv_type [column_list]] ...
ON [object_type] priv_level
TO user_specification [, user_specification] ...
[REQUIRE {NONE | ssl_option [[AND] ssl_option] ...}]
[WITH with_option ...]GRANT PROXYON user_specification
TO user_specification [, user_specification] ...
[WITHGRANT OPTION]
· 使用MySQL自帶的命令
o CREATE USER 'netease'@'localhost' IDENTIFIED BY 'netease163';
o GRANT SELECT ON *.* TO 'netease'@'localhost' WITH GRANT OPTION;
· 更改數(shù)據(jù)庫記錄
o 首先向User表里面插入一條記錄,根據(jù)自己的需要選擇是否向db和table_pirv表插入記錄
o 執(zhí)行flush privileges命令,讓權(quán)限信息生效
· GRANT語句會(huì)判斷是否存在該用戶,如果不存在則新建
o GRANT SELECT ON *.* TO 'NETEASE'@'localhost' IDENTIFIED BY 'netease163' WITH GRANT OPTION;
· 查看當(dāng)前用戶的權(quán)限
o show grants;
· 查看其它用戶的權(quán)限
o show grants for netease@'localhost';
· 回收不需要的權(quán)限
o revoke select on *.* from netease@'localhost';
· 重新賦權(quán)
o grant insert on *.* to netease@'localhost';
· 用新密碼,grant語句重新授權(quán)
· 更改數(shù)據(jù)庫記錄,Update User表的Password字段
o 注意:用這種辦法,更改完需要flush privileges刷新權(quán)限信息,不推薦
DROP USER user [, user] ...
· 允許被授予權(quán)利的人把這個(gè)權(quán)利授予其他的人
· MySQL權(quán)限信息是存在數(shù)據(jù)庫表中
· MySQL賬號對應(yīng)的密碼也加密存儲在數(shù)據(jù)庫表中
· 每一種權(quán)限類型在元數(shù)據(jù)里都是枚舉類型,表明是否有該權(quán)限
· user
· db
· table_pirv
· columns_pirv
· host
查詢時(shí)從user->db->table_pirv->columns_pirv依次驗(yàn)證,如果通過則執(zhí)行查詢。
· MySQL權(quán)限信息都是以數(shù)據(jù)記錄的形式存儲在數(shù)據(jù)庫的表中。
· MySQL的權(quán)限驗(yàn)證相比網(wǎng)站登錄多了白名單環(huán)節(jié),并且粒度更細(xì),可以精確到表和字段。
· 使用Binary二進(jìn)制安裝管理用戶沒有設(shè)置密碼
· MySQL默認(rèn)的test庫不受權(quán)限控制,存在安全風(fēng)險(xiǎn)
· You can set a Password for root accounts.
· You can remove root accounts that are accessible from outside the localhost.
· You can remove anonymous-user accounts.
· You can remove the test database.
· 權(quán)限相關(guān)的操作不要直接操作表,統(tǒng)一使用MySQL命令。
· 使用二進(jìn)制安裝MySQL安裝后,需要重置管理用戶(root)的密碼。
· 線上數(shù)據(jù)庫不要留test庫
· 表結(jié)構(gòu)設(shè)計(jì)需要在正式進(jìn)行開發(fā)之前完成
· 根據(jù)產(chǎn)品需求將復(fù)雜的業(yè)務(wù)模型抽象出來
· 理解各個(gè)表的依賴關(guān)系
· 理解各個(gè)表的功能特點(diǎn)
o 字段之間的約束、索引
o 字段類型、字段長度
· 昵稱
· 生日
· 性別
· 手機(jī)號碼
· 住宅號碼
· 郵編
· 住宅地址
· 注冊地址
· 登錄IP
· 上一次登錄時(shí)間
· 郵件地址
create table tb_account(
account_idint not null auto_incrementprimary key,
nick_namevarchar(20),
true_namevarchar(20),
sexchar(1),
mail_addressvarchar(50),
phone1varchar(20)not null,
phone2varchar(20),
passwordvarchar(30)not null,
create_time datetime,
account_state tinyint,
last_login_time datetime,
last_login_ipvarchar(20)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
create table tb_goods(
good_idbigint not null auto_incrementprimary key,
goods_namevarchar(100)not null,
pic_urlvarchar(500)not null,
store_quantityint not null,
goods_notevarchar(4096),
producervarchar(500),
category_idint not null
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
create table tb_goods_category(
category_idint not null auto_incrementprimary key,
category_levelsmallint not null,
category_namevarchar(500),
upper_category_idint not null
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
create table tb_order(
order_idbigint not null auto_incrementprimary key,
account_idint not null,
create_time datetime,
order_amountdecimal(12,2),
order_state tinyint,
update_time datetime,
order_ipvarchar(20),
pay_methodvarchar(20),
user_notesvarchar(500)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
create table tb_order_item(
order_item_idbigint not null auto_incrementprimary key,
order_idbigint not null,
goods_idbigint not null,
goods_quantityint not null,
goods_amountdecimal(12,2),
uique key uk_order_goods(order_id, goods_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
· 所有表名,字段名全部使用小寫字母
· 不同業(yè)務(wù),表名使用不同前綴區(qū)分。
· 生成環(huán)境表名字段名要有實(shí)際意義
· 單個(gè)字段盡量使用字段全名;多個(gè)字段之間用下劃線分隔
· 字段類型選擇,盡量選擇能滿足應(yīng)用要求的最小數(shù)據(jù)類型
· 盡量使用×××代替字符型?!痢痢猎谧侄伍L度、索引大小等方面開銷小效率更高,如郵編字段,手機(jī)號碼等
· 注釋,每個(gè)字段必須以comment語句給出字段的作用
· 經(jīng)常訪問的大字段需要單獨(dú)放到一張表中,避免降低sql效率,圖片、電影等大文件數(shù)據(jù)禁止存數(shù)據(jù)庫
· 新業(yè)務(wù)統(tǒng)一建議使用utf8mb4字符集
· 理解用戶到底需要什么權(quán)限
o 普通用戶只有數(shù)據(jù)讀寫權(quán)限
o 系統(tǒng)管理員具有super權(quán)限
· 權(quán)限粒度要做到盡可能的細(xì)
o 普通用戶不要設(shè)置with grant option屬性
o 權(quán)限粒度:系統(tǒng)層面>庫層面>表層面>字段層面
· 禁止簡單密碼
o 線上密碼要求隨機(jī)
本課程涉及建表SQL
-- ------------------------------ Table structure for `play_fav`-- ----------------------------DROP TABLE IF EXISTS`play_fav`;CREATE TABLE `play_fav` (
`userid` bigint(20)NOT NULL COMMENT'收藏用戶id',
`play_id` bigint(20)NOT NULL COMMENT'歌單id',
`createtime` bigint(20)NOT NULL COMMENT'收藏時(shí)間',
`status` int(11) DEFAULT'0' COMMENT'狀態(tài),是否刪除',
PRIMARY KEY (`play_id`,`userid`),
KEY`IDX_USERID` (`userid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='歌單收藏表';
-- ------------------------------ Records of play_fav-- ----------------------------INSERT INTO play_favVALUES ('2','0','0','0');INSERT INTO play_favVALUES ('116','1','1430223383','0');INSERT INTO play_favVALUES ('143','1','0','0');INSERT INTO play_favVALUES ('165','2','0','0');INSERT INTO play_favVALUES ('170','3','0','0');INSERT INTO play_favVALUES ('185','3','0','0');INSERT INTO play_favVALUES ('170','4','0','0');INSERT INTO play_favVALUES ('170','5','0','0');
-- ------------------------------ Table structure for `play_list`-- ----------------------------DROP TABLE IF EXISTS`play_list`;CREATE TABLE `play_list` (
`id` bigint(20)NOT NULL COMMENT'主鍵',
`play_name` varchar(255) DEFAULTNULL COMMENT'歌單名字',
`userid` bigint(20)NOT NULL COMMENT'歌單作者賬號id',
`createtime` bigint(20) DEFAULT'0' COMMENT'歌單創(chuàng)建時(shí)間',
`updatetime` bigint(20) DEFAULT'0' COMMENT'歌單更新時(shí)間',
`bookedcount` bigint(20) DEFAULT'0' COMMENT'歌單訂閱人數(shù)',
`trackcount` int(11) DEFAULT'0' COMMENT'歌曲的數(shù)量',
`status` int(11) DEFAULT'0' COMMENT'狀態(tài),是否刪除',
PRIMARY KEY (`id`),
KEY`IDX_CreateTime` (`createtime`),
KEY`IDX_UID_CTIME` (`userid`,`createtime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='歌單';
-- ------------------------------ Records of play_list-- ----------------------------INSERT INTO play_listVALUES ('1','老男孩','1','1430223383','1430223383','5','6','0');INSERT INTO play_listVALUES ('2','情歌王子','3','1430223384','1430223384','7','3','0');INSERT INTO play_listVALUES ('3','每日歌曲推薦','5','1430223385','1430223385','2','4','0');INSERT INTO play_listVALUES ('4','山河水','2','1430223386','1430223386','5',null,'0');INSERT INTO play_listVALUES ('5','李榮浩','1','1430223387','1430223387','1','10','0');INSERT INTO play_listVALUES ('6','情深深','5','1430223388','1430223389','0','0','1');
-- ------------------------------ Table structure for `song_list`-- ----------------------------DROP TABLE IF EXISTS`song_list`;CREATE TABLE `song_list` (
`id` bigint(20)NOT NULL COMMENT'主鍵',
`song_name` varchar(255)NOT NULL COMMENT'歌曲名',
`artist` varchar(255)NOT NULL COMMENT'藝術(shù)節(jié)',
`createtime` bigint(20) DEFAULT'0' COMMENT'歌曲創(chuàng)建時(shí)間',
`updatetime` bigint(20) DEFAULT'0' COMMENT'歌曲更新時(shí)間',
`album` varchar(255) DEFAULTNULL COMMENT'專輯',
`playcount` int(11) DEFAULT'0' COMMENT'點(diǎn)播次數(shù)',
`status` int(11) DEFAULT'0' COMMENT'狀態(tài),是否刪除',
PRIMARY KEY (`id`),
KEY`IDX_artist` (`artist`),
KEY`IDX_album` (`album`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='歌曲列表';
-- ------------------------------ Records of song_list-- ----------------------------INSERT INTO song_listVALUES ('1','Good Lovin\' Gone Bad','Bad Company','0','0','Straight Shooter','453','0');INSERT INTO song_listVALUES ('2','Weep No More','Bad Company','0','0','Straight Shooter','280','0');INSERT INTO song_listVALUES ('3','Shooting Star','Bad Company','0','0','Straight Shooter','530','0');INSERT INTO song_listVALUES ('4','大象','李志','0','0','1701','560','0');INSERT INTO song_listVALUES ('5','定西','李志','0','0','1701','1023','0');INSERT INTO song_listVALUES ('6','紅雪蓮','洪啟','0','0','紅雪蓮','220','0');INSERT INTO song_listVALUES ('7','風(fēng)柜來的人','李宗盛','0','0','作品李宗盛','566','0');
-- ------------------------------ Table structure for `stu`-- ----------------------------DROP TABLE IF EXISTS`stu`;CREATE TABLE `stu` (
`id` int(10)NOT NULL DEFAULT'0',
`name` varchar(20) DEFAULTNULL,
`age` int(10) DEFAULTNULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- ------------------------------ Records of stu-- ----------------------------
-- ------------------------------ Table structure for `tbl_proc_test`-- ----------------------------DROP TABLE IF EXISTS`tbl_proc_test`;CREATE TABLE `tbl_proc_test` (
`id` int(11)NOT NULL AUTO_INCREMENT,
`num` int(11) DEFAULTNULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8;