一、搭建數據庫服務器
1.選購合適的服務器:
配置: CPU 內存 存儲
用途:雲服務器、硬件服務器
2.安裝軟件包的選擇:
根據服務器操作系統的版本:windows linux unix
軟件的版本:開源軟件或商業軟件
安裝方式:
源碼安裝:自定義安裝,想裝在哪都,裝什麼功能都行,但是要解決依賴關係;
rpm包安裝:安裝簡單,封裝好了,缺點,無法改變配置
軟件包的來源:官網去下或操作系統裡的安裝包內也有
3.修改配置文件
4.啟動服務
5.具體操作過程:用的是開源版,5.7.17版本,rpm裝,在IP地址是192.168.4.50上 的主機運行mysql數據庫。
[root@host50 08.dba-1]# tar -xf mysql-5.7.17.tar
[root@host50 08.dba-1]# ls
mysql-community-client-5.7.17-1.el7.x86_64.rpm--提供命令的
mysql-community-common-5.7.17-1.el7.x86_64.rpm
mysql-community-devel-5.7.17-1.el7.x86_64.rpm
mysql-community-embedded-5.7.17-1.el7.x86_64.rpm
mysql-community-embedded-compat-5.7.17-1.el7.x86_64.rpm
mysql-community-embedded-devel-5.7.17-1.el7.x86_64.rpm
mysql-community-libs-5.7.17-1.el7.x86_64.rpm
mysql-community-libs-compat-5.7.17-1.el7.x86_64.rpm
mysql-community-minimal-debuginfo-5.7.17-1.el7.x86_64.rpm
mysql-community-server-5.7.17-1.el7.x86_64.rpm--提供服務的主包
mysql-community-test-5.7.17-1.el7.x86_64.rpm
[root@host50 08.dba-1]# rpm -qa | grep -i mariadb
mariadb-libs-5.5.56-2.el7.x86_64
[root@host50 yum.repos.d]# rpm -Uvh mysql-community-*.rpm
提示需要perl-JSON依賴包,直接yum安裝此依賴包
[root@host50 yum.repos.d]# yum -y install perl-JSON
[root@host50 yum.repos.d]# rpm -Uvh mysql-community-*.rpm
[root@host50 08.dba-1]# rpm -qa | grep -i mysql
mysql-community-client-5.7.17-1.el7.x86_64
mysql-community-minimal-debuginfo-5.7.17-1.el7.x86_64
mysql-community-test-5.7.17-1.el7.x86_64
mysql-community-common-5.7.17-1.el7.x86_64
mysql-community-devel-5.7.17-1.el7.x86_64
mysql-community-libs-compat-5.7.17-1.el7.x86_64
mysql-community-libs-5.7.17-1.el7.x86_64
mysql-community-embedded-5.7.17-1.el7.x86_64
mysql-community-embedded-compat-5.7.17-1.el7.x86_64
mysql-community-embedded-devel-5.7.17-1.el7.x86_64
mysql-community-server-5.7.17-1.el7.x86_64
至此,安裝完成,生成數據庫目錄:/var/lib/mysql空目錄
[root@host50 mysql]# systemctl start mysqld
第一次啟動服務,需要初始化,加載文件,需要一定時間,不會秒起
此時再查看數據庫目錄:/var/lib/mysql,自動生成了很多目錄和文件
[root@host50 mysql]# systemctl enable mysqld 設置開機自啟
[root@host51 mysql]# systemctl status mysqld查狀態為running確認啟動成功。
6.步驟總結:
1.解壓安裝包mysql-5.17.7
2.檢查機器是否安裝其他版本的數據庫
3.安裝依賴包perl-JSON(鏡像有)
4.升級安裝mysql-community-*.rpm
5.啟動服務,查狀態
7.參數總結:
1.配置文件位置:/etc/my.cnf
2.數據庫目錄:/var/lib/mysql
3.進程名:mysqld
4.默認端口號:3306
5.傳輸協議:tcp
6.進程所有者,所屬組:mysql
二、數據庫服務的基本使用
1.數據存儲到數據庫服務器上過程:
連接數據庫服務器(命令連接 圖形工具)
選擇庫(文件夾)
建表(文件)
插入記錄(行)
斷開連接
2.連接數據庫服務器
mysql -hlocalhost -uroot -p密碼 [庫名] //連接數據庫的命令root是數據庫管理員的用戶名,與系統管理員同名,但不是同一個用戶
[root@host50 mysql]# grep -i password /var/log/mysqld.log //查看管理員初始密碼,將“:”後的內容複製然後登陸
此時對數據庫進行操作會提示:ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement. //你必須先重置密碼才可以進行操作。
ps:默認設置的密碼為複雜密碼:包括大小寫,數字加特殊符號
可以通過修改密碼策略簡化:
mysql>set global validate_password_policy=0;//將策略設置簡單
mysql> set global validate_password)length=6;//將密碼最短長度設為6位
mysql> alter user root@'localhost' identified by '123456'; //設置密碼
//global為全局設置,在數據庫裡修改只是臨時生效,要永久設置需要在配置文件內添加:
validate_password_policy=0
validate_password)length=6
然後停掉數據庫再啟動確認設置成功。
3.選擇庫(文件夾)
a.操作指令類型:
mysql指令:環境切換,看狀態,推出等控制;
sql指令:數據庫定義,查詢,操縱,授權語句:
DDL數據定義語言(cresate alter drop)
DML數據操作語言(insert update delete)
DCL 數據控制語言(grant revoke)
DTL 數據事物語言(commit rollback savepoint)
b.使用的基本注意事項:
操作指令不區分大小寫(密碼,變量除外)
不支持tab鍵自動補齊
每條sql指令以;結束或分隔
默認的4個庫不要刪,有些存放的是系統啟動所需要的數據
c.庫名的命名規則:可以使用數字/字母/下劃線,不能純數字
不能用特殊字符,指令關鍵字
區分大小寫,具有唯一性
d.庫管理基本命令:
– Show databases; // 顯示已有的庫
– Use 庫名 ;// 切換庫
– Select database(); // 顯示當前所在的庫
– Create database 庫名 ; // 創建新庫
– Show tables;// 顯示已有的表
– Drop database 庫名; // 刪除庫
ps:把庫刪掉了,沒有備份,能不能恢復?
可以,但是要通過第三方軟件,將硬盤上存放庫的資料找回來
ps:庫與數據庫目錄下的目錄是雙向的,在數據庫目錄下建目錄,也會多出一個庫,但是擁有者和所屬組是root,因此連接數據庫後只能查看和進入庫,不能寫入,因為沒權限。
4.建表(文件)
表管理命令:
創建表:
create table 庫名.表名(
字段名1 字段類型(寬度) 約束條件,
字段名2 字段類型(寬度) 約束條件,
...
字段名N 字段類型(寬度) 約束條件,
);
eg:mysql> create table t1 (
-> name char(15),
-> class char(7)
-> );
查看錶結構: desc t1;
查看錶記錄: select * from 表名;
刪除表: drop table 表名;
5.插入記錄(行)
Insert into 表名 values( 值列表 );// 插入表記錄,一個()為一行
eg:
mysql> insert into t1 values("haha1","nsd1803"),("haha2","nsd1803");
Update 表名 set 字段 = 值 ; // 修改表記錄(批量修改)
eg:
mysql> update t1 set class="nsd1809";
Delete from 表名 ; // 刪除表記錄(所有行,表還在,字段也還在)
eg:
mysql> delete from t1;
Select * from 表名 ; // 查看錶記錄(*為全部字段)
eg:
mysql> select * from t1;
ps:mysql默認字符集為latin1,不支持中文,在執行insert時存不了中文字符,但庫名和表名可以中文,因此需要在建表時設字符集為支持中文字符的utf8
eg:
mysql> create table 學生信息表2(
-> 姓名 char(15),
-> 班級 char(7)
-> )Default charset=utf8;
執行insert驗證或show create table 學生信息表2;查看創建表時的設置。
三、mysql數據類型
1.常見的信息種類:
數值型:
字符型:
枚舉型:興趣還好,性別等只能選一個之類的
日期時間型:
2.數值類型:
默認用的是有符號的存儲範圍,若要用無符號的在設置類型時後面在unsigned;
整型:存小數點會四捨五入
eg(整數型):
mysql> create table db1.t2(level tinyint);
mysql> insert into t2 values(251);
ERROR 1264 (22003): Out of range value for column 'level' at row 1
mysql> insert into t2 values(127);
Query OK, 1 row affected (0.03 sec)
mysql> create table db1.t3(level tinyint unsigned);
mysql> insert t3 values(255);
Query OK, 1 row affected (0.02 sec)
浮點型(帶小數點):整數位.小數位--->總位數
n m
float(m,n)
double(m,n)
eg:
mysql> create table t4(pay double(7,2));
mysql> insert into t4 values(12300);
mysql> insert into t4 values(123);
mysql> insert into t4 values(123000);
ERROR 1264 (22003): Out of range value for column 'pay' at row 1
mysql> select * from t4;
+----------+
| pay |
+----------+
| 123.00 |
| 12300.00 |
+----------+
3.字符類型:
定長:char(字符數)
普通字符,最大長度255個字符,不指定寬度時默認為1;
固定長度,不夠指定字符數時在右邊用空格補齊,字符數超出時,無法寫入數據;
存儲數度效率高,因為無需計算存儲空間。
變長:varchar(字符數)
普通字符,按數據實際大小分配存儲空間,必須指定寬度,不然報錯;
字符數斷超出時,無法寫入數據;
存儲速度略低,需要佔用cpu來計算存儲空間,不建議全部用,消耗資源。
大文本類型:text/blob等二進制文件,字符數打與65535存儲時使用,實際應用中不建議存放視頻音頻等打文件,一般都是存放此文件的路徑做好標記方便查找
eg:
mysql> create table t5(
-> name char(15),
-> email varchar(30)
-> );
mysql> insert into t5 values("bob","[email protected]"),("lucy","[email protected]");
Records: 2 Duplicates: 0 Warnings: 0
mysql> insert into t5 values("kdsajlgdlkdsagj","asd");
mysql> insert into t5 values("kdsajlgdlkdsagja","asd");
ERROR 1406 (22001): Data too long for column 'name' at row 1
mysql> select * from t5;
4.枚舉類型
1.從給定值集合中選擇單個值,ENUM
定義格式:enum(值1,值2...值n),不能超過64個
ps:插入記錄時可寫值列表內的序號,也可寫值內容
2.從給定值集合中選擇一個或多個值,SET
定義格式:set(值1,值2...值n)
eg:
mysql> create table t6(
-> name char(15),
-> age tinyint unsigned,
-> pay float(7,2),
-> sex enum("boy","girl","no"),
-> hobby set("woman","money","game","eat")
-> )default charset=utf8;
mysql> desc t6;
mysql> insert into t6 values("bob",21,20000,"no","eat,game");
mysql> insert into t6 values("bob2",29.2000,"man","eat");
ERROR1136 (21S01): Column count doesn't match value count at row 1
mysql> insert into t6 values("bob3",20,200000,"2","woman");
ERROR 1264 (22003): Out of range value for column 'pay' at row 1
mysql> insert into t6 values("bob3",20,20000,"2","woman");
mysql> select * from t6;
5.日期類型
1.日期時間, DATETIME
– 佔用 8 個字節
– 範圍: 1000-01-01 00:00:00.000000~ 9999-12-31 23:59:59.999999
2.日期時間, TIMESTAMP
– 佔用 4 個字節
– 範圍: 1970-01-01 00:00:00.000000~ 2038-01-19 03:14:07.999999
3.日期, DATE
– 佔用 4 個字節
– 範圍: 0001-01-01 ~ 9999-12-31
4.年份, YEAR
– 佔用 1 個字節
– 範圍: 1901~2155
5.時間, TIME
– 佔用 3 個字節
– 格式: HH:MM:SS
ps:
關於日期時間字段
當未給 TIMESTAMP 字段賦值時,自動以當前系統時間賦值,而 DATETIME 字段默認賦值為 NULL。
關於YEAR 年份的處理
– 默認用 4 位數字表示
– 當只用 2 位數字賦值時, 01~69 視為 2000~2069 ,而 70~99 視為 1970~1999
6.小結:
年 year YYYY 2018
日期 date YYYYMMDD 20180614
時間 time HHMMSS 174258
日期時間datetimeYYYYMMDDHHMMSS 20180614174258
eg:
mysql> create table t7(
-> name char(15),
-> syear year,
-> birth date,
-> up_class time,
-> party datetime
-> );
mysql> insert into t7 values
("yaya",1990,20181120,083000,20180618213000);
mysql> select * from t7;
7.時間函數
閱讀更多 VC1212138 的文章