MySQL-學習-快速入門/注入攻擊

1. 介紹


表頭(header): 每一列的名稱;
列(col): 具有相同數據類型的數據的集合;
行(row): 每一行用來描述某個人/物的具體信息;
值(value): 行的具體信息, 每個值必須與該列的數據類型相同;
鍵(key): 表中用來識別某個特定的人\物的方法, 鍵的值在當前列中具有唯一性。

2. MySQL中的數據類型

數字類型 :
整數: tinyintsmallintmediumintintbigint
浮點數: floatdoublerealdecimal
日期和時間: datetimedatetimetimestampyear

字符串類型 :
字符串: charvarchar
文本: tinytexttextmediumtextlongtext
二進制(可用來存儲圖片、音樂等): tinyblobblobmediumbloblongblob
每種數據類型對應不同的大小(字節)-點擊詳情


3. 使用MySQL數據庫

>>>登錄到MySQL
mysql -h 主機名 -u 用戶名 -p    # 我電腦上輸入 mysql -u root -p,會彈出輸入密碼請求,輸入密碼后即可打開

自己的電腦可以直接輸入mysql -u root -p
-h : 該命令用于指定客戶端所要登錄的MySQL主機名, 登錄當前機器該參數可以省略;
-u : 所要登錄的用戶名;
-p : 告訴服務器將會使用一個密碼來登錄, 如果所要登錄的用戶名密碼為空, 可以忽略此選項。
以登錄剛剛安裝在本機的MySQL數據庫為例, 在命令行下輸入 mysql -u root -p 按回車確認, 如果安裝正確且MySQL正在運行, 會得到以下響應:
Enter password:
若密碼存在, 輸入密碼登錄, 不存在則直接按回車登錄, 按照本文中的安裝方法, 默認 root 賬號是無密碼的。登錄成功后你將會看到 Welecome to the MySQL monitor... 的提示語。

然后命令提示符會一直以 mysql>加一個閃爍的光標等待命令的輸入, 輸入 exitquit 退出登錄。

>>>創建一個數據庫

使用 create database 語句可完成對數據庫的創建, 創建命令的格式如下:

create database 數據庫名 [其他選項];

例如我們需要創建一個名為 samp_db 的數據庫, 在命令行下執行以下命令:

create database samp_db character set gbk;    # Mac終端輸入后出現提示:Query OK, 1 row affected (0.01 sec)

為了便于在命令提示符下顯示中文, 在創建時通過 character set gbk 將數據庫字符編碼指定為gbk。創建成功時會得到 Query OK, 1 row affected(0.02 sec)的響應。

注意:samp_db 是數據庫的名字,數據庫里面有很多表格table,后面的students就是表table,從一開始進入 數據庫,那時候顯示的是 所有數據庫的名稱 show databases; ,而你必須選中一個數據庫,比如 use samp_db ,選中后呢,再查看這個數據庫中所有的表 show tables; ,注意區分這些哦。

注意: MySQL語句以分號(;)作為語句的結束, 若在語句結尾不添加分號時, 命令提示符會以 -> 提示你繼續輸入(有個別特例, 但加分號是一定不會錯的);

提示: 可以使用 show databases; 命令查看已經創建了哪些數據庫。

>>>選擇所要操作的數據庫

要對一個數據庫進行操作, 必須先選擇該數據庫, 否則會提示錯誤:
ERROR 1046(3D000): No database selected
兩種方式對數據庫進行使用的選擇:

一: 在登錄數據庫時指定, 命令: mysql -D 所選擇的數據庫名 -h 主機名 -u 用戶名 -p

例如登錄時選擇剛剛創建的數據庫: mysql -D samp_db -u root -p

二: 在登錄后使用 use 語句指定, 命令: use 數據庫名;

use 語句可以不加分號, 執行 use samp_db 來選擇剛剛創建的數據庫, 選擇成功后會提示: Database changed

>>>創建數據庫表

使用 create table 語句可完成對表的創建, create table 的常見形式:

create table 表名稱(列聲明);

以創建 students 表為例, 表中將存放 學號(id)、姓名(name)、性別(sex)、年齡(age)、聯系電話(tel) 這些內容:

    create table students
    (
        id int unsigned not null auto_increment primary key,
        name char(8) not null,
        sex char(4) not null,
        age tinyint unsigned not null,
        tel char(13) null default "-"
    );

對于一些較長的語句在命令提示符下可能容易輸錯, 因此我們可以通過任何文本編輯器將語句輸入好后保存為 createtable.sql 的文件中, 通過命令提示符下的文件重定向執行執行該腳本

打開命令提示符, 輸入: mysql -D samp_db -u root -p < createtable.sql

( 提示: 1. 如果連接遠程主機請加上 -h 指令; 2. createtable.sql 文件若不在當前工作目錄下需指定文件的完整路徑。)

>>>語句解說:

create table tablename(columns) 為創建數據庫表的命令, 列的名稱以及該列的數據類型將在括號內完成;

括號內聲明了5列內容,idnamesexagetel為每列的名稱, 后面跟的是數據類型描述, 列與列 (必須是列與列,python才能實現對象化) 的描述之間用逗號, 隔開;

"id int unsigned not null auto_increment primary key"行進行介紹:

"id"為列的名稱;
"int" 指定該列的類型為 int(取值范圍為 -8388608到8388607), 在后面我們又用"unsigned" 加以修飾, 表示該類型為無符號型, 此時該列的取值范圍為 0到16777215;
"not null"說明該列的值不能為空, 必須要填, 如果不指定該屬性, 默認可為空;
"auto_increment" 需在整數列中使用, 其作用是在插入數據時若該列為 NULL, MySQL將自動產生一個比現存值更大的唯一標識符值。在每張表中僅能有一個這樣的值且所在列必須為索引列。
"primary key" 表示該列是表的主鍵, 本列的值必須唯一, MySQL將自動索引該列。
下面的 char(8) 表示存儲的字符長度為8, tinyint的取值范圍為 -127到128, default 屬性指定當該列值為空時的默認值。

提示: 1. 使用 show tables; 命令可查看已創建了表的名稱; 2. 使用 describe 表名; 命令可查看已創建的表的詳細信息。


4. 操作MySQL數據庫

>>>向表中插入數據

insert 語句可以用來將一行或多行數據插到數據庫表中, 使用的一般形式如下:

insert [into] 表名 [(列名1, 列名2, 列名3, ...)] values (值1, 值2, 值3, ...);

其中 [ ] 內的內容是可選的, 例如, 要給 samp_db 數據庫中的 students表插入一條記錄, 執行語句:

insert into students values(NULL, "王剛", "男", 20, "13811371377");

按回車鍵確認后若提示 Query Ok, 1 row affected (0.05 sec)表示數據插入成功。 若插入失敗請檢查是否已選擇需要操作的數據庫。

有時我們只需要插入部分數據, 或者不按照列的順序進行插入, 可以使用這樣的形式進行插入:

insert into students (name, sex, age) values("孫麗華", "女", 21);
>>>查詢表中的數據

select 語句常用來根據一定的查詢規則到數據庫中獲取數據, 其基本的用法為:

select 列名稱 from 表名稱 [查詢條件];

例如要查詢 students 表中所有學生的名字和年齡, 輸入語句select name, age from students;執行結果如下:

    mysql> select name, age from students;
    +--------+-----+
    | name   | age |
    +--------+-----+
    | 王剛   |  20 |
    | 孫麗華 |  21 |
    | 王永恒 |  23 |
    | 鄭俊杰 |  19 |
    | 陳芳   |  22 |
    | 張偉朋 |  21 |
    +--------+-----+
    6 rows in set (0.00 sec)

    mysql>

也可以使用通配符*查詢表中所有的內容, 語句: select * from students;

>>>按特定條件查詢:

where 關鍵詞用于指定查詢條件, 用法形式為: select 列名稱 from 表名稱 where 條件;

以查詢所有性別為女的信息為例, 輸入查詢語句: select * from students where sex="女";

where子句不僅僅支持"where 列名 = 值" 這種名等于值的查詢形式, 對一般的比較運算的運算符都是支持的, 例如 =、>、<、>=、<、!= 以及一些擴展運算符 is [not] nullinlike 等等。 還可以對查詢條件使用 or 和 and 進行組合查詢, 以后還會學到更加高級的條件查詢方式, 這里不再多做介紹。

示例:

查詢年齡在21歲以上的所有人信息: select * from students where age > 21;

查詢名字中帶有 "王" 字的所有人信息: select * from students where name like "%王%"; (??王與%之間不能有空格)

查詢id小于5且年齡大于20的所有人信息: select * from students where id<5 and age>20;

>>>更新表中的數據

update語句可用來修改表中的數據, 基本的使用形式為:

update 表名稱 set 列名稱=新值 where 更新條件;

使用示例:

將id為5的手機號改為默認的"-": update students set tel=default where id=5;

將所有人的年齡增加1: update students set age=age+1;

將手機號為 13288097888 的姓名改為 "張偉鵬", 年齡改為 19: update students set name="張偉鵬", age=19 where tel="13288097888";

>>>刪除表中的數據

delete 語句用于刪除表中的數據, 基本用法為:

delete from 表名稱 where 刪除條件;

使用示例:

刪除id為2的行: delete from students where id=2;

刪除所有年齡小于21歲的數據: delete from students where age<20;

刪除表中的所有數據: delete from students;


5. 創建后表的修改

alter table 語句用于創建后對表的修改, 基礎用法如下:

>>>添加列

基本形式: alter table 表名 add 列名 列數據類型 [after 插入位置];

示例:

在表的最后追加列 address: alter table students add address char(60);

在名為 age 的列后插入列 birthday: alter table students add birthday date after age;

>>>修改列

基本形式: alter table 表名 change 列名稱 列新名稱 新數據類型;

示例:

將表 tel 列改名為 telphone: alter table students change tel telphone char(13) default "-";

name 列的數據類型改為 char(16): alter table students change name name char(16) not null;

>>>刪除列

基本形式: alter table 表名 drop 列名稱;

示例:

刪除 birthday 列: alter table students drop birthday;

>>>重命名表

基本形式: alter table 表名 rename 新表名;

示例:

重命名 students 表為 workmates: alter table students rename workmates;

>>>刪除整張表

基本形式: drop table 表名;

示例:

刪除 workmates 表: drop table workmates;

>>>刪除整個數據庫

基本形式: drop database 數據庫名;

示例:

刪除 samp_db 數據庫: drop database samp_db;


附錄

修改 root 用戶密碼

按照本文的安裝方式, root 用戶默認是沒有密碼的, 重設 root 密碼的方式也較多, 這里僅介紹一種較常用的方式。

使用 mysqladmin 方式:

打開命令提示符界面, 執行命令: mysqladmin -u root -p password 新密碼

執行后提示輸入舊密碼完成密碼修改, 當舊密碼為空時直接按回車鍵確認即可。

可視化管理工具 MySQL Workbench
自選


附:SQL注入 與 防范

所謂SQL注入,就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。具體來說,它是利用現有應用程序,將(惡意的)SQL命令注入到后臺數據庫引擎執行的能力,它可以通過在Web表單中輸入(惡意)SQL語句得到一個存在安全漏洞的網站上的數據庫,而不是按照設計者意圖去執行SQL語句。比如先前的很多影視網站泄露VIP會員密碼大多就是通過WEB表單遞交查詢字符暴出的,這類表單特別容易受到SQL注入式攻擊

1、 普通用戶與系統管理員用戶的權限要有嚴格的區分。
2、 強迫使用參數化語句。
3、 加強對用戶輸入的驗證。
4、 多多使用SQL Server數據庫自帶的安全參數。
5、 多層環境如何防治SQL注入式攻擊
6、 必要的情況下使用專業的漏洞掃描工具來尋找可能被攻擊的點。
7、設置陷阱賬號
sql注入實例分析

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,345評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,494評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,283評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,953評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,714評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,186評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,410評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,940評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,776評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,976評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,210評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,642評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,878評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,654評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,958評論 2 373