mysql 9.0创建数据库_PHP与MySQL学习笔记9:创建Web数据库
1、在服務(wù)器上部署MySQL服務(wù)基本步驟合注意點(diǎn)
1)安裝MySQL(命令安裝、安裝包安裝等)
2)考慮是否需要一個(gè)獨(dú)立的操作系統(tǒng)用戶權(quán)限來(lái)運(yùn)行MySQL程序。
3)路徑的設(shè)置
4)root密碼 (附錄A:沒(méi)有root密碼,系統(tǒng)是不安全的)
5)刪除
匿名用戶和僅供測(cè)試使用的數(shù)據(jù)庫(kù)
6)啟動(dòng)MySQL服務(wù)器并將其設(shè)置為自動(dòng)運(yùn)行。
2、使用MySQL命令行或其他終端的幾點(diǎn)注意
1)在MySQL自帶控制臺(tái)命令行中,每個(gè)命令之間用分號(hào)(;)隔開(kāi),分號(hào)將告訴MySQL執(zhí)行這個(gè)命令,如果漏掉分號(hào),MySQL將不會(huì)執(zhí)行。
漏掉分號(hào)的的結(jié)果是:可能在一個(gè)命令中間添加新行。因?yàn)镸ySQL提供了一個(gè)持續(xù)符號(hào),是一個(gè)箭頭類(lèi)似于->,如
mysql> grant select
-> 這個(gè)符號(hào)表示MySQL期待著更多的輸入,每次按Enter都會(huì)出現(xiàn)這些提示符,知道輸入分號(hào)才結(jié)束。
PS:這個(gè)問(wèn)題,對(duì)于新手來(lái)說(shuō),很容易忽視,我剛開(kāi)始的時(shí)候也感覺(jué)很萌比。
2)
SQL語(yǔ)句不區(qū)分大小寫(xiě),但數(shù)據(jù)庫(kù)和表的名稱(chēng)區(qū)分大小寫(xiě)。
3、登陸到MySQL
在機(jī)器命令行,調(diào)用mysql程序
mysql -h
hostname-u
username?-p
1)本機(jī)運(yùn)行,可忽略?-h hostname
2)-u 只用于連接數(shù)據(jù)庫(kù)的用戶名稱(chēng),如果不指定,默認(rèn)只是登錄該操作系統(tǒng)時(shí)使用的用戶名。
3)-p 命令選項(xiàng)用來(lái)用來(lái)告訴服務(wù)器要使用一個(gè)密碼來(lái)連接它,如果登錄所使用用戶名無(wú)密碼,就可以忽略此項(xiàng)。而且,我們不必在本行命令中包含密碼,MySQL服務(wù)器會(huì)向你詢問(wèn)密碼的。實(shí)際上,沒(méi)有這樣做的更好。如果在命令行輸入密碼,它將以普通文本(明文)顯示在屏幕上。
4、基礎(chǔ)命令
create database
dbname; ? 創(chuàng)建數(shù)據(jù)庫(kù)
mysql -D
dbname-h
hostname
-u
username
-p ?也可以直接指定數(shù)據(jù)庫(kù),
use
dbname; ?可以登陸后方便地選擇或切換當(dāng)前數(shù)據(jù)庫(kù)。
show databases; 查看數(shù)據(jù)庫(kù)列表(你將只能看到當(dāng)前登錄賬號(hào)權(quán)限方位內(nèi)的)
show tables; 查看數(shù)據(jù)庫(kù)表
describe
tablename; ?查看特定表的詳細(xì)信息,將顯示在創(chuàng)建數(shù)據(jù)庫(kù)時(shí)提供的信息。
5、權(quán)限
備注:如果要建立一個(gè)Web數(shù)據(jù)庫(kù),最好為每個(gè)網(wǎng)站應(yīng)用程序單獨(dú)建立一個(gè)用戶,為什么?權(quán)限。
再?gòu)?qiáng)調(diào)下“最少權(quán)限原則”:一個(gè)用戶(或者一個(gè)進(jìn)程)應(yīng)該擁有能夠執(zhí)行分配給他的任務(wù)的最低級(jí)別的權(quán)限。
6、MySQL權(quán)限系統(tǒng)
1) GRANT和REVOKE命令分別用來(lái)授予和取消MySQL用戶的權(quán)限,這些權(quán)限分為4個(gè)級(jí)別:
全局;
數(shù)據(jù)庫(kù);
表;
列
。
GRANT命令常用來(lái)創(chuàng)建命令并賦予相應(yīng)權(quán)限,常見(jiàn)形式是:
GRANT ?privileges[columns]
ON ?item
TO?user_name[IDENTIFIED BY 'password']
[REQUIRE ?ssl_options
]
[WITH [GRANT OPTION |?limit_options] ]
方括號(hào)[]內(nèi)的子句是可選的,上例有很多占位符。幾點(diǎn)解釋:
>第一個(gè)占位符privileges應(yīng)該是由逗號(hào)分開(kāi)的一組權(quán)限。
>columns是可選的,用來(lái)對(duì)每一列指定權(quán)限(使用單列的名稱(chēng)或者用逗號(hào)分開(kāi)的一組列的名稱(chēng))。
>占位符item是新權(quán)限所應(yīng)用于的數(shù)據(jù)庫(kù)或表。如果指定為*.*,將權(quán)限應(yīng)用于所有數(shù)據(jù)庫(kù),這叫賦予全局權(quán)限。 若沒(méi)使用特定數(shù)據(jù)庫(kù),指定*也可完成全局權(quán)限賦予。常見(jiàn)的是以dbname.*指定數(shù)據(jù)庫(kù)中的所有表,dbname.tablename的形式指定單個(gè)表。
>user_name是數(shù)據(jù)庫(kù)的一個(gè)用戶,可以通過(guò)包含一個(gè)主機(jī)名來(lái)區(qū)分不同域的用戶。如ss@localhost ?和ss@somewhere.com?.也可以通過(guò)這個(gè)特性指定用戶從什么地方連接到本機(jī),甚至可以指定他們?cè)谔囟ǖ牡胤娇梢栽L問(wèn)哪些表和數(shù)據(jù)庫(kù),細(xì)粒度的權(quán)限控制可以有助于提高安全性。
>REQUIRE 子句允許指定用戶是否必須通過(guò)加密套接字鏈接,或者其他SSL選項(xiàng)。
>WITH GRANT OPTION選項(xiàng),如果指定,表示允許指定的用戶向別人授予自己所擁有的權(quán)限。
也可以通過(guò)指定WITH子句指定每一個(gè)用戶每小時(shí)執(zhí)行查詢、更新和連接的數(shù)量。(在共享的系統(tǒng)上限制單個(gè)用戶的負(fù)載時(shí),這些子句非常有用)
如:MAX_QUERIES_PER_HOUR n ?;MAX_UPDATES_PER_HOUR n ;MAX_CONNECTIONS_PER_HOUR n ;
2)權(quán)限存儲(chǔ)在名為mysql的5個(gè)系統(tǒng)表中,分別是,mysql.user、mysql.db、mysql.host、mysql.tables_priv、mysql.columns_priv。(直接修改這些表,和用GRANT命令一個(gè)效果,互相替代)
3)權(quán)限的類(lèi)型和類(lèi)別
MySQL中存在3個(gè)基本類(lèi)型的權(quán)限,適用于賦予一般用戶的權(quán)限、適用于賦予管理員的權(quán)限和幾個(gè)特定的權(quán)限。
除了表9-1中的權(quán)限,還有兩種已經(jīng)不再使用的權(quán)限REFERENCES 和 EXECUTE權(quán)限。
大多數(shù)情況下,通常只需要常見(jiàn)的增刪改查基本功能,
插入(SELECT)、刪除(DELETE)、更新(UPDATE)、選擇(SELECT)
如:
grant select, insert, delete, update ? on books.* to bookeditor identified by 'book123456';
與 GRANT對(duì)應(yīng)的命令時(shí)REVOKE,用法類(lèi)似:
REVOKE
REVOKE
privileges[(columns)]
ON
item
FROM
user_name
如果給出了WITH GRANT OPTION,可以用如下方式撤銷(xiāo),
REVOKE ALL PRIVILEGES,GRANT
FROM user_name
例子:
備注:輸入quit 命令退出MySQL自帶的監(jiān)視程序,最好應(yīng)該在以剛剛建立的Web用戶的身份登錄,測(cè)試每件事情是否正常。如果GRANT語(yǔ)句已經(jīng)執(zhí)行(應(yīng)該要flush privileges),當(dāng)嘗試登錄時(shí),又被拒絕了,通常是因?yàn)榘惭b過(guò)程中沒(méi)有刪除匿名賬戶。
7、創(chuàng)建數(shù)據(jù)庫(kù)表
CREATE TABLE
tablename(
columns)
注意:MySQL提供了多個(gè)表類(lèi)型和存儲(chǔ)引擎,其中包括一些事務(wù)安全的類(lèi)型。
實(shí)例解說(shuō):
注意1:MySQL每個(gè)表只能有一個(gè)主鍵,但是這個(gè)主鍵可以由一個(gè)字段,也可以有多個(gè)字段組成。想text這種類(lèi)型通常是不能設(shè)置成主鍵的,也不能加索引(這個(gè)特性和所選的數(shù)據(jù)引擎有關(guān))
注意2:char(50),該數(shù)據(jù)類(lèi)型將為姓名分配50個(gè)字符的存儲(chǔ)空間,雖然姓名通常沒(méi)有這么長(zhǎng),然后MySQL將用空格填充空余的部分,或者,可以選擇用 varchar類(lèi)型,這種可以根據(jù)需要分配存儲(chǔ)空間(加一個(gè)字節(jié)),占用空間小,但是char類(lèi)型數(shù)據(jù)速度更快。
注意3:NOT NULL,這是一個(gè)小小的優(yōu)化措施,需要多解釋下,引用網(wǎng)上一段解釋如下:
為什么mysql字段要設(shè)置為not null?
現(xiàn)在 大師來(lái)跟大家解釋解釋
首先 我們創(chuàng)建一個(gè)表?asd字段為null,qwe字段為not null,都無(wú)默認(rèn)值 CREATETABLE`tb` ( `id`INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `asd`VARCHAR(45) NULL, `qwe`VARCHAR(45) NOT NULL, PRIMARYKEY (`idtb`)
)
然后 insert tb(asd) values('123123123'); insert tb(qwe) values('123123123');
現(xiàn)在 我們來(lái)查看這個(gè)表
可以看出
not null?的qwe字段 未設(shè)置的時(shí)候是個(gè)空字符串
null?的asd字段 未設(shè)置的時(shí)候是個(gè)NULL
以上結(jié)果 大家應(yīng)該都可以想像到的。
那么為什么要設(shè)置NOT NULL呢
因?yàn)镸YSQL不是PHP,NULL不等于空字符串
比如我們查詢qwe為空的 select * from tb where qwe=''
可以找到
但是 select * from tb where asd=''
則什么都找不到
8、創(chuàng)建索引的基本方法
數(shù)據(jù)庫(kù)性能問(wèn)題通常會(huì)在數(shù)據(jù)庫(kù)上沒(méi)有創(chuàng)建任何索引的情況下發(fā)生(創(chuàng)建沒(méi)有主鍵或索引的表是可能的)
CREATE INDEX語(yǔ)句常見(jiàn)形式如下:
CREATE [UNIQUE | FULLTEXT] INDEX index_name
ON table_name (index_column_name [ (length) ] [ASC | DESC], ... )
注意:FULLTEXT索引用來(lái)索引文本字段,可選的 length 字段允許指定該字段前l(fā)ength個(gè)字符將被索引,也可以指定一個(gè)索引升序或降序。
9、理解MySQL的標(biāo)識(shí)符
在MySQL中,提供了5中類(lèi)型的標(biāo)識(shí)符:
Database(數(shù)據(jù)庫(kù))、Table(表)、Column(列)、index(索引)和 Alias(別名)
注1:MySQL中的數(shù)據(jù)庫(kù)將被映射到具備某種文件結(jié)構(gòu)的目錄,而表則映射到文件。這對(duì)賦予他們的名字有直接影響,它也可以影響這些名字的大小寫(xiě),如果操作系統(tǒng)區(qū)分目錄與文件的大小寫(xiě)。
(目錄和包含數(shù)據(jù)的文件的位置需要在配置中設(shè)置,可以使用mysqladmin命令來(lái)查看它們?cè)谙到y(tǒng)中位置,windows下的bin目錄有mysqladmin.exe這個(gè)程序)
注2:在MySQL標(biāo)識(shí)符中不能使用ASCII(0)(null)、ASCII(255) (BLANK FF)或引號(hào)字符(這3個(gè)字符)
10、列數(shù)據(jù)類(lèi)型
MySQL中3種基本的列數(shù)據(jù)類(lèi)型:數(shù)字、日期和時(shí)間、字符串。每個(gè)類(lèi)型又包含很多子類(lèi),這3中類(lèi)型?不同的存儲(chǔ)空間,一般來(lái)說(shuō),選擇列數(shù)據(jù)類(lèi)型的時(shí)候,基本原則是選可以滿足數(shù)據(jù)的最小類(lèi)型。
注意:對(duì)于許多數(shù)據(jù)類(lèi)型,創(chuàng)建該類(lèi)型列時(shí),可以指定最大的
顯示長(zhǎng)度,下表中
就用M表示,M的最大值可為255,如果M是可選的,就放在方括號(hào)內(nèi).
1)數(shù)字類(lèi)型
數(shù)字類(lèi)型分為整形和浮點(diǎn)數(shù)
注1:整形數(shù)據(jù),可以指定為無(wú)符號(hào)型。
注2:所有數(shù)字類(lèi)型,可以指定ZEROFILL屬性,空余部分用前導(dǎo)0來(lái)補(bǔ)充。如果將一個(gè)字段指定為ZEROFILL,它將自動(dòng)成為UNSIGNED數(shù)字類(lèi)型。
2)日期和時(shí)間類(lèi)型
使用MySQL的日期和時(shí)間類(lèi)型,可以以字符串或數(shù)字格式輸入數(shù)據(jù),如果不手動(dòng)設(shè)置,特定行中的TIMESTAMP列將被設(shè)置為最近修改該行的時(shí)間,這對(duì)于事務(wù)記錄是有意義的。
3)字符串類(lèi)型
第一類(lèi):普通字符串,即小短文本,包括CHAR(固定長(zhǎng)度),VARCHAR(可變長(zhǎng)度)類(lèi)型。
注意:無(wú)論數(shù)據(jù)大小多啊胡搜啊,CHAR類(lèi)型的列都會(huì)用空格填補(bǔ)多余空白,獲取CHAR類(lèi)型數(shù)據(jù),與存儲(chǔ)VARCHAR類(lèi)型數(shù)據(jù)時(shí),MySQL都會(huì)過(guò)濾多余空格。
第二類(lèi):TEXT和BLOB
分別適用于長(zhǎng)文本或二進(jìn)制數(shù)據(jù)。BLOB(binary large objects)全稱(chēng)為打二進(jìn)制數(shù)據(jù),它支持任何數(shù)據(jù),如圖像、聲音數(shù)據(jù)。
第三類(lèi):SET 和 ENUM
SET類(lèi)型用來(lái)指定列中的值必須來(lái)自一個(gè)特定集合中的指定值,可以包含該集合的多個(gè)值。集合最大64個(gè)元素。
ENUM 就是枚舉,與SET類(lèi)似,只是該類(lèi)型的列只能容納所列值之一,或者NULL,枚舉中最大可以由65535個(gè)元素。
章節(jié)結(jié)束語(yǔ):
如果你問(wèn)我為什么要學(xué)習(xí)這么仔細(xì),因?yàn)?#xff0c;我就是想去弄清楚它。
總結(jié)
以上是生活随笔為你收集整理的mysql 9.0创建数据库_PHP与MySQL学习笔记9:创建Web数据库的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 两千年是不是闰年 输出错误_干货!AMO
- 下一篇: python excel读取出错_pyt