MySQL:數據庫基礎

一、什么是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語言

  1. 屬于一個SQL語句,使用分號(;)結尾,否則mysql認為語句沒有輸入完。
  2. 箭頭(->)代表SQL語句沒有輸入完取消SQL語句使用(\c)。
  3. SQL語句關鍵字和函數名不區分大小寫(Linux區分,Windows不區分)。
  4. 使用函數時,函數名和后面的括號之間不能有空格。

(三)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,!)
  • 位運算符
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容