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