1. 程式人生 > >MYSQL儲存結構和事務(1)

MYSQL儲存結構和事務(1)

MYSQL儲存結構初探

這兩天需要完成一個數據轉移。因為資料庫表有一些修改,我需要把增加的欄位的值給填充進去,所以這兩天看了看MYSQL的儲存結構(實在是因為用java操作感覺思路簡單但是很麻煩,不如就學一下sql語句)。
這其中有有些坑,我還在爬,會接著更新。
首先上成品

CREATE PROCEDURE change_stu()#新建儲存過程
BEGIN
DECLARE t_error INTEGER DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;
START TRANSACTION;
ALTER TABLE student ADD(
addr VARCHAR(50) COMMENT '省市地區',
relation_id BIGINT(13) COMMENT '聯絡人稱謂ID', 
contact_name VARCHAR(20) COMMENT '聯絡人姓名',
contact_phone VARCHAR(20) COMMENT '聯絡人手機',
`mode` INT(1) COMMENT '報名方式',#如果是關鍵字,用1旁邊的`引起來
exit_time DATETIME COMMENT '退學時間',
`status` INT(1) COMMENT '1-在讀,2-休學,0-退學'
);
/* 在改not null要先把null的列改為預設值*/
UPDATE student SET addr='' WHERE addr IS NULL;
UPDATE student SET relation_id=0 WHERE relation_id IS NULL;
UPDATE student SET contact_name='' WHERE contact_name IS NULL;
UPDATE student SET contact_phone='' WHERE contact_phone IS NULL;
UPDATE student SET `mode`='' WHERE mode IS NULL;
UPDATE student SET `status`='' WHERE status IS NULL;
#UPDATE student SET exit_time='0000-00-00 00:00:00' WHERE exit_time IS NULL;
ALTER TABLE student MODIFY relation_id BIGINT(13) NOT NULL;
ALTER TABLE student MODIFY contact_name VARCHAR(20) NOT NULL;
ALTER TABLE student MODIFY contact_phone VARCHAR(20) NOT NULL;
ALTER TABLE student MODIFY `mode` INT(1) NOT NULL DEFAULT 0;
ALTER TABLE student MODIFY `status` INT(1) NOT NULL DEFAULT 1;
IF t_error = 1 THEN
ROLLBACK;
ELSE
COMMIT;
END IF;
END $$

這個儲存過程呢,實現的就是對一張表結構的改變,新增欄位,設定NOT NULL,這裡有一個點
因為欄位新新增,預設值可以設,但是沒有設定的時候,預設NULL,所以需要那一串UPDATE語句
如果是mysql中的關鍵詞,用`給括起來

DECLARE t_error INTEGER DEFAULT 0;
 
定義一個錯誤變數
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;

如果語句出錯,那麼這個儲存過程的操作就回滾

START TRANSACTION;

開啟事務