MySQL的基礎 原

數據庫和SQL

什麼數據庫

數據庫是存儲在一起的相關數據的集合,這些數據是結構化的,無有害的或不必要的冗餘,併爲多種應用服務。

什麼是SQL

結構化查詢語言(Structured Query Language)簡稱SQL,是一種特殊目的的編程語言,是一種數據庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關係數據庫系統;同時也是數據庫腳本文件的擴展名。

什麼是mysql

MySQL是一個小型關係型數據庫管理系統,開發者爲瑞典MySQLAB公司,在2008年1月16號被Sun公司收購。MySQL被廣泛地應用在Internet上的中小型網站中。由於其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,許多中小型網站爲了降低網站總體擁有成本而選擇了MySQL作爲網站數據庫。

關係數據庫管理系統(Relational Database Management System:RDBMS):

指包括相互聯繫的邏輯組織和存取這些數據的一套程序 (數據庫管理系統軟件)。關係數據庫管理系統就是管理關係數據庫,並將數據邏輯組織的系統。

mysql中的數據類型

MySQL支持多種類型,大致可以分爲三類:數值、日期/時間和字符串(字符)類型。

數值類型

類型大小範圍(有符號)範圍(無符號)用途
TINYINT1 字節(-128,127)(0,255)小整數值
SMALLINT2 字節(-32 768,32 767)(0,65 535)大整數值
MEDIUMINT3 字節(-8 388 608,8 388 607)(0,16 777 215)大整數值
INT或INTEGER4 字節(-2 147 483 648,2 147 483 647)(0,4 294 967 295)大整數值
BIGINT8 字節(-9 233 372 036 854 775 808,9 223 372 036 854 775 807)(0,18 446 744 073 709 551 615)極大整數值
FLOAT4 字節(-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)單精度浮點數值
DOUBLE8 字節(-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的值小數值

時間/日期類型

類型大小(字節)範圍格式用途
DATE31000-01-01/9999-12-31YYYY-MM-DD日期值
TIME3'-838:59:59'/'838:59:59'HH:MM:SS時間值或持續時間
YEAR11901/2155YYYY年份值
DATETIME81000-01-01 00:00:00/9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS混合日期和時間值
TIMESTAMP41970-01-01 00:00:00/2038結束時間是第 2147483647 秒,北京時間 2038-1-19 11:14:07,格林尼治時間 2038年1月19日 凌晨 03:14:07YYYYMMDD HHMMSS混合日期和時間值,時間戳

字符串類型

類型大小用途
CHAR0-255字節定長字符串
VARCHAR0-65535 字節變長字符串
TINYBLOB0-255字節不超過 255 個字符的二進制字符串
TINYTEXT0-255字節短文本字符串
BLOB0-65 535字節二進制形式的長文本數據
TEXT0-65 535字節長文本數據
MEDIUMBLOB0-16 777 215字節二進制形式的中等長度文本數據
MEDIUMTEXT0-16 777 215字節中等長度文本數據
LONGBLOB0-4 294 967 295字節二進制形式的極大文本數據
LONGTEXT0-4 294 967 295字節極大文本數據

mysql的數據庫操作

數據庫的新增

登陸 MySQL 服務後,使用 create 命令創建數據庫,語法如下:

CREATE DATABASE 數據庫名;
DROP DATABASE if exists 數據庫名;
create database 數據庫名;

實例:

CREATE DATABASE test_db;

數據庫的查詢

獲取所有表名:

USE information_schema;
SELECT table_name FROM TABLES WHERE TABLE_SCHEMA=’數據庫名’;

數據庫的刪除

使用 drop 命令刪除數據庫,語法如下:

DROP DATABASE 數據庫名;

mysql的數據表操作

數據表的新建

實例:

USE test_db;
CREATE TABLE IF NOT EXISTS `student`(
   `stu_id` INT UNSIGNED AUTO_INCREMENT,
   `stu_age` INT NOT NULL COMMENT '學生的年齡',
   `stu_name` VARCHAR(20) NOT NULL COMMENT '學生的姓名',
   `stu_number` VARCHAR(30) NOT NULL UNIQUE COMMENT '學號',
   `stu_address` VARCHAR(30) NOT NULL COMMENT '學生的地址',
   PRIMARY KEY ( `stu_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

圖解

總結:

CREATE TABLE table_name (
    column_name1 data_type constraint[...],
    column_name2 data_type constraint[...],
    column_name3 data_type constraint[...],
    ...
    PRIMARY KEY ( `column_name` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

數據的增添

實例:

INSERT INTO `student`
(`stu_age`, `stu_name`, `stu_number`, `stu_address`)
VALUES
(22, '劉太剛', '1234', '貴州'),
(15, '徐維鬆', '2345', '四川'),
(19, '徐任達', '3456', '貴州'),
(18, '彭克喜', '4567', '貴州'),
(20, '潘姚瑤', '5678', '新疆');

總結:

INSERT INTO table_name
(column_name1, column_name2, column_name3, ...)
VALUES
(value1, value2, value3, ...),
(value1, value2, value3, ...),
...
(value1, value2, value3, ...);

數據表的刪除

刪除數據表

DROP TABLE 表名;  

刪除數據

刪除表內數據,用 delete。格式爲:

DELETE FROM 表名 WHERE 刪除條件;

實例:

DELETE FROM student WHERE stu_name = "劉太剛";   --刪除學生表內姓名爲劉太剛的記錄

注: 只用delete的時候,一定要使用where並註明刪除的條件,否則會刪除整張表。

刪除數據,但是保留表結構

清除表內數據,保存表結構,用 truncate。格式爲:

TRUNCATE TABLE 表名;

數據表的修改

增加一個字段:

ALTER TABLE 表名 ADD COLUMN 字段名 數據類型 字段約束; 

實例:

ALTER TABLE student ADD COLUMN stu_honor VARCHAR(20) DEFAULT NULL;

刪除一個字段:

ALTER TABLE 表名 DROP COLUMN 字段名; 

修改一個字段:

ALTER TABLE 表名 MODIFY 字段名 數據類型;  --修改數據類型

ALTER  TABLE 表名 CHANGE 舊字段名 新字段名 新數據類型;   --修改字段名稱
ALTER TABLE student MODIFY stu_honor VARCHAR(10); 

ALTER TABLE student CHANGE stu_honor stu_honour varchar(200);   

數據表的查詢

一般查詢

一般查詢的格式

SELECT column_name,column_name, ...
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M]

查詢所有數據

實例:

SELECT * FROM student ;
SELECT stu_name, stu_number FROM student ;    --所有數據中的指定字段

根據條件查詢

實例:

select * from student where id= 1;
select * from student where stu_name='徐維鬆' and stu_number='2345' ;
select * from student where stu_name='徐維鬆' or stu_number='3456' ;
select * from student where stu_age>=18 and stu_age<=21 ;
select * from student where stu_age between 20 and 23;

模糊查詢

實例:

select * from student where stu_name like '%克喜';     --%通配符代表任意多個字符

排序

實例:

select * from student order by stu_age asc;    --按照價格升序排列
select * from student order by stu_age desc;    --按照價格降序排列

統計函數(聚合函數)

實例:

select count(*) from student;     --查詢表中有多少條數據
select max(stu_age) from student;     --取價格的最大值
select min(stu_age) from student;     --取價格的最小值
select sum(stu_age) from student;     --取價格的總和
select avg(stu_age) from student;     --取價格的平均值

分組查詢

實例1:

select count(*) from student group by stu_address;

注: group by,一般和聚合函數一起使用,如果,查詢的字段出現在GROUP BY後,卻沒有包含在聚合函數中,該字段顯示的是,分組後的第一條記錄的值,這樣,可能會導致查詢結果不符合我們的預期。

實例2:

SELECT COUNT(*) FROM student GROUP BY stu_address HAVING SUM(stu_age)>60;    --使用stu_address作爲分組的條件, 找出滿足stu_age的和大於60的那一組

注: HAVING關鍵字和WHERE關鍵字的作用相同,都是用於設置條件表達式,對查詢結果進行過濾。兩者的區別是,HAVING關鍵字後,可以跟聚合函數,而WHERE關鍵字不能,通常情況下,HAVING關鍵字,都是和GROUP BY一起使用,用於對分組後的結果進行過濾。

分頁查詢

select * from student limit 0,3;    -- 跳過幾條數據取幾條數據

總結:

SELECT * FROM table_name LIMIT offset, size;    -- offset:偏移量; size:數據量

去重(chong)查詢

select distinct stu_address from student;

連結查詢

內聯接

(典型的聯接運算,使用像 = 或 <> 之類的比較運算符)。包括相等聯接和自然聯接。

內聯接使用比較運算符根據每個表共有的列的值匹配兩個表中的行。例如,檢索 students和courses表中學生標識號相同的所有行。

外聯接

外聯接可以是左向外聯接、右向外聯接或完整外部聯接。

在 FROM子句中指定外聯接時,可以由下列幾組關鍵字中的一組指定:

1)LEFT JOIN或LEFT OUTER JOIN

左向外聯接的結果集包括 LEFT OUTER子句中指定的左表的所有行,而不僅僅是聯接列所匹配的行。如果左表的某行在右表中沒有匹配行,則在相關聯的結果集行中右表的所有選擇列表列均爲空值。

2)RIGHT JOIN 或 RIGHT OUTER JOIN

右向外聯接是左向外聯接的反向聯接。將返回右表的所有行。如果右表的某行在左表中沒有匹配行,則將爲左表返回空值。

3)FULL JOIN 或 FULL OUTER JOIN 完整外部聯接返回左表和右表中的所有行。當某行在另一個表中沒有匹配行時,則另一個表的選擇列表列包含空值。如果表之間有匹配行,則整個結果集行包含基表的數據值。

交叉聯接

交叉聯接返回左表中的所有行,左表中的每一行與右表中的所有行組合。交叉聯接也稱作笛卡爾積。 FROM 子句中的表或視圖可通過內聯接或完整外部聯接按任意順序指定;但是,用左或右向外聯接指定表或視圖時,表或視圖的順序很重要。有關使用左或右向外聯接排列表的更多信息,請參見使用外聯接。

例子

img

1) 內連接

img

2)左連接

img

3) 右連接

img

4) 完全連接

img

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章