mySQL基礎入門
- 2020 年 4 月 11 日
- 筆記
mySQL
安裝
windows
windows https://www.runoob.com/mysql/mysql-install.html
mysqld –initialize –console 報錯 — 出現Failed to find valid data directory.
https://blog.csdn.net/github_38832708/article/details/83037241
mysqld --initialize --console
初始化資料庫:
mysqld --initialize-insecure
程式會在動MySQL文件夾下創建data文件夾以及對應的文件
登錄
mysql -h 主機名 -u 用戶名 -p mysql -u root -p -h : 指定客戶端所要登錄的 MySQL 主機名, 登錄本機(localhost 或 127.0.0.1)該參數可以省略; -u : 登錄的用戶名; -p : 告訴伺服器將會使用一個密碼來登錄, 如果所要登錄的用戶名密碼為空, 可以忽略此選項。 輸入 exit 或 quit 退出登錄
啟動 mysqld --console
關閉 mysqladmin -uroot shutdown
mysql服務
移除 mysqld -remove MySQL
關閉 net stop MySQL
開啟 net start MySQL
圖形介面下載
https://downloads.mysql.com/archives/workbench/
mysql workBench, 最新版好像和win10不兼容
ubuntu
安裝
sudo apt-get install mysql-server / 密碼:123
sudo apt-get install mysql-client
sudo apt-get install libmysqlclient-dev
啟動
mysql -uroot -p
/ 123
設置遠程訪問
參考 https://blog.csdn.net/james_nan/article/details/82053430
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf 修改bind-address mysql> grant all privileges on *.* to root@"%" identified by "password" with grant option; *.*,表示資料庫.表,也就是指所有資料庫下的所有表。%表示任意的ip地址。password為root帳號的密碼。 service mysql restart
192.168.157.139
ip addr
關閉
關閉目前運行的 MySQL 伺服器, 你可以執行以下命令:
root@host# cd /usr/bin ./mysqladmin -u root -p shutdown Enter password: ******
用戶設置
需要添加 MySQL 用戶,你只需要在 mysql 資料庫中的 user 表添加新用戶即可。
root@host# mysql -u root -p Enter password:******* mysql> use mysql; Database changed mysql> INSERT INTO user (host, user, password, select_priv, insert_priv, update_priv) VALUES ('localhost', 'guest', PASSWORD('guest123'), 'Y', 'Y', 'Y'); Query OK, 1 row affected (0.20 sec) mysql> FLUSH PRIVILEGES; Query OK, 1 row affected (0.01 sec) mysql> SELECT host, user, password FROM user WHERE user = 'guest'; +-----------+---------+------------------+ | host | user | password | +-----------+---------+------------------+ | localhost | guest | 6f8c114b58f2ce9e | +-----------+---------+------------------+ 1 row in set (0.00 sec)
在添加用戶時,請注意使用MySQL提供的 PASSWORD() 函數來對密碼進行加密。 你可以在以上實例看到用戶密碼加密後為: 6f8c114b58f2ce9e.
注意:在 MySQL5.7 中 user 表的 password 已換成了authentication_string。
注意:password() 加密函數已經在 8.0.11 中移除了,可以使用 MD5() 函數代替。
注意:在注意需要執行 FLUSH PRIVILEGES 語句。 這個命令執行後會重新載入授權表。
如果你不使用該命令,你就無法使用新創建的用戶來連接mysql伺服器,除非你重啟mysql伺服器。
你可以在創建用戶時,為用戶指定許可權,在對應的許可權列中,在插入語句中設置為 ‘Y’ 即可
管理MySQL
USE 資料庫名 :
選擇要操作的Mysql資料庫,使用該命令後所有Mysql命令都只針對該資料庫。
SHOW DATABASES:
列出 MySQL 資料庫管理系統的資料庫列表。(所有資料庫)
SHOW TABLES:
顯示指定資料庫的所有表(所有關係,即所有表格),使用該命令前需要使用 use 命令來選擇要操作的資料庫。
SHOW COLUMNS FROM 數據表:
顯示數據表的屬性,屬性類型,主鍵資訊 ,是否為 NULL,默認值等其他資訊。
SHOW INDEX FROM 數據表:
顯示數據表的詳細索引資訊,包括PRIMARY KEY(主鍵)。
SHOW TABLE STATUS [FROM db_name] [LIKE ‘pattern’] G:
該命令將輸出Mysql資料庫管理系統的性能及統計資訊。
mysql> SHOW TABLE STATUS FROM RUNOOB; # 顯示資料庫 RUNOOB 中所有表的資訊 mysql> SHOW TABLE STATUS from RUNOOB LIKE 'runoob%'; # 表名以runoob開頭的表的資訊 mysql> SHOW TABLE STATUS from RUNOOB LIKE 'runoob%'G; # 加上 G,查詢結果按列列印
資料庫的增刪
CREATE DATABASE 資料庫名; drop database <資料庫名>;
數據類型
數值類型
MySQL支援所有標準SQL數值數據類型。這些類型包括嚴格數值數據類型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似數值數據類型(FLOAT、REAL和DOUBLE PRECISION)。
關鍵字INT是INTEGER的同義詞,關鍵字DEC是DECIMAL的同義詞。BIT數據類型保存位欄位值,並且支援MyISAM、MEMORY、InnoDB和BDB表。
作為SQL標準的擴展,MySQL也支援整數類型TINYINT、MEDIUMINT和BIGINT。下面的表顯示了需要的每個整數類型的存儲和範圍。
類型 | 大小 | 範圍(有符號) | 範圍(無符號) | 用途 |
---|---|---|---|---|
TINYINT | 1 byte | (-128,127) | (0,255) | 小整數值 |
SMALLINT | 2 bytes | (-32 768,32 767) | (0,65 535) | 大整數值 |
MEDIUMINT | 3 bytes | (-8 388 608,8 388 607) | (0,16 777 215) | 大整數值 |
INT或INTEGER | 4 bytes | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整數值 |
BIGINT | 8 bytes | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 極大整數值 |
FLOAT | 4 bytes | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 單精度 浮點數值 |
DOUBLE | 8 bytes | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 雙精度 浮點數值 |
DECIMAL | 對DECIMAL(M,D) ,如果M>D,為M+2否則為D+2 | 依賴於M和D的值。DECIMAL 數據類型用於在資料庫中存儲精確的數值。 |
依賴於M和D的值 | 小數值 |
對於decimal, 整數的位數必須小於等於m-d,不然報錯。小數的位數可以大於d位。多出d位時會做四捨五入,截取到d位
日期和時間類型
表示時間值的日期和時間類型為DATETIME、DATE、TIMESTAMP、TIME和YEAR。
每個時間類型有一個有效值範圍和一個"零"值,當指定不合法的MySQL不能表示的值時使用"零"值。
TIMESTAMP類型有專有的自動更新特性,將在後面描述。
類型 | 大小 ( bytes) | 範圍 | 格式 | 用途 |
---|---|---|---|---|
DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 | ‘-838:59:59’/’838:59:59’ | HH:MM:SS | 時間值或持續時間 |
YEAR | 1 | 1901/2155 | YYYY | 年份值 |
DATETIME | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和時間值 |
TIMESTAMP | 4 | 1970-01-01 00:00:00/2038結束時間是第 2147483647 秒,北京時間 2038-1-19 11:14:07,格林尼治時間 2038年1月19日 凌晨 03:14:07 | YYYYMMDD HHMMSS | 混合日期和時間值,時間戳 |
字元串類型
字元串類型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。該節描述了這些類型如何工作以及如何在查詢中使用這些類型。
類型 | 大小 | 用途 |
---|---|---|
CHAR | 0-255 bytes | 定長字元串 |
VARCHAR | 0-65535 bytes | 變長字元串 |
TINYBLOB | 0-255 bytes | 不超過 255 個字元的二進位字元串 |
TINYTEXT | 0-255 bytes | 短文本字元串 |
BLOB | 0-65 535 bytes | 二進位形式的長文本數據 |
TEXT | 0-65 535 bytes | 長文本數據 |
MEDIUMBLOB | 0-16 777 215 bytes | 二進位形式的中等長度文本數據 |
MEDIUMTEXT | 0-16 777 215 bytes | 中等長度文本數據 |
LONGBLOB | 0-4 294 967 295 bytes | 二進位形式的極大文本數據 |
LONGTEXT | 0-4 294 967 295 bytes | 極大文本數據 |
注意:char(n) 和 varchar(n) 中括弧中 n 代表字元的個數,並不代表位元組個數,比如 CHAR(30) 就可以存儲 30 個字元。
CHAR 和 VARCHAR 類型類似,但它們保存和檢索的方式不同。它們的最大長度和是否尾部空格被保留等方面也不同。在存儲或檢索過程中不進行大小寫轉換。
BINARY 和 VARBINARY 類似於 CHAR 和 VARCHAR,不同的是它們包含二進位字元串而不要非二進位字元串。也就是說,它們包含位元組字元串而不是字元字元串。這說明它們沒有字符集,並且排序和比較基於列值位元組的數值值。
BLOB 是一個二進位大對象,可以容納可變數量的數據。有 4 種 BLOB 類型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它們區別在於可容納存儲範圍不同。
有 4 種 TEXT 類型:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。對應的這 4 種 BLOB 類型,可存儲的最大長度不同,可根據實際情況選擇。
注意
MySQL 5.0 以上的版本:
-
1、一個漢字佔多少長度與編碼有關:
UTF-8:一個漢字=3個位元組
GBK:一個漢字=2個位元組 -
2、varchar(n) 表示 n 個字元,無論漢字和英文,Mysql 都能存入 n 個字元,僅是實際位元組長度有所區別
char、varchar 與 text
關於 char、varchar 與 text 平時沒有太在意,一般來說,可能現在大家都是用 varchar。但是當要存儲的內容比較大時,究竟是選擇 varchar 還是 text 呢?
這三種類型比較:
- (1)char: char 不用多說了,它是定長格式的,但是長度範圍是 0~255. 當你想要儲存一個長度不足 255 的字元時,Mysql 會用空格來填充剩下的字元。因此在讀取數據時,char 類型的數據要進行處理,把後面的空格去除。
- (2)varchar: 關於 varchar,有的說最大長度是 255,也有的說是 65535,查閱很多資料後發現是這樣的:varchar 類型在 5.0.3 以下的版本中的最大長度限制為 255,而在 5.0.3 及以上的版本中,varchar 數據類型的長度支援到了 65535,也就是說可以存放 65532 個位元組(注意是位元組而不是字元!!!)的數據(起始位和結束位佔去了3個位元組),也就是說,在 5.0.3 以下版本中需要使用固定的 TEXT 或 BLOB 格式存放的數據可以在高版本中使用可變長的 varchar 來存放,這樣就能有效的減少資料庫文件的大小。
- (3)text: 與 char 和 varchar 不同的是,text 不可以有默認值,其最大長度是 2 的 16 次方-1
總結起來,有幾點:
- 經常變化的欄位用 varchar
- 知道固定長度的用 char
- 盡量用 varchar
- 超過 255 字元的只能用 varchar 或者 text
- 能用 varchar 的地方不用 text
按照查詢速度: char最快, varchar次之,text最慢。
數據表
創建數據表
以下為創建MySQL數據表的SQL通用語法:
CREATE TABLE table_name (column_name column_type); CREATE TABLE IF NOT EXISTS `runoob_tbl`( `runoob_id` INT UNSIGNED AUTO_INCREMENT, `runoob_title` VARCHAR(100) NOT NULL, `runoob_author` VARCHAR(40) NOT NULL, `submission_date` DATE, PRIMARY KEY ( `runoob_id` ) )ENGINE=InnoDB DEFAULT CHARSET=utf8;
- 如果你不想欄位為 NULL 可以設置欄位的屬性為 NOT NULL, 在操作資料庫時如果輸入該欄位的數據為NULL ,就會報錯。
- AUTO_INCREMENT定義列為自增的屬性,一般用於主鍵,數值會自動加1。
- PRIMARY KEY關鍵字用於定義列為主鍵。 您可以使用多列來定義主鍵,列間以逗號分隔。
- ENGINE 設置存儲引擎,CHARSET 設置編碼。
查看數據表
desc 數據表名稱;
MySQL 欄位屬性應該盡量設置為 NOT NULL
除非你有一個很特別的原因去使用 NULL 值,你應該總是讓你的欄位保持 NOT NULL。
1、首先,我們要搞清楚空值 "" 和 NULL 的概念:
- 1)空值是不佔用空間的
- 2)MySQL中的NULL其實是佔用空間的
所謂的 NULL 就是什麼都沒有,連