目錄
- 前言
- 數據庫的配置
- 數據庫修改信息
- 用戶操作(**********)
- 數據庫表的引擎:驅動數據的方式-優化
- 數據庫模式
- mysql支持的數據類型
前言
之前我們講了下載安裝數據庫,還有如何卸載(雖然直接重裝系統就好)
那么現在讓我們來講講
"""
1、數據庫與表的剩余操作
編碼配置、引擎介紹
2、數據庫字段的操作
3、數據庫的數據類型
4、數據庫字段的約束條件
"""
數據庫的配置
通過配置文件統一配置的目的是統一管理
- 服務端(mysqld)
- 客戶端(client)
那么如果我們配置了mysqld(服務端)的編碼為utf8,那么再創建的數據庫,默認編碼都采用utf8
配置流程
-
在mysql安裝目錄下,創建文件----->my.ini
ps : mac下配置文件名叫my.cnf
-
設置配置文件內容並保存
[mysqld] #服務器配置 port=3306 #可以修改數據庫默認端口 character-set-server=utf8 #編碼格式 collation-server=utf8_general_ci [client] #mysql再見的客戶端叫[mysql],配置[client]即配置了[mysql],也配置了其他存在方式的客戶端,比如Navicat可視化客戶端 default-character-set=utf8
-
重啟數據庫服務
數據庫修改信息
修改字符編碼
- alter database 數據庫名 charset=編碼格式;
用戶操作(**********)
為特定的數據庫分配該數據庫的操作權限的用戶
-
grant 權限們 on 數據庫.表 to 用戶名@'主機名' identified by '密碼';
- all:所有權限
- oldboy.*:表示oldboy數據庫下所有表
- oldboy@'localhost':本機可以通過oldboy用戶登錄
- identified by 'Oldboy123':密碼為Oldboy123
- grant all on oldboy.* to oldboy@'localhost' identified by 'Oldboy123';
撤銷權限
- revoke 權限1,權限2,...on 數據庫名.表名 from 用戶名@'主機名';
刪除用戶
- drop user 用戶名@'主機名';
數據庫表的引擎:驅動數據的方式-優化
前言:引擎是建表時候的規定,提供給表使用的,不是數據庫。用於優化數據庫模式
展示引擎語句
- show engines;
# innodb(默認): 支持事務, 行級鎖, 外鍵
create table t11(id int)engine=innodb;
# myisam: 查詢效率要優於innodb, 當不需要支持事務, 行級鎖, 外鍵, 可以通過設置myisam來優化數據庫
create table t12(id int)engine=myisam;
# blackhole:黑洞,存進去的數據都會消失(可以理解不存數據)
create table t13(id int)engine=blackhole;
# memory:表結構是存儲在硬盤上的,但是表數據全部存儲在內存中
create table t14(id int)engine=memory;
數據庫模式
前言:mysql 5.7以后默認為安全模式
5.6版本
- 非安全模式:sql_model=no_engine_substitution
- 安全模式:sql_model=strict_trans_tables
# 查看當前數據庫模式:
show variables like "%sql_mode%"; # %匹配0~n個任意字符 => 模糊查詢
# 臨時設置為安全模式,服務重啟后會被重置
set global sql_mode="strict_trans_tables"; # 在root用戶登錄狀態下
# 在設置后,quit斷開數據庫連接后(服務器不重啟)就會進入安全模式
# 安全模式下,非安全模式下sql執行的警告語句,都會拋異常
create table t1(name char(2));
insert into t1 values ("ab") # 正常
insert into t1 values ("guapi") # 錯誤 Data too long for column 'name' at row 1
mysql支持的數據類型
數據類型
- 數據類型表
類型 | 大小 | 范圍(有符號) | 范圍(無符號)unsigned約束 | 用途 |
---|---|---|---|---|
TINYINT | 1字節 | (-128,127) | (0,255) | 小整數值 |
SMALLINT | 2字節 | (-32768,32767) | (0,65535) | 大整數值 |
MEDIUMINT | 3字節 | (-8388608,8388607) | (0,16777215) | 大整數值 |
INT或INTEGER | 4字節 | (-2147483648,2147483 647) | (0,4294967295) | 大整數值 |
BIGINT | 8字節 | (-9233372036854775808,9223372036854 775807) | (0,18446744073709551 615) | 極大整數值 |
FLOAT | 4字節float(255,30) | (-3.402823466E+38,-1.175494351E-38),0,(1.175 494351E-38,3.402823466351E+38) | 0,(1.175494351E-38,3.402823466E+38) | 單精度浮點數值 |
DOUBLE | 8字節double(255,30) | (-1.7976931348623157E+308,-2.225073858 5072014 E-308),0,(2.2250738585072014E-308,1.7976931348623157E+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+2double(65,30) | 依賴於M和D的值 | 依賴於M和D的值 | x小數值 |
- 有符合的8位前面第一位是表示符號的,后邊只能顯示7位
- 整數 int: create table 表 (id1 int(4),id2 int(11));
- int默認是有符號的
- int 默認11位 整數
- 它能表示的數字的范圍不被寬度約束#它只能約束數字的顯示寬度
- 整數 int: create table 表 (id1 int unsigned,id2 int); #unsigned 指定取除int符號
- 小數 float: create table 表 (f1 float(5,2),d1 double(5,2)); #float單精度浮點數值 #double雙精度浮點數值 (5,2)整數,小數范圍限制
- 小數 float: create table 表 (f1 float,d1 double); 默認值
- 小數 float: create table 表(d1 decimal,d2 decimal(25,20));#decimal 小數值 默認與指定(25,20)
字符串類型
- 字符串類型表
類型 | 大小 | 用途 |
---|---|---|
CHAR | 0-255字節 | 定長字符串 |
VARCHAR | 0-65535 字節 | 變長字符串 |
TINYBLOB | 0-255字節 | 不超過 255 個字符的二進制字符串 |
TINYTEXT | 0-255字節 | 短文本字符串 |
BLOB | 0-65 535字節 | 二進制形式的長文本數據 |
TEXT | 0-65 535字節 | 長文本數據 |
MEDIUMBLOB | 0-16 777 215字節 | 二進制形式的中等長度文本數據 |
MEDIUMTEXT | 0-16 777 215字節 | 中等長度文本數據 |
LONGBLOB | 0-4 294 967 295字節 | 二進制形式的極大文本數據 |
LONGTEXT | 0-4 294 967 295字節 | 極大文本數據 |
-
定長單位 char
- char:不可變,定長高效
-
邊長單位 varchar
- varchar:變長省空間
時間類型
- 日期類型表
類型 | 大小 (字節) | 范圍 | 格式 | 用途 |
---|---|---|---|---|
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 | 混合日期和時間值,時間戳 |
-
日期類型
-
year:年: yyyy(1901/2155)
-
date:年-月-日 yyyy-MM-dd(1000-01-01/9999-12-31)
-
time:時:分:秒 HH:mm:ss
-
datetime:yyyy-MM-dd HH:mm:ss(1000-01-01 00:00:00/9999-12-31 23:59:59)
-
timestamp:yyyy-MM-dd HH:mm:ss(1970-01-01 00:00:00/2038-01-19 ??)
- 不賦值會有當前系統時間
-
now()函數現在時間
-
ENUM | SET類型
- 類型表
類型 | 大小 | 用途 |
---|---|---|
ENUM | 對1-255個成員的枚舉需要1個字節存儲; 對於255-65535個成員,需要2個字節存儲; 最多允許65535個成員。 | 單選:選擇性別 |
SET | 1-8個成員的集合,占1個字節 9-16個成員的集合,占2個字節 17-24個成員的集合,占3個字節 25-32個成員的集合, | |
占4個字節 33-64個成員的集合,占8個字節 | 多選:興趣愛好 |
- create table 表(name char(12),gender ENUM('male','female'),hobby set('抽煙','喝酒','燙頭','洗腳'));
- insert into t12 values('gandan','不詳','抽煙,喝酒,洗腳,洗腳,按摩');