一、什么是MySQL?
MySQL 是一個小型關系型數據庫管理系統,開發者為瑞典 MySQL AB 公司。由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,MySQL 被廣泛地應用在Internet 上的中小型網站中。
MySQL的特征:
- 性能快捷、優化SQL語言
- 容易使用
- 多線程和可靠性
- 多用戶支持
- 可移植性和開放源代碼
- 遵循國際標準和國際化支持
- 為多種編程語言提供API
二、MySQL基本操作
(一)mysql命令
mysql -h host_name -u user_name –ppassword
- h :當連接 MySQL 服務器不在同臺主機時,填寫主機名或 IP 地址
- u :登錄 MySQL 的用戶名
- p :登錄 MySQL 的密碼
注意:密碼如果寫在命令行的時候一定不能有空格。如果使用的系統為 linux 并且登陸用戶名字與 MySQL 的用戶名相同即可不用輸入用戶名密碼,linux 默認是以 root 登陸,windows 默認用戶是 ODBC。
(二)mysql程序常用命令
- 顯示所有數據庫:
show databases;
- 選定默認數據庫:
use dbname;
- 顯示默認數據庫中所有表:
show tables;
- 退出 mysql 程序:
\q
三、數據庫的基礎知識
數據完整型 = 可靠性 + 準確性
分類 | 概述 | 約束方法 |
---|---|---|
數據實體完整性 | 實體的完整性強制表的標識符列或主鍵的完整性 | 唯一約束、主鍵約束或標識列 |
字段完整性 | 如果插入的數據不滿足限制要求,數據庫管理系統就拒絕執行操作 | 限制數據類型、檢查約束、外鍵約束、默認值、非空約束 |
引用完整性 | 在刪除和輸入記錄時,保持表之間已定義的關系,確保鍵值在所有表中一致。不能孤立,即引用不存在的值 | 外鍵約束 |
自定義完整性 | 用戶自己定義的業務規則 | 規則、存儲過程、觸發器 |
完整型包括:列值要求(約束)、行值要求(約束)
四、什么是SQL?
(一)SQL語法組成
SQL | 概述 | 命令 |
---|---|---|
DML(Data Manipulation Language數據操作語言) | 查詢、插入、刪除和修改數據庫中的數據 | SELECT、INSERT、 UPDATE 、DELETE等 |
DCL(Data Control Language數據控制語言) | 用來控制存取許可、存取權限等 | GRANT、REVOKE等 |
DDL(Data Definition Language數據定義語言) | 用來建立數據庫、數據庫對象和定義其列 | CREATE TABLE、DROP TABLE、ALTER TABLE等 |
功能函數:日期函數、數學函數、字符函數、系統函數等。
(二)MySQL中的SQL語言
- 屬于一個SQL語句,使用分號(;)結尾,否則mysql認為語句沒有輸入完。
- 箭頭(->)代表SQL語句沒有輸入完取消SQL語句使用(\c)。
- SQL語句關鍵字和函數名不區分大小寫(Linux區分,Windows不區分)。
- 使用函數時,函數名和后面的括號之間不能有空格。
(三)MySQL數據類型
- 數據類型種類
- 數值列類型
數值列類型包括整型和浮點型
類型 | 大小 | 范圍(有符號) | 范圍(無符號) | 用途 |
---|---|---|---|---|
TINYINT | 1 byte | (-128,127) | (0,255) | 小整數值 |
SMALLINT | 2 bytes | (-32 768,32 767) | (0,65 535) | 大整數值 |
MEDIUMINT | 3 bytes | (-8 388 608,8 388 607) | (0,16 777 215) | 大整數值 |
INT或INTEGER | 4 bytes | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整數值 |
BIGINT | 8 bytes | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 極大整數值 |
FLOAT | 4 bytes | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 單精度、浮點數值 |
DOUBLE | 8 bytes | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+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+2 | 依賴于M和D的值 | 依賴于M和D的值 | 小數值 |
- 字符串列類型
CHAR類型和VARCHAR類型。
CHAR類型和VARCHAR類型長度范圍都是0~255之間的大小。他們之間的差別在于MySQL處理存儲的方式:
A. CHAR把這個大小視為值的準確大小(用空格填補比較短的值)。
B. VARCHAR類型把它視為最大值并且只使用了存儲字符串實際上需要的字節數(增加了一個額外的字節記錄長度)。因而,較短的值當被插入一個語句為VARCHAR類型的字段時,將不會用空格填補。 - 日期和時間列類型
存儲如“2005 -1-1” 或者“12:00:00”這樣的數值的值。在MySQL中日期是按”年-月-日”的順序。
類型說明 | 格式 | 取值范圍 | 存儲要求 |
---|---|---|---|
DATE | "YYYY-MM-DD" | "1000-01-01"到"9999-12-31" | 3字節 |
TIME | "hh:mm:ss" | "-838:59:59"到"838:59:59" | 3字節 |
DATETIME | "YYYY-MM-DD hh:mm:ss" | "1000-01-01 00:00:00"到"9999-12-31 23:59:59" | 8字節 |
TIMESTAMP[(M)] | "YYYYMMDDhhmmss" | 19700101000000到2037年的某個時刻 | 4字節 |
YEAR[(M)] | "YYYY" | 1901到2155 | 1字節 |
(四)數值列的完整性約束
- AUTO_INCREMENT
自動標識列,在需要產生唯一標志符號或者順序值時候,可用此屬性。
create table t(id int auto_increment not null primary key);
- UNSIGNED
無符號,此屬性禁用負值,將數值的取值范圍從零開始。
create table t(num tinyint , num2 tinyint unsigned);
- NULL 和NOT NULL
默認為NULL,即插入值時沒有在此字段插入值時自動填NULL,如果指定了NOT NULL,則必須在插入值時在此字段添入值,不允許插入NULL值。 - DEFAULT
可以通過此屬性來指定一個缺省值,即如果沒有在此列添加值,那么默認添加DEFAULT后指定值。 - ZEROFILL
前導零填充數值類型值以達到列的顯示寬度。
create table test2(num1 int default 1,num2 int zerofill);
五、數據庫操作
(一)建立數據庫操作
語法:
create database 數據庫名
敘述:創建一個具有指定名稱的數據庫。如果要創建的數據庫已經存在,或者沒有創建它的適當權限,則此語句失敗。
(二)建立表操作
語法 :
create table 表名(
列名1 列類型 [< 列的完整性約束>],
列名2 列類型 [< 列的完整性約束>],
... ... );
敘述:在當前數據庫下新創建一個數據表。
列類型:表示該列的數據類型。
(三)顯示表結構操作
語法:
describe 表名; 表名;
desc 表名; 表名;
敘述:用于顯示表的創建結構。
(四)刪除數據庫或表操作
- 刪除表操作
語法:
drop table [if exists] tab_name [,tab_name]...
敘述:從數據庫中刪除給定的表。如果給出if exists 子句,則刪除不存在的表不會出錯。
- 刪除數據庫操作
語法:
drop database [if exists] db_name
敘述:刪除給定的數據庫。在刪除一個數據庫后,它就永遠沒有了,因此要特別小心。如果給出if exists 子句,則刪除不存在的數據庫不會出錯。
(五)更改表結構操作
語法:
alter table 表名 action;
說明:
action可以是如下語句:
add 列名 建表語句 [first | after 列名] //可以為表添加一列
//如果沒指定first或者after,則在列尾添加一列,否則在指定列添加新列
add primary key (列名) //為表添加一個主鍵,如果主鍵已經存在,則出現錯誤
add foreign key (列名) references 表名 (列名) //為表添加一個外鍵
alter 列名 set default 默認值 //可以更改指定列默認值
change 舊列名 新列名 <建表語句> [first | after 列名] //可以更改列類型和列名稱
//如果原列的名字和新列的名字相同
modify 列名 <建表語句> [first | after 列名] //和change的作用相同
drop 列名 // 可以刪除一列
drop primary key // 可以刪除主鍵
engine 類型名 //可以改變表類型
rename as 新表名 // 可以將表名更改
六、MySQL運算符
- 算數運算符
運算符 | 語法 | 說明 |
---|---|---|
+ | a + b | 加,操作數之和 |
- | a - b | 減,操作數之差 |
- | - a | 一元減號,操作數取負 |
* | a * b | 乘,操作數之積 |
/ | a / b | 除,操作數之商 |
% | a % b | 模,操作數除后的余數 |
- 比較運算符
比較運算符允許我們對表達式的左邊和右邊進行比較。一個比較運算符的結果總是1(真),0(假),或是為NULL(不能確定)。
比較運算符可以用于比較數字和字符串。數字作為浮點值比較,而字符串以不區分大小寫的方式進行比較(除非使用特殊的BINARY二進制關鍵字)。
運算符 | 語法 | 說明 |
---|---|---|
= | a = b | 如果兩操作數相等,為真 |
!=,<> | a != b, a <> b | 如果兩操作數不等,為真 |
< | a < b | 如果a小于b,為真 |
<= | a <= b | 如果a小于等于b,為真 |
> | a > b | 如果a大于b,為真 |
>= | a >= b | 如果a大于等于b,為真 |
IN | a IN (b1,b2,...) | 如果a為b1,b2,...中任意一個,為真 |
BETWEEN | a BETWEEN a AND c | 如果a值在b與c之間(包括b、c),為真 |
LIKE | a LIKE b | SQL模式匹配:如果a與b匹配,為真 |
NOT LIKE | a NOT LIKE b | SQL模式匹配:如果a與b不匹配,為真 |
REGEXP | a REGEXP b | 擴展正規表達式匹配:如果a與b匹配,為真 |
NOT REGEXP | a NOT ERGEXP b | 擴展正規表達式匹配:如果a與b不匹配,為真 |
<=> | a <=> b | 如果兩操作數相同(即使為NULL),為真 |
IS NULL | a IS NULL | 如果操作數為NULL,為真 |
IS NOT NULL | a IS NOT NULL | 如果操作數不為NULL,為真 |
MySQL數據庫中的通配符:
“%” ( 百分號) 代表任意長度(長度可以為0)的字符串
“_ ”( 下橫線) 代表任意單個字符
- 邏輯運算符
與(AND,&&)、或(OR,||)、非(NOT,!) - 位運算符