Linux資料庫管理——day1——安裝MySQL、基本增刪改查操作
資料庫:
DB | 資料庫 | 依照某個資料模型進行組織並存放到儲存器中 |
DBMS | 資料庫管理系統 | 用來控制和管理資料的服務軟體 |
DBS | 資料庫系統 | DB+DBMS=DBS,是一個計算機系統 |
MySQL (埠號3306)
特點
1. 適用於中小規模、關係資料庫系統
2. 支援Linux和Windows等多作業系統
3. 支援C和C++編寫,可移植性強
4. 通過API支援Python/Java/Perl/PHP等語言
主要應用環境 LAMP、LNMP、WNMP、WAMP ,再叢集中用來儲存檢索資料
安裝MySQL
1. 下載RPM包,前往官網下載,解壓後,前往目錄然後安裝
yum -y install perl-JSON perl-Data-Dumper perl-Time-HiRes
rpm -Uvh mysql-community-*.rpm
2. 啟動服務
systemctl restart mysql
3. 檢視配置檔案 /etc/my.cnf
資料存放目錄 /var/lib/mysql
日誌檔案 /var/log/mysqld.log
4. 修改資料庫管理密碼
# 第一次進入剛剛建立的資料庫 awk '/temporary password/{print $11}' /var/log/mysqld.log mysql -hlocalhost -uroot -p'剛剛檢視的密碼' # 這樣就進入mysql操作介面,修改密碼命令如下: mysql> set global validate_password_policy=0; set global validate_password_length=6; alter user [email protected]"localhost" identified by "密碼"; # 只檢查密碼的長度 # 密碼長度不能小於6個字元 # 設定密碼
資料庫資料檔案存放資訊:
1. 資料庫庫檔案存放位置 /var/lib/mysql/
2. 表文件就在對因的庫檔案目錄下/var/lib/mysql/庫名/。
3.可以用Linux系統命令在 /var/lib/mysql/ 建立一個目錄,在mysql裡面就會出現同名的庫,而且可以在mysql介面中切換檢視這個庫,但是不能建立表,原因是許可權,用mkdir建立的目錄是root所有的,而不是mysql,所以mysql就沒有許可權建立表
管理庫命令
檢視有哪些資料庫
show databases
檢視庫中有哪些表
show 庫名.tables
進入某個資料庫進行操作,下面命令中所有表前不寫庫名,預設是該庫
use 庫名
對庫中的表 增刪改查
建立一個表(如果寫的庫名就是當前所在庫,那可以不寫庫名)
create table 庫名.表名(
欄位1 欄位型別(寬度) 約束條件,
………………
欄位n 欄位型別(寬度) 約束條件
);
解釋:
表後是一個括號,括號外分號結尾,這括號內所有資料就是一個完整表結構
括號內用 , (英文逗號) 分隔 每部分就是一個欄位資料
一個欄位就是資料中一列資料
欄位表名可以是中文的,不過在 ) ; 中間加上 DEFAULT CHARSET=utf8 表中所有資料都支援中文。
刪除某個表
drop 庫名.表名;
檢視當初建立某個表的資訊
show create table 庫名.表名;
查看錶的結構資訊
desc 庫名.表名;
# 資訊的欄位含義如下
# 欄位名 欄位型別 是否為空 是否為主鍵 預設值 描述資訊
附: 如果返回值是 Empty set (0.00 sec) 代表查詢的表或者庫中沒有任何資料
對錶內資料 增刪改查(如果寫的庫名就是當前所在庫,那可以不寫庫名)
增加新資料
insert into 庫名.表名 values
("第一列值",……,"第n列值"),
…………
("第一列值",……,"第n列值");
解釋:
這裡一個括號內所有資料就是表中的一行資料,
括號中資料以 , (英文逗號) 分隔 每部分就是一行資料中對應列的值
所有資料新增完後,在最後一個括號外分號結尾
特: 只給具體的幾列值進行賦值,其他列值使用預設,不過列名間用逗號隔開,但是不能有空格
insert into 表名(列名1,列名2……) values(資料1,資料2……);
刪除某行資料
delete from 表 where 匹配條件;
# 如果沒有where匹配限制,就會刪除表中所有的資料資訊
修改某行的某些欄位的資訊
update 庫名.表名 set 欄位1=值1,……,欄位n=值n where 匹配條件;
# 如果沒有where匹配限制,就會修改表中所有的行中對應欄位的值
查看錶中符合要求的欄位資訊,以及如何設定別名
select 欄位 from 庫名.表名 where 匹配條件;
# 如果沒有where匹配限制,就會顯示錶中所有要求欄位的值
# 如果想輸入所有欄位,就用*代替就可
select 欄位1 相應別名1,字端2 相應別名2 …………
# 注意,別名不能時SQL語言的關鍵字
# 修改資料的時候,新資料不能和 約束、欄位資料型別 有衝突,否則會導致無法新增!
欄位型別
數值型別、字元型、時間型、列舉型
型別 | 範圍(有符號) | 範圍(沒有符號) | 描述 |
整數型別 | |||
tinyint | -128 ~ 127 | 0 ~ 255 | 微小整數 |
smallint | -2^15 ~ 2^15-1 | 0 ~ 2^16-1 | 小整數 |
int | -2^23 ~ 2^23-1 | 0 ~ 2^24-1 | 整數 |
bigint | -2^31 ~ 2^31-1 | 0 ~ 2^32-1 | 整數 |
如果整數型別中存了一個小數,那麼小數部分會四捨五入 | |||
小數型別 | |||
float | -2^23 ~ 2^23-1 | 0 ~ 2^24-1 | 單精度浮點數 |
double | -2^31 ~ 2^31-1 | 0 ~ 2^32-1 | 雙精度浮點數 |
如果小數型別中存了一個整數,那麼會自動在後面加上若干個0 | |||
如果數值超過範圍,僅僅儲存最大/最小值 |
注:
1. 在型別後面 空格+unsigned 就代表無符號儲存,不寫預設為有符號儲存
2. 字元型別的寬度是限制儲存多少,如果資料型別後面沒有 (寬度) ,會報錯
數值型別的寬度是控制顯示長度,如果資料長度小於控制長度,會預設用0補齊,而存資料的多少取決於資料型別本身的設定,如果資料型別後面沒有 (寬度) ,預設為顯示11位的長度,最好把長度寫成1,節約空間
字元型別
char(最多個數) (常用) | 最多儲存儲存個數最大寫255個字元 |
每次定義的時候,固定了儲存範圍 | |
使用的時候不一定要寫 (最大個數),不寫預設為最多1個字元 | |
varchar(最多個數) | 最多儲存65532個字元 |
會根據儲存的具體多少分配空間,但是也不能超過規定範圍 | |
必須寫最多個數,不然報錯 | |
text/blob 可以存超過65532個字元,用來儲存大型資料資訊 |
對比:
型別text和blob用於存放資料極大的資料,一般不用,所以主要對比char和varchar
不同點:
char執行效率比varchar高,varchar比char節約儲存空間
所以現在用的最多的還是char,原因就是,相對於節約空間,人們現在更追求高效的速度。
相同點:
都不能超,char限定多少就是多少,varchar會根據實際儲存,如果比原先定的小,分的空間也會小點
時間型 | 時間範圍 | 資料書寫格式 | 範例 |
datetime | 1000-01-01 00:00:00.000000 ~ 9999-12-31 23:59:59.999999 | 年月日時分秒 | 20181015181615 |
timestamp | 1970-01-01 00:00:00.000000 ~ 2038-01-19 23:59:59.999999 | ||
date | 0001-01-01 ~ 9999-12-31 | 年月日 | 20181015 |
year | 1901-2155 | 年 | 2018 |
time | 00:00:00 ~ 23:59:59 | 時分秒 | 181615 |
然後用select查詢結果就是:
+---------------------+------------+------+----------+
| 2018-10-15 18:16:15 | 2018-10-15 | 2018 | 18:16:15 |
+---------------------+------------+------+----------+
列舉型別
從給定的值中任選一個 | enum(值1,……值n) |
從給定的值中任選多個 | set(值1,……值n) |
在新增資料的時候,用 "" 標示出來,然後可以並且需要選多個的話,就在 "" 裡面寫多個然後用 , 分隔標示