本文目錄一覽:
- 1、用java編程,把mysql數據庫的一列A,其中字符長度小於4的不動,大於的4的取前4個,所有的都寫這個表B列去
- 2、mysql數據庫表修改某一列的類型
- 3、MySQL數據庫修改一列內容
- 4、Mysql如何對一個列中的數據進行統一修改?
用java編程,把mysql數據庫的一列A,其中字符長度小於4的不動,大於的4的取前4個,所有的都寫這個表B列去
create table B (select concat(left(column,4),’…’) from A where length(column) 4 order by length(colume) limit 4);
mysql數據庫表修改某一列的類型
下面列出:
1.增加一個字段
alter
table
user
add
COLUMN
new1
VARCHAR(20)
DEFAULT
NULL;
//增加一個字段,默認為空
alter
table
user
add
COLUMN
new2
VARCHAR(20)
NOT
NULL;
//增加一個字段,默認不能為空
2.刪除一個字段
alter
table
user
DROP
COLUMN
new2;
//刪除一個字段
3.修改一個字段
alter
table
user
MODIFY
new1
VARCHAR(10);
//修改一個字段的類型
alter
table
user
CHANGE
new1
new4
int;
//修改一個字段的名稱,此時一定要重新
//主鍵
alter
table
tabelname
add
new_field_id
int(5)
unsigned
default
not
null
auto_increment
,add
primary
key
(new_field_id);
//增加一個新列
alter
table
t2
add
d
timestamp;
alter
table
infos
add
ex
tinyint
not
null
default
‘0′;
//刪除列
alter
table
t2
drop
column
c;
//重命名列
alter
table
t1
change
a
b
integer;
//改變列的類型
alter
table
t1
change
b
b
bigint
not
null;
alter
table
infos
change
list
list
tinyint
not
null
default
‘0′;
//重命名表
alter
table
t1
rename
t2;
加索引
mysql
alter
table
tablename
change
depno
depno
int(5)
not
null;
mysql
alter
table
tablename
add
index
索引名
(字段名1[,字段名2
…]);
mysql
alter
table
tablename
add
index
emp_name
(name);
加主關鍵字的索引
mysql
alter
table
tablename
add
primary
key(id);
加唯一限制條件的索引
mysql
alter
table
tablename
add
unique
emp_name2(cardnumber);
刪除某個索引
mysqlalter
table
tablename
drop
index
emp_name;
增加字段:
mysql
ALTER
TABLE
table_name
ADD
field_name
field_type;
修改原字段名稱及類型:
mysql
ALTER
TABLE
table_name
CHANGE
old_field_name
new_field_name
field_type;
刪除字段:
mysql
ALTER
TABLE
table_name
DROP
field_name;
mysql修改字段長度
alter
table
表名
modify
column
字段名
類型;
例如
數據庫中user表
name字段是varchar(30)
可以用
alter
table
user
modify
column
name
varchar(50)
;
MySQL數據庫修改一列內容
MySQL 的 Binlog 記錄著 MySQL 數據庫的所有變更信息,了解 Binlog 的結構可以幫助我們解析Binlog,甚至對 Binlog 進行一些修改,或者說是“篡改”,例如實現類似於 Oracle 的 flashback 的功能,恢復誤刪除的記錄,把 update 的記錄再還原回去等。本文將帶您探討一下這些神奇功能的實現,您會發現比您想象地要簡單得多。本文指的 Binlog 是 ROW 模式的 Binlog,這也是 MySQL 8 里的默認模式,STATEMENT 模式因為使用中有很多限制,現在用得越來越少了。
Binlog 由事件(event)組成,請注意是事件(event)不是事務(transaction),一個事務可以包含多個事件。事件描述對數據庫的修改內容。
現在我們已經了解了 Binlog 的結構,我們可以試着修改 Binlog 里的數據。例如前面舉例的 Binlog 刪除了一條記錄,我們可以試着把這條記錄恢復,Binlog 裡面有個刪除行(DELETE_ROWS_EVENT)的事件,就是這個事件刪除了記錄,這個事件和寫行(WRITE_ROWS_EVENT)的事件的數據結構是完全一樣的,只是刪除行事件的類型是 32,寫行事件的類型是 30,我們把對應的 Binlog 位置的 32 改成 30 即可把已經刪除的記錄再插入回去。從前面的 “show binlog events” 裡面可看到這個 DELETE_ROWS_EVENT 是從位置 378 開始的,這裡的位置就是 Binlog 文件的實際位置(以字節為單位)。從事件(event)的結構裡面可以看到 type_code 是在 event 的第 5 個字節,我們寫個 Python 小程序把把第383(378+5=383)字節改成 30 即可。當然您也可以用二進制編輯工具來改。
找出 Binlog 中的大事務
由於 ROW 模式的 Binlog 是每一個變更都記錄一條日誌,因此一個簡單的 SQL,在 Binlog 里可能會產生一個巨無霸的事務,例如一個不帶 where 的 update 或 delete 語句,修改了全表裡面的所有記錄,每條記錄都在 Binlog 裡面記錄一次,結果是一個巨大的事務記錄。這樣的大事務經常是產生麻煩的根源。我的一個客戶有一次向我抱怨,一個 Binlog 前滾,滾了兩天也沒有動靜,我把那個 Binlog 解析了一下,發現裡面有個事務產生了 1.4G 的記錄,修改了 66 萬條記錄!下面是一個簡單的找出 Binlog 中大事務的 Python 小程序,我們知道用 mysqlbinlog 解析的 Binlog,每個事務都是以 BEGIN 開頭,以 COMMIT 結束。我們找出 BENGIN 前面的 “# at” 的位置,檢查 COMMIT 後面的 “# at” 位置,這兩個位置相減即可計算出這個事務的大小,下面是這個 Python 程序的例子。
切割 Binlog 中的大事務
對於大的事務,MySQL 會把它分解成多個事件(注意一個是事務 TRANSACTION,另一個是事件 EVENT),事件的大小由參數 binlog-row-event-max-size 決定,這個參數默認是 8K。因此我們可以把若干個事件切割成一個單獨的略小的事務
ROW 模式下,即使我們只更新了一條記錄的其中某個字段,也會記錄每個字段變更前後的值,這個行為是 binlog_row_image 參數控制的,這個參數有 3 個值,默認為 FULL,也就是記錄列的所有修改,即使字段沒有發生變更也會記錄。這樣我們就可以實現類似 Oracle 的 flashback 的功能,我個人估計 MySQL 未來的版本從可能會基於 Binlog 推出這樣的功能。
了解了 Binlog 的結構,再加上 Python 這把瑞士軍刀,我們還可以實現很多功能,例如我們可以統計哪個表被修改地最多?我們還可以把 Binlog 切割成一段一段的,然後再重組,可以靈活地進行 MySQL 數據庫的修改和遷移等工作。
Mysql如何對一個列中的數據進行統一修改?
mysql對一個列中的數據統一修改直接用update語句即可。
工具:mysql 5.6
步驟:
1、mysql中有數據表student如下:
2、要將表中score都改成100,用如下語句:
update student set score=100;
3、運行後結果(可以看到score都變成了100,更改成功):
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/235921.html