本文目錄一覽:
- 1、如何在命令行創建一個MySQL資料庫
- 2、請教如何新增一個賬戶管理已有mysql資料庫
- 3、五個常見的資料庫
- 4、使用mysql 一個資料庫中有倆個表: student(學生表) 和score(成績表)
- 5、如何修改mysql一個資料庫中所有表某個欄位的數據?
如何在命令行創建一個MySQL資料庫
第一步:安裝MySQL客戶端
當然你得確保MySQL客戶端已經安裝完畢。如果沒有的話,可以按照下面的方法。
在Debian,Ubuntu 或者 Linux Mint上:
$ sudo apt-get install mysql-client
$ sudo apt-get install mysql
第二步:登陸到MySQL伺服器
首先,你需要使用root用戶登陸進你的MySQL資料庫,如下:
$ mysql -u root -h -p
請注意:為了能登進遠程的MySQL伺服器,你需要開啟伺服器上的遠程訪問,如果你想調用同一主機上的MySQL伺服器,你可以省略 “-h ” 參數
$ mysql -u root -p
你將需要輸入MySQL伺服器的密碼,如果認證成功,MySQL提示將會出現。
第三步:創建一個MySQL資料庫
在MySQL提示中輸入命令之前,請記住所有的命令都是以分號結束的(否則將不會執行)。另外,考慮輸入命令的時候使用大些字母,輸入資料庫對象使用小寫字母。但那不是必須的,只是方便的閱讀。
現在,創建一個叫做xmodulo_DB的資料庫:
mysql CREATE DATABASE IF NOT EXISTS xmodulo_DB;
第四步:創建一個資料庫表
為了達到演示的目的,創建一個叫做posts_tbl的表,表裡會存儲關於文章的如下信息:
文章的標題
作者的名字
作者的姓
文章可用或者不可用
文章創建的日期
這個過程分兩步執行:
首先,選擇需要使用的資料庫:
mysql USE xmodulo_DB;
然後,在資料庫中創建新表:
mysql CREATE TABLE ‘posts_tbl’ (
‘post_id’ INT UNSIGNED NOT NULL AUTO_INCREMENT,
‘content’ TEXT,
‘author_FirstName’ VARCHAR(100) NOT NULL,
‘author_LastName’ VARCHAR(50) DEFAULT NULL ,
‘isEnabled’ TINYINT(1) NOT NULL DEFAULT 1,
‘date’ TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
PRIMARY KEY ( ‘post_id’ )
TYPE = MYISAM;
第五步:創建一個用戶,並授予許可權
當涉及到訪問新創的資料庫和表的時候,創建一個新用戶是一個很好的主意。這樣做就可以讓用戶在沒有整個MySQL伺服器許可權的情況下,去訪問那個資料庫(而且只能是那個資料庫)
你可以創建新用戶,授予許可權,並且使改變生效:
mysql GRANT ALL PRIVILEGES ON xmodulo_DB.* TO ‘new_user’@’%’ IDENTIFIED
BY ‘new_password’;
mysql FLUSH PRIVILEGES;
‘newuser’和’newpassword’分別指的是新的用戶名和他的密碼。這條信息將會被保存在mysql.user表中,而且密碼會被加密。
第六步:測試
先插入一個虛擬的記錄到posts_tbl表:
mysql USE xmodulo_DB;
mysql INSERT INTO posts_tbl (content, author_FirstName, author_Las
tName)
VALUES (‘Hi! This is some dummy text.’, ‘Gabriel’, ‘Canepa’);
然後查看posts_tbl表中的所有記錄:
mysql SELECT * FROM posts_tbl;
注意:MySQL會在先前定義的地方自動插入適當的默認值(比如,’isEnabled’和’date’)。
請教如何新增一個賬戶管理已有mysql資料庫
有2個不同的方法增加用戶:通過使用GRANT語句或通過直接操作MySQL授權表。比較好的方法是使用GRANT語句,因為他們是更簡明並且好像錯誤少些。
下面的例子顯示出如何使用MySQL客戶安裝新用戶。這些例子假定許可權已預設被安裝。這意味著為了改變,你必須在MySQL正在運行同一台機器上,你必須作為MySQL root用戶連接,並且root用戶必須對MySQL資料庫有insert許可權和reload管理許可權。另外,如果你改變了root用戶口令,你必須如下的MySQL命令指定它。
你可以通過發出GRANT語句增加新用戶:
shell mysql –user=root mysql
mysql GRANT ALL PRIVILEGES ON *.* TO monty@localhost
IDENTIFIED BY ‘something’ WITH GRANT OPTION;
mysql GRANT ALL PRIVILEGES ON *.* TO monty@”%”
IDENTIFIED BY ‘something’ WITH GRANT OPTION;
mysql GRANT RELOAD,PROCESS ON *.* TO admin@localhost;
mysql GRANT USAGE ON *.* TO dummy@localhost;
這些GRANT語句安裝3個新用戶:
monty:可以從任何地方連接伺服器的一個完全的超級用戶,但是必須使用一個口令(‘something’做這個。注意,我們必須對monty@localhost和monty@”%”發出GRANT語句。如果我們增加localhost條目,對localhost的匿名用戶條目在我們從本地主機連接接時由mysql_install_db創建的條目將優先考慮,因為它有更特定的Host欄位值,所以以user表排列順序看更早到來。
admin:可以從localhost沒有一個口令進行連接並且被授予reload和process管理許可權的用戶。這允許用戶執行mysqladmin reload、mysqladmin refresh和mysqladmin flush-*命令,還有mysqladmin processlist。沒有授予資料庫有關的許可權。他們能在以後通過發出另一個GRANT語句授權。
dummy:可以不用一個口令連接的一個用戶,但是只能從本地主機。全局許可權被設置為’N’–USAGE許可權類型允許你無需許可權就可設置一個用戶。它假定你將在以後授予資料庫相關的許可權。
你也可以直接通過發出INSERT語句增加同樣的用戶存取信息,然後告訴伺服器再次裝入授權表:
shell mysql –user=root mysql
mysql INSERT INTO user VALUES(‘localhost’,’monty’,PASSWORD(‘something’),
‘Y’,’Y’,’Y’,’Y’,’Y’,’Y’,’Y’,’Y’,’Y’,’Y’,’Y’,’Y’,’Y’,’Y’)
mysql INSERT INTO user VALUES(‘%’,’monty’,PASSWORD(‘something’),
‘Y’,’Y’,’Y’,’Y’,’Y’,’Y’,’Y’,’Y’,’Y’,’Y’,’Y’,’Y’,’Y’,’Y’)
mysql INSERT INTO user SET Host=’localhost’,User=’admin’,
Reload_priv=’Y’, Process_priv=’Y’;
mysql INSERT INTO user (Host,User,Password)
VALUES(‘localhost’,’dummy’,”);
mysql FLUSH PRIVILEGES;
取決於你的MySQL版本,對上述,你可能必須使用一個不同數目’Y’值(在3.22.11以前的版本有更少的許可權列)。對admin用戶,只用在3.22.11開始的版本具有的更加可讀的INSERT擴充的語法。
注意,為了設置一個超級用戶,你只需創造一個user表條目,其許可權欄位設為’Y’。不需要db或host表的條目。
在user表中的許可權列不是由最後一個INSERT語句明確設置的(對dummy用戶),因此那些列被賦予預設值’N’。這是GRANT USAGE做的同樣的事情。
下列例子增加一個用戶custom,他能從主機 localhost、server.domain和whitehouse.gov連接。他只想要從localhost存取bankaccount資料庫,從whitehouse.gov存取expenses資料庫和從所有3台主機存取customer資料庫。他想要從所有3台主機上使用口令stupid。
為了使用GRANT語句設置個用戶的許可權,運行這些命令:
shell mysql –user=root
mysql mysql GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON bankaccount.*
TO custom@localhost
IDENTIFIED BY ‘stupid’;
mysql GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON expenses.*
TO custom@whitehouse.gov
IDENTIFIED BY ‘stupid’;
mysql GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON customer.*
TO custom@’%’
IDENTIFIED BY ‘stupid’;
通過直接修改授權表設置用戶許可權,運行這些命令(注意,在結束時FLUSH PRIVILEGES):
shell mysql –user=root
mysql mysql INSERT INTO user (Host,User,Password)
VALUES(‘localhost’,’custom’,PASSWORD(‘stupid’));
mysql INSERT INTO user (Host,User,Password)
VALUES(‘server.domain’,’custom’,PASSWORD(‘stupid’));
mysql INSERT INTO user (Host,User,Password)
VALUES(‘whitehouse.gov’,’custom’,PASSWORD(‘stupid’));
mysql INSERT INTO db
(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,
Create_priv,Drop_priv)
VALUES
(‘localhost’,’bankaccount’,’custom’,’Y’,’Y’,’Y’,’Y’,’Y’,’Y’);
mysql INSERT INTO db
(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,
Create_priv,Drop_priv)
VALUES
(‘whitehouse.gov’,’expenses’,’custom’,’Y’,’Y’,’Y’,’Y’,’Y’,’Y’);
mysql INSERT INTO db
(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,
Create_priv,Drop_priv)
VALUES(‘%’,’customer’,’custom’,’Y’,’Y’,’Y’,’Y’,’Y’,’Y’);
mysql FLUSH PRIVILEGES;
頭3個INSERT語句增加user表條目,允許用戶 custom用給定口令從不同的主機進行連接,但是沒有授予任何許可(所有許可權被設置為預設值’N’)。後3個INSERT語句增加db表條目,授予 custom以bankaccount、expenses和customer資料庫許可權,但是只能在從正確的主機存取時。通常,在授權表直接被修改時,伺服器必須被告知再次裝入他們(用FLUSH PRIVILEGES)以便使許可權修改生效。 如果你想要給特定的用戶從一個給定的域上的任何機器上存取許可權,你可以發出一個如下的GRANT語句:
mysql GRANT …
ON *.*
TO myusername@”%.mydomainname.com”
IDENTIFIED BY ‘mypassword’;
為了通過直接修改授權表做同樣的事情,這樣做:
mysql INSERT INTO user VALUES (‘%.mydomainname.com’, ‘myusername’,
PASSWORD(‘mypassword’),…);
mysql FLUSH PRIVILEGES;
你也可以使用xmysqladmin、mysql_webadmin甚至xmysql在授權表中插入、改變和更新值。你可以在MySQL的Contrib目錄找到這些實用程序。
五個常見的資料庫
五個常見的資料庫分別為:MySQL、SQLServer、Oracle、Sybase、DB2。
1、資料庫定義:資料庫,又稱為數據管理系統,簡而言之可視為電子化的文件櫃——存儲電子文件的處所,用戶可以對文件中的資料執行新增、截取、更新、刪除等操作。它是以一定方式儲存在一起、能與多個用戶共享、具有儘可能小的冗餘度、與應用程序彼此獨立的數據集合。一個資料庫由多個表空間構成。
2、MySQL資料庫:原本是一個開放源碼的關係資料庫管理系統,原開發者為瑞典的MySQLAB公司,該公司於2008年被_陽微系統收購。2009年,甲骨文公司(Oracle)收購_陽微系統公司,MySQL成為Oracle旗下產品。MySQL在過去由於性能高、成本低、可靠性好,已經成為最流行的開源資料庫,因此被廣泛地應用在Internet上的中小型網站中。隨著MySQL的不斷成熟,它也逐漸用於更多大規模網站和應用。
3、SQLServer:SQLServer資料庫是Microsoft開發設計的一個關係資料庫智能管理系統(RDBMS),現在是全世界主流資料庫之一;SQLServer資料庫具備方便使用、可伸縮性好、相關軟體集成程度高等優勢,能夠從單一的筆記本上運行或以高倍雲伺服器集群為基礎,或在這兩者之間任何東西上運行。
使用mysql 一個資料庫中有倆個表: student(學生表) 和score(成績表)
SET @i=0。
SQL本身有數據導入的操作。但如果要從一個備份的文件中導入數據,則要進行另外的操作。下面以一個例子進行說明。
SQL伺服器上已有一個DOE資料庫,並且裡面有大量的數據,現準備從另外一個備份文件A1.BAK(不是DOE資料庫的備份文件)中導入另外的數據(即導入後在DOE中增加一些數據表,表中已錄有數據),並保持原DOE的數據不變。
擴展資料:
在為MySQL分配足夠的內存之前,請考慮不同領域對MySQL的內存需求。要考慮的關鍵領域是:並發連接——對於大量並發連接,排序和臨時表將需要大量內存。在撰寫本文時,對於處理3000+並發連接的資料庫,16GB到32GB的RAM是足夠的。
內存碎片可以消耗大約10%或更多的內存。像innodb_buffer_pool_size、key_buffer_size、query_cache_size等緩存和緩衝區要消耗大約80%的已分配內存。
參考資料來源:百度百科-MySQL資料庫
如何修改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 資料庫的修改和遷移等工作。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/286255.html