1、數據庫定義
python
數據庫,簡單來講是自己可視爲電子化的文件櫃——存儲電子文件的處所,用戶能夠對文件中的數據運行新增、截取、更新、刪除等操做。mysql
數據庫指的是以必定方式儲存在一塊兒、能爲多個用戶共享、具備儘量小的冗餘度、與應用程序彼此獨立的數據集合。正則表達式
數據庫的組織模式:sql
層次型數據結構數據庫
網狀型數據結構安全
關係型數據結構(MySQL)服務器
非關係型數據結構(NoSQL)數據結構
關係型數據結構圖示併發
上圖描述了從用戶層到物理層的工做結構。less
2、數據庫基礎知識
SQL:structure query language;一種介於關係代數與關係演算之間的結構化查詢語言,是一個通用的、功能極強的關係性數據庫語言。
SQL語言組成部分:
數據定義語言(DDL:Data Definition Language):CREATE, DROP, ALTER
數據操縱語言(DML:Data Manipulation Language):SELECT, INSERT, UPDATE, DELETE
數據控制語言(DCL:Data Control Language):GRANT, REVOKE
事務(transaction):事務就是一組原子性的查詢語句;也即將多個查詢看成一個獨立的工做單元。
ACID測試:能知足ACID測試就表示其支持事務;或兼容事務。
原子性(Atomic):事務做爲一個總體被執行,包含在其中的對數據庫的操做要麼所有被執行,要麼都不執行。
一致性(Consistency):事務應確保數據庫的狀態從一個一致狀態轉變爲另外一個一致狀態。一致狀態的含義是數據庫中的數據應知足完整性約束。
隔離性(Isolation):多個事務併發執行時,一個事務所作的操做在提交以前對其餘事務是不可見的。
持久性(Durability):已被提交的事務對數據庫的修改應該永久保存在數據庫中。
3、MySQL基礎特性
MySQL的安裝這裏就不作介紹;Linux下編譯安裝LAMP並分離爲多臺服務器有介紹。下面來介紹mysql中部分的基礎性的特性。
鍵:key(字段)
主鍵:可以惟一標識表中每個記錄的字段或字段的組合。
候選鍵:可以做爲惟一標識表中每個記錄的字段。
外鍵:依賴別的表當作屬性以建立彼此的關係;而這個屬性就是外鍵。
惟一鍵:能夠肯定一條記錄的字段(或字段組合),一張表能夠有多個惟一鍵。
約束:constraint
主鍵約束:用於定義基本表的主鍵,起唯一標識做用;對一張表來講;主鍵只能有一個;不能爲空;不能重複。
外鍵約束:定義了一個表中數據與另外一個表中的數據的聯繫;對應其餘表中的字段;在本身表中沒有的不能填入。
惟一鍵約束:用於指明建立唯一約束的列上的取值必須唯一;能夠爲空;不能重複;能夠有多個。
檢查式約束:用戶自定義有效取值範圍;一般爲布爾表達式。
非空約束:只用於定義列約束。
mysql中的比較方式、存儲空間的取值範圍以及參與的運算等都取決於mysql的數據類型;因此數據類型很是重要;具體的字段的數據類型:
字符型
char(#) | 用於保存定長(size)字節的字符串數據。編碼時不區分字符大小寫。最大長度爲255字節. |
varchar(#) | 用於保存變長的字符串數據。其中最大字節長度由(size)指定。每行長度可變,最大長度爲65535字節。數據長度缺省爲1 ;編碼時區不分字符大小寫。 |
binary(#) | 固定長度的二進制字符串;每行定長(不足部分補爲空格);最大長度爲255字節,缺省值爲每行1字節。編碼時區分字符大小寫。 |
varbinary(#) | 可變長度的長度的二進制字符串。每行長度可變,最大長度爲65535字節。數據長度缺省爲1。編碼時區分字符大小寫。 |
text | 一個BLOB或TEXT列,最大長度爲65535(2^16-1)個字符;編碼時不區分字符大小寫 |
blob | 二進制的大對象;一個BLOB或TEXT列,最大長度爲65535(2^16-1)個字符;編碼時區分字符大小寫。 |
數值型
精確數值型
tinyint | 保存整型數據,範圍爲0到255。最大長度爲1字節。 |
smallint | 保存整型數據,範圍爲-32767到+32767最,大長度爲2字節。 |
mediumint | 保存整型數據,範圍爲-8388608至8388607或0至16777215。最大長度爲3字節。 |
int | 保存整型數據,範圍爲-2147483647到+2147483647。最大長度爲4字節。 |
bigint | 保存整型數據,範圍爲-9223372036854775808至9223372036854775807或0至18446744073709551615。最大長度爲8字節 |
decimal | 保存精確數值數據類型,範圍爲-10E-38到+10E-38,最大長度爲2~17字節。 |
近似數值型
float | 最小非零值:±1.175494351E – 38,同double同樣適用於精度要求高的場合 |
double | 最小非零值:±2.2250738585072014E - 308 |
日期時間型
date | 1000-01-01~9999-12-31 3字節 |
time | -838:59:59~838:59:59 3字節 |
datetime | 1000-01-01 00:00:00~9999-12-31 23:59:59 8字節 |
timestamp | 19700101000000~指定時間的某個時刻 4字節 |
year | YYYY 格式表示的年份值 |
MySQL內置類型
enum | 枚舉類型(指定範圍內中某一種) |
set | 集合型(指定範圍內任意組合) |
布爾型:tinyint{0|1}
NULL
字段或字段類型的修飾符
not null | 非空 |
null | 空 |
unsigned | 無符號整型(只能用於數值) |
default [value] | 字符須要加引號;數據絕對不能加引號 |
auto_increment | 自動增加類型的字段必須爲主鍵或惟一鍵 |
primary key | 定義主鍵 |
unique key | 定義惟一鍵 |
Example:
mysql> create table stu1 (Id int unsigned auto_increment unique key,Name char(30) not null,Age tinyint unsigned not null,Gender enum('F','M') not null default 'M'); Query OK, 0 rows affected (0.04 sec) mysql> desc stu1; +--------+---------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------+---------------------+------+-----+---------+----------------+ | Id | int(10) unsigned | NO | PRI | NULL | auto_increment | | Name | char(30) | NO | | NULL | | | Age | tinyint(3) unsigned | NO | | NULL | | | Gender | enum('F','M') | NO | | M | | +--------+---------------------+------+-----+---------+----------------+ 4 rows in set (0.00 sec) mysql>
mysql> insert into stu1 (Name,Age,Gender) values ('Tom',20,'M'), -> ('Pipi',20,'M'), #這裏插入數據都沒有插入Id號;由於上述定義的是自增加 -> ('Jerry',18,'F'), -> ('Soul',24,'M'); Query OK, 4 rows affected (0.00 sec) Records: 4 Duplicates: 0 Warnings: 0 mysql> select * from stu1; #顯示錶字段信息 +----+-------+-----+--------+ | Id | Name | Age | Gender | +----+-------+-----+--------+ | 1 | Tom | 20 | M | | 2 | Pipi | 20 | M | | 3 | Jerry | 18 | F | | 4 | Soul | 24 | M | +----+-------+-----+--------+
SQL語句能夠直接在mysql裏面幫助獲取:幫助信息顯示的也很詳細
mysql> help insert #[]括號內的都是可省的;{}內是必選的; Name: 'INSERT' Description: Syntax: INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [(col_name,...)] {VALUES | VALUE} ({expr | DEFAULT},...),(...),... [ ON DUPLICATE KEY UPDATE col_name=expr [, col_name=expr] ... ] # # mysql> help select Name: 'SELECT' Description: Syntax: SELECT [ALL | DISTINCT | DISTINCTROW ] [HIGH_PRIORITY] [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] select_expr [, select_expr ...] [FROM table_references [WHERE where_condition] [GROUP BY {col_name | expr | position} [ASC | DESC], ... [WITH ROLLUP]] [HAVING where_condition] [ORDER BY {col_name | expr | position} [ASC | DESC], ...] [LIMIT {[offset,] row_count | row_count OFFSET offset}] [PROCEDURE procedure_name(argument_list)] [INTO OUTFILE 'file_name' [CHARACTER SET charset_name] export_options | INTO DUMPFILE 'file_name' | INTO var_name [, var_name]] [FOR UPDATE | LOCK IN SHARE MODE]]
4、布爾條件表達式操做符
= | equal;等於 |
<=> | null sale equal to;與空值比較的安全方式 |
<> | != | not equal to;不等於 |
< | less;小於 |
<= |
less than or equal to;小於等於 |
> | greater;大於 |
>= | greater than or equal to;大於等於 |
is null | 爲空 |
is not null | 不爲空 |
like | 通配;%(任意長度的任意字符), _(任意單個字符) |
regexp | rlike | 支持使用正則表達式 |
in | 判斷指定字段是否在給定的列表中 |
between... and... | 位於指定的範圍之間 |
組合條件測試
not | ! | 非 |
and | && | 與 |
or | || | 或 |
聚合函數
sum() | 求和 |
avg() | 求平均值 |
max() | 最大值 |
min() | 最小值 |
count() | 計數 |
根據數據庫操做語言(DML)列出幾個簡單的例子;後續做詳細說明
Examples:
select:
mysql> select * from students; +-----+-------------+-----+--------+-------------+---------+ | SID | Name | Age | Gender | Tutor | ClassID | +-----+-------------+-----+--------+-------------+---------+ | 1 | Guo Jing | 27 | M | Song Jiang | 2 | | 2 | Yang Guo | 28 | M | Hu Sanniang | 3 | | 3 | Guo Polu | 21 | M | Jia Baoyu | 3 | | 4 | Xue Baochai | 19 | F | Rong Momo | 1 | | 5 | Xia Yuhe | 37 | F | Shi Qian | 2 | | 6 | Wu Yong | 51 | M | Lin Daiyu | 1 | | 7 | tom | 11 | M | jerry | 1 | | 8 | tomy | 13 | M | NULL | 4 | +-----+-------------+-----+--------+-------------+---------+ mysql> select Name,Age from students where Age > 20; #查找年齡大於20的 +----------+-----+ | Name | Age | +----------+-----+ | Guo Jing | 27 | | Yang Guo | 28 | | Guo Polu | 21 | | Xia Yuhe | 37 | | Wu Yong | 51 | +----------+-----+ mysql> select Name,Gender from students where Gender = 'F'; #查找性別爲女的 +-------------+--------+ | Name | Gender | +-------------+--------+ | Xue Baochai | F | | Xia Yuhe | F | +-------------+--------+ mysql> select Name,Age,Gender from students where Age > 20 and Gender = 'F'; +----------+-----+--------+ | Name | Age | Gender | +----------+-----+--------+ | Xia Yuhe | 37 | F | +----------+-----+--------+
delete:
mysql> delete from students where Name like 'X%'; Query OK, 2 rows affected (0.00 sec) mysql> select * from students; +-----+----------+-----+--------+-------------+---------+ | SID | Name | Age | Gender | Tutor | ClassID | +-----+----------+-----+--------+-------------+---------+ | 1 | Guo Jing | 27 | M | Song Jiang | 2 | | 2 | Yang Guo | 28 | M | Hu Sanniang | 3 | | 3 | Guo Polu | 21 | M | Jia Baoyu | 3 | | 6 | Wu Yong | 51 | M | Lin Daiyu | 1 | | 7 | tom | 11 | M | jerry | 1 | | 8 | tomy | 13 | M | NULL | 4 | +-----+----------+-----+--------+-------------+---------+ 6 rows in set (0.00 sec)
update:
mysql> update students set Age = 40 where Name = 'Wu yong'; Query OK, 1 row affected (0.01 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from students; +-----+----------+-----+--------+-------------+---------+ | SID | Name | Age | Gender | Tutor | ClassID | +-----+----------+-----+--------+-------------+---------+ | 1 | Guo Jing | 27 | M | Song Jiang | 2 | | 2 | Yang Guo | 28 | M | Hu Sanniang | 3 | | 3 | Guo Polu | 21 | M | Jia Baoyu | 3 | | 6 | Wu Yong | 40 | M | Lin Daiyu | 1 | | 7 | tom | 11 | M | jerry | 1 | | 8 | tomy | 13 | M | NULL | 4 | | 9 | Tom | 24 | M | NULL | NULL | | 10 | Jerry | 23 | F | NULL | NULL | +-----+----------+-----+--------+-------------+---------+
幾個簡單show命令的用法
mysql> show create table stu1\G; #查看建立表所使用的命令。 #\G爲客戶端命令;可使用\?來查看。 *************************** 1. row *************************** Table: stu1 Create Table: CREATE TABLE `stu1` ( `Id` int(10) unsigned NOT NULL AUTO_INCREMENT, `Name` char(30) NOT NULL, `Age` tinyint(3) unsigned NOT NULL, `Gender` enum('F','M') NOT NULL DEFAULT 'M', UNIQUE KEY `Id` (`Id`) ) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=latin1 1 row in set (0.00 sec) ERROR: No query specified mysql>
mysql> show engines\G; #查看當前數據庫支持的存儲引擎 *************************** 1. row *************************** Engine: MRG_MYISAM Support: YES #是否支持 Comment: Collection of identical MyISAM tables Transactions: NO #是否支持事務 XA: NO #是否支持分佈式事務 Savepoints: NO #是否支持保存點 *************************** 2. row *************************** Engine: CSV Support: YES Comment: CSV storage engine Transactions: NO XA: NO Savepoints: NO *************************** 3. row *************************** Engine: MyISAM Support: DEFAULT Comment: Default engine as of MySQL 3.23 with great performance Transactions: NO XA: NO Savepoints: NO *************************** 4. row *************************** Engine: InnoDB Support: YES Comment: Supports transactions, row-level locking, and foreign keys Transactions: YES XA: YES Savepoints: YES *************************** 5. row *************************** Engine: MEMORY Support: YES Comment: Hash based, stored in memory, useful for temporary tables Transactions: NO XA: NO Savepoints: NO 5 rows in set (0.00 sec) ERROR: No query specified mysql>
mysql> show character set; #顯示字符集 +----------+-----------------------------+---------------------+--------+ | Charset | Description | Default collation | Maxlen | +----------+-----------------------------+---------------------+--------+ | big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 | | dec8 | DEC West European | dec8_swedish_ci | 1 | | cp850 | DOS West European | cp850_general_ci | 1 | | hp8 | HP West European | hp8_english_ci | 1 | | koi8r | KOI8-R Relcom Russian | koi8r_general_ci | 1 | | latin1 | cp1252 West European | latin1_swedish_ci | 1 | | latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 | | swe7 | 7bit Swedish | swe7_swedish_ci | 1 | | ascii | US ASCII | ascii_general_ci | 1 | mysql> show collation; #排序規則 +--------------------------+----------+-----+---------+----------+---------+ | Collation | Charset | Id | Default | Compiled | Sortlen | +--------------------------+----------+-----+---------+----------+---------+ | big5_chinese_ci | big5 | 1 | Yes | Yes | 1 | | big5_bin | big5 | 84 | | Yes | 1 | | dec8_swedish_ci | dec8 | 3 | Yes | Yes | 1 | | dec8_bin | dec8 | 69 | | Yes | 1 | | cp850_general_ci | cp850 | 4 | Yes | Yes | 1 | | cp850_bin | cp850 | 80 | | Yes | 1 | | hp8_english_ci | hp8 | 6 | Yes | Yes | 1 | | hp8_bin | hp8 | 72 | | Yes | 1 | | koi8r_general_ci | koi8r | 7 | Yes | Yes | 1 | #查看show的幫助都有詳細說明 mysql> help show Name: 'SHOW' Description: SHOW has many forms that provide information about databases, tables, columns, or status information about the server. This section describes those following: SHOW AUTHORS SHOW {BINARY | MASTER} LOGS SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count] SHOW CHARACTER SET [like_or_where] SHOW COLLATION [like_or_where] SHOW [FULL] COLUMNS FROM tbl_name [FROM db_name] [like_or_where] SHOW CONTRIBUTORS SHOW CREATE DATABASE db_name SHOW CREATE EVENT event_name SHOW CREATE FUNCTION func_name SHOW CREATE PROCEDURE proc_name SHOW CREATE TABLE tbl_name SHOW CREATE TRIGGER trigger_name ....
關係型數據庫的基本用法到此,因爲數據庫理論等方面內容不少;沒法總結的很全面;可能存在不少遺漏的地方。後續介紹詳細用法。
若有錯誤;懇請糾正。