1. 程式人生 > >MySQL的數據類型和表結構

MySQL的數據類型和表結構

lte 啟動服務 from gpa sleep 補齊 dcl table roo

MySQL的數據類型和表結構

DB,DataBase
-數據庫:依照某種數據模型進行組織並存放到存儲器的數據集合。

DNMS,DataBase Management System
-數據庫管理系統:用來操縱和管理數據庫的大型服務軟件。

DBS,DataBase System
-數據庫系統:即DB+DBMS,指帶有數據庫並整合了數據庫管理軟件的計算機系統。

Oracle(甲骨文):Oracle Database 、 MySQL
Microsoft(微軟):SQL Server 、Access
IBM: DB2
Sybase: Sybase

MySQL主要特點:
-關系型數據庫
-支持Linux/Unix、Windows等多種操作系統

-使用C和C++編寫,可移植性強
-通過API支持Python/Java/Perl/PHP等語言

應用環境:
-LAMP平臺,與Apache HTTP Server組合
-LNMP平臺,與Nginx組合

關系型數據庫服務軟件(RDBMS):按照規定的結果存儲數據,並且數據(values)之間可以做關聯操作。
例:Oracle MySQL DB2 SQL Server

非關系型數據庫軟件(NOSQL):以鍵值對的形式,一一對應,數據(values)之間沒有關聯。
例:Redis mongdb

一、安裝MySQL
yum -y install perl-Data-Dumper Perl-JSON perl-Time-HiRes #依賴包

tar -xf mysql-5.7.17-1.el7.x86_64.rpm-bundle.tar
rpm -Uvh mysql-conmmunity-*.rpm #U升級安裝,可替換沖突文文件。

二、啟動服務
/usr/lib/systemd/system/mysqld.service

systemctl start mysql
systemctl enable mysql

三、登錄
默認的數據庫管理員賬號root,允許從localhost訪問。
首次登錄密碼在安裝時隨機生成,存儲在錯誤日誌文件裏。
grep ‘temporary password‘ /var/log/mysql.log
.....@localhost: matoa>AV<PSDK #隨機密碼

mysql -uroot -p"matoa>AV<PSDK"
mysql>

四、修改密碼
0 or LOW 長度
1 or MEDIUM(默認) 長度,數字,小寫/大寫,和特殊字符
2 or STRONG 長度,數字,小寫/大寫和特殊字符,字典文件
通過客戶端工具mysql連接本地服務器,使用alter user重設置口令。

mysql>set global validate_password_policy=0; #只驗證密碼長度
mysql>set global validate_password_length=6; #修改密碼長度為6個字符,默認是8個字符。
mysql>alter user user() identified by "123456"; #修改登錄密碼
mysql>quit #退出

mysql -uroot -p123456 #使用新密碼登錄

要想實現永久生效需修改配置文件:
vim /etc/my.cnf
.....
validate_password_policy=0
validate_password_length=6

服務相關文件
/etc/my.cnf 配置文件
/var/lib/mysql 數據庫目錄
默認端口 3306
進程名 mysqld
傳輸協議 TCP
進程所有者 mysql
進程所屬組 mysql

使用mysql命令:
mysql -h服務器ip -u用戶名 -p密碼 [數據庫庫名]

指令類型:
MySQL指令:環境切換,看狀態,退出等控制
SQL指令:數據庫定義/查詢/操縱/授權語句
DDL 數據定義語言(create alter drop)
DML 數據操作語言(insert updata delect)
DCL 數據控制語言(grant revoke)
DTL 數據事物語言(commit rollback savepoint)

基本註意事項:
1.指令不區分大小寫(密碼、變量值除外)
2.每條SQL指令以";"結束或分隔。
3.c\可廢棄當前編寫錯的指令。

命令:
show databases; 查看所有的庫
use 庫名; 進入到指定庫
show tables; 列出當前庫內的所有表
describe 表名; 查看表的字段結構
create datebases 庫名; 創建指定庫
select database(); 查看當前所在的庫
drop databas 庫名; 刪除指定的庫

create table 庫名.表名( #創建指定的表
字段名1 字段類型(寬度) 約束條件;
字段名2 字段類型(寬度) 約束條件;
...........
);

例建表:
mysql>create   table   gamedb.stu(
mysql>name    char(10),
mysql>age      int
mysql>);

drop table 庫名.表名; 刪除指定庫下的表

insert into 庫名.表名 values(值列表); #插入表記錄

例:
insert into  gamedb.stu  values("jim",21),("tom",29);

select * from 庫名.表名; 查看表的所有記錄
delete from 庫名.表名; 刪除表的所有記錄

常見類型的信息
數值型:體重、身高、成績、工資、價格等
字符型:姓名、工作單位、地址等
枚舉型:興趣愛好、性別等
日期時間型:出生日期、註冊時間等

1.數值型
類型 大小 範圍(有符號) 範圍(無符號) 用途
TINYINT 1字節 -128~127 0~255 微小整數
SMALLINT 2字節 -32768~32767 0~65535 小整數
MEDUIMINT 3字節 -(2^23)~(2^23)-1 0~(2^24)-1 中整數
INT 4字節 -(2^31)~(2^31)-1 0~(2^32)-1 大整數
BIGINT 8字節 -(2^63)~(2^63)-1 0~(2^64)-1 極大整數
FLOAT 4字節 單精度浮點數
DOUBLE 8字節 雙精度浮點數
DECIMAL 對DECIMAL(M,D),其中M為有效位數、D為小數位數,M應大於D,占用M+2字符

1.1整數型
使用UNSIGED修飾時,對應的字段只保存正數(無符號)。
數值不夠指定寬度時,默認是在左邊填空格補位。
寬度僅是顯示寬度,存數據值的大小有類型決定。
使用關鍵字ZEROFILL時,填0代替空格補位。
數值超出範圍時,報錯。

1.2浮點型
定義格式:float(總寬度,小數位數)
當字段值與類型不匹配時,字段值作為0處理。
數值超出範圍時,僅保存最大/最小值。
浮點型:根據存儲數值的範圍分為 單精度 雙精度
單精度float(n,m)
雙精度double(n,m)
n表示總位數
m表示小數位的位數

2.字符類型
2.1定長:char(字符數)
最大長度255字符。
不夠指定字符數時默認在右邊用空格補齊。
字符數超出時,無法寫入數據。

2.2變長:varchar(字符數)
按數據實際大小分配存儲空間。
字符數超出時,無法寫入數據。
缺點:每次都要計算,消耗資源。

2.3大文本類型:text/blob
字符數大於655535存儲時使用。

例:
mysql>create  database ku;
mysql>create  table  ku.biao(
>name   char(7) ,
>age    tinyint(3)  unsigend,
>high   float(3,2) 
>);

mysql>desc  ku.biao;
Fied   Type          Null     key       Default  Extra
字段名 字段類型     是否為空 索引類型    默認值   描述信息  

3.日期時間類型
3.1日期時間,DATETIME
占用8個字節。
範圍:1000-01-01 00:00:00.000000 ~ 9999-12-31 23:59:59.999999
例:2017-12-31 23:59:59

3.2日期時間,TIMESTAMP
占用4個字節。
範圍:1970-01-01 00:00:00.000000 ~ 2038-01-19 03:14:07.999999
例:2017-12-31 23:59:59

3.3日期,DATE
占用4個字節。
範圍:0001-01-01 ~ 9999-12-31

3.4年份,YEAR
占用1個字節。
範圍:1901~2155

3.5時間,TIME
占用3個字節。
格式:HH:MM:SS

關於日期時間字段,當未給TIMESTAMP字段賦值時,自動以當前系統時間賦值,而DATETIME字段默認值為NULL。
YEAR年份的處理,默認用4位數字表示,當只用2位數字賦值時,01~69視為2000~2069,而70~99視為1970~1999。

例:
mysql>create table  ku.biao2(
>name  varchar(8),
>starty  year,
>birthy  date, 
>abc     time
>);

時間函數:
now() 獲取調用此函數時的系統日期
sysdate() 執行時間動態獲得系統時間
sleep(N) 休眠N秒
curdate() 獲取當前的系統時間
curtime() 獲取當前的系統時刻
month() 獲取指定時間中的月份
date() 獲取指定時間中的日期
time() 獲取指定時間中的時刻

例:
mysql>select now();
mysql>select date(now());
mysql>select time(now());

4.枚舉類型
4.1從給定值集合中選擇單個值,ENUM。
格式:enum(值1,值2,值N)

4.2從給定值集合中選擇一個或多個值,SET。
格式:set(值1,值2,值N)

例:
mysql>create table ku.biao3(
>name  char(5),
>gen   enum("boy","girl"),
>likes  set("book","music","pingpang","sleep")
>);

約束條件
Null 允許為空,默認設置
NOT NULL 不允許為空
key 索引類型
Default 設置默認值,缺省為NULL

例:
mysql>create table  ku.tbiao5(
>name  varchar(4) not null,
>gen   enum("boy","girl") default "boy",
>age   int(3)  not null  default 22,
>);

mysql>desc ku.biao5;

修改表的字段
基本用法:
ALTER TABLE 表名 執行動作;

執行動作:
1.添加新字段
ADD 字段名 類型(寬度) 約束條件;

ADD 字段名 類型(寬度) 約束條件 FIRST; //添加字段到最前面

ADD 字段名 類型(寬度) 約束條件 AFTER 字段名2; //添加字段到字段2後面

2.修改字段類型
MODIFY 字段名 類型(寬度) 約束條件;

3.修改字段名
CHANGE 源字段名 新字段名 類型(寬度) 約束條件;

4.刪除指定字段
DROP 字段名;

例:
mysql>alter table ku.biao5 add 
>kuki   varchar(5) not null ; 

MySQL的數據類型和表結構