本文目錄一覽:
- 1、怎麼對mysql數據表中的某個字段的所有數據修改
- 2、MySQL數據庫修改一列內容
- 3、mysql數據庫表修改某一列的類型
- 4、mysql數據庫在已存在表格上增刪列,能否用alter table語句實現?
- 5、如何把mysql的列修改成行顯示數據簡單實現
- 6、Mysql如何對一個列中的數據進行統一修改?
怎麼對mysql數據表中的某個字段的所有數據修改
對mysql數據表中的某個字段的所有數據修改,可以使用update語句,語法是:
update table_name set column = value[, colunm = value…] [where condition];
[ ]中的部分表示可以有也可以沒有。
例如:
update students set stu_name = “zhangsan”, stu_gender = “m” where stu_id = 5;
擴展資料:
SQL修改字段屬性總結:
1、修改表中字段類型 可以修改列的類型,是否為空)
Alter table [表名] alter column [列名] 類型
2、向表中添加字段
Alter table [表名] add [列名] 類型
3、刪除字段
Alter table [表名] drop column [列名]
4、添加主鍵
Alter table [表名] add constraint [ 約束名] primary key( [列名])
5、添加唯一約束
Alter table [表名] add constraint [ 約束名] unique([列名])
6、添加表中某列的默認值
Alter table [表名] add constraint [約束名] default(默認值) for [列名]
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數據庫表修改某一列的類型
下面列出:
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數據庫在已存在表格上增刪列,能否用alter table語句實現?
ALTER TABLE:添加,修改,刪除表的列,約束等表的定義。
查看列:desc 表名;
修改表名:alter table t_book rename to bbb;
添加列:alter table 表名 add column 列名 varchar(30);
刪除列:alter table 表名 drop column 列名;
修改列名MySQL: alter table bbb change nnnnn hh int;
修改列名SQLServer:exec sp_rename’t_student.name’,’nn’,’column’;
修改列名Oracle:lter table bbb rename column nnnnn to hh int;
修改列屬性:alter table t_book modify name varchar(22);
sp_rename:SQLServer 內置的存儲過程,用與修改表的定義。
請點擊輸入圖片描述
請點擊輸入圖片描述
刪除語句:delete from fatie where id not in(select t.id1 from ( (select max(a.id) id1 from fatie a group by a.name)as t));留下的是各組id號最大的,如果留的是最小的話換成min(a.id)就行了
如果沒有加上一個中間表t,即這句話 select t.id from去掉直接寫成delete from fatie where id not in(select max(id) a.id1 from fatie a group by a.name);mysql會提示錯誤:You can’t specify target table ‘fatie’ for update in FROM clause (不能先select出同一表中的某些值,再update這個表(在同一語句中)。
如何把mysql的列修改成行顯示數據簡單實現
import_table(importTable) 的延申功能:可定製化行輸入。
import_table(importTable) 我們之前有介紹過,是一款並行導入各種格式文本的工具,封裝了 MySQL 語句 load data local infile。
比如說要導入一個以 TAB 為分隔符的文本數據文件:/tmp/sample_ytt.txt 到表:ytt_new.t1,可以執行下面語句:
上面結果是 load data infile 語句的導入結果。如果改用 import_table 方法來做同樣的事情,基於 Python 語法,使用方法如下:
那接下來看另外一個需求:在導入文本文件時對每行做預處理(例如在導入數據之前更改列 r2 的值為 mod(r1,10),列 r5 的值為 abs(r4-46) ),這樣可以減少導入後再次處理的時間開銷。
這個需求用 load data infile 語句非常容易實現:(導入時更改列 r2 和 r5 的數據,類似 UPDATE 語法)
那如果要用 util.import_table(importTable) 來實現上面的需求,在 MySQL 8.0.22 之前是沒辦法的。
隨着 MySQL 8.0.22 的發布,MySQL 對 import_table 方法做了些擴充功能,其中增加了一個選項 “decodeColumns” 可以實現字段的預先輸入定製化功能,並且還可以更加豐富。
接下來用 import_table 來實現上面的需求,定製化字段 r2 和 r5:
以上 Options 選項,見下圖:
我來具體解釋下上圖的含義:藍色字體 columns 對應的數組分別指定數據文件中的每行字段,也就是默認的 TAB 分隔符所分割的每列值,1 和 2 代表佔位符,1 代表數據文件中每行的第一個列,2 代表數據文件中每行的第四列,decodeColumns 字典分別對需要預先輸入的字段做處理。比如 r1 字段保留為變量 @1,r2 字段對應 mod(r1,10) 等。
如果還是不太理解變換規則,可以臨時打開 general log, 上面 import_table(importTable)對應的 MySQL 日誌為:
以上日誌寫的很清楚,內部轉換為最基本的load data infile語法。
那這裡我簡單解讀了下 MySQL 8.0.22 對 MySQL Shell 的一項定製化輸入文本文件的新特性,更多的新特性可以繼續關注。
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/301268.html