MYSQL儲存結構和事務(1)
阿新 • • 發佈:2018-12-14
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;
開啟事務