SQL語言入門(一)
前言
各種版本的數(shù)據(jù)庫中,有一種通用的語言用于管理數(shù)據(jù)庫中的數(shù)據(jù)饼灿,它就是SQL其掂,本章我們將學(xué)習(xí)基本的SQL語句惜互。
SQL的概述
Structured Query Language 結(jié)構(gòu)化查詢語言蹋订,是一種特殊目的的編程語言率挣,是一種數(shù)據(jù)庫查詢和程序設(shè)計語言,用于存取數(shù)據(jù)以及查詢露戒、更新和管理關(guān)系數(shù)據(jù)庫系統(tǒng)。
各種主流的數(shù)據(jù)庫系統(tǒng)都對SQL規(guī)范作了某些編改和擴(kuò)充捶箱。所以智什,實(shí)際上不同數(shù)據(jù)庫系統(tǒng)之間的SQL不能完全相互通用,但大部分是相同的丁屎,后面我們學(xué)習(xí)的是MySQL的版本荠锭,掌握SQL主要語法之后,要遷移到其它數(shù)據(jù)庫也是比較容易的晨川。
結(jié)構(gòu)化查詢語言包含6個部分:
一:數(shù)據(jù)查詢語言(DQL:Data Query Language):
其語句证九,也稱為“數(shù)據(jù)檢索語句”删豺,用以從表中獲得數(shù)據(jù),確定數(shù)據(jù)怎樣在應(yīng)用程序給出愧怜。保留字SELECT是DQL(也是所有SQL)用得最多的動詞呀页,其他DQL常用的保留字有WHERE,ORDER BY拥坛,GROUP BY和HAVING蓬蝶。這些DQL保留字常與其他類型的SQL語句一起使用。
二:數(shù)據(jù)操作語言(DML:Data Manipulation Language):
其語句包括動詞INSERT猜惋,UPDATE和DELETE丸氛。它們分別用于添加,修改和刪除表中的行著摔。也稱為動作查詢語言缓窜。
三:事務(wù)處理語言(TPL):
它的語句能確保被DML語句影響的表的所有行及時得以更新。TPL語句包括BEGIN TRANSACTION谍咆,COMMIT和ROLLBACK雹洗。
四:數(shù)據(jù)控制語言(DCL):
它的語句通過GRANT或REVOKE獲得許可,確定單個用戶和用戶組對數(shù)據(jù)庫對象的訪問卧波。某些RDBMS可用GRANT或REVOKE控制對表單個列的訪問时肿。
五:數(shù)據(jù)定義語言(DDL):
其語句包括動詞CREATE和DROP。在數(shù)據(jù)庫中創(chuàng)建新表或刪除表(CREAT TABLE 或 DROP TABLE)港粱;為表加入索引等螃成。DDL包括許多與人數(shù)據(jù)庫目錄中獲得數(shù)據(jù)有關(guān)的保留字。它也是動作查詢的一部分查坪。
六:指針控制語言(CCL):
它的語句寸宏,像DECLARE CURSOR,F(xiàn)ETCH INTO和UPDATE WHERE CURRENT用于對一個或多個表單獨(dú)行的操作偿曙。
本章我們主要介紹的是DDL和DML氮凝。
MySQL數(shù)據(jù)庫的操作
創(chuàng)建數(shù)據(jù)庫的基本語法是:
create database 數(shù)據(jù)庫名;
還可以給數(shù)據(jù)庫指定默認(rèn)的字符集以及排序規(guī)則:
create database 數(shù)據(jù)庫名
default character set 字符集 collate 排序規(guī)則;
選擇數(shù)據(jù)庫
use 數(shù)據(jù)庫名;
修改數(shù)據(jù)庫的字符集和排序規(guī)則:
alter database 數(shù)據(jù)庫名
default character set 字符集 collate 排序規(guī)則;
刪除數(shù)據(jù)庫:
drop database 數(shù)據(jù)庫名;
刪除時檢查數(shù)據(jù)庫是否存在:
drop database if exists 數(shù)據(jù)庫名;
代碼示例:
-- 刪除數(shù)據(jù)庫
drop database if exists java1903;
-- 創(chuàng)建數(shù)據(jù)庫
create database java1903
default character set utf8mb4
collate utf8mb4_general_ci;
-- 使用數(shù)據(jù)庫
use java1903;
MySQL常見的數(shù)據(jù)類型
創(chuàng)建好數(shù)據(jù)庫后,我們就需要建表望忆,建表我們需要設(shè)置字段的數(shù)據(jù)類型罩阵,我們先來了解MySQL中常見的數(shù)據(jù)類型。
1) 整數(shù)類型
類型名稱說明存儲需求
TINYINT很小的整數(shù)1個字節(jié)
SMALLINT小的整數(shù)2個宇節(jié)
MEDIUMINT中等大小的整數(shù)3個字節(jié)
INT (INTEGHR)普通大小的整數(shù)4個字節(jié)
BIGINT大整數(shù)8個字節(jié)
2)小數(shù)類型
類型名稱說明存儲需求
FLOAT單精度浮點(diǎn)數(shù)4 個字節(jié)
DOUBLE雙精度浮點(diǎn)數(shù)8 個字節(jié)
DECIMAL (M, D)启摄,DEC壓縮的“嚴(yán)格”定點(diǎn)數(shù)M+2 個字節(jié)
3) 日期/時間類型
類型名稱日期格式日期范圍存儲需求
YEARYYYY1901 ~ 21551 個字節(jié)
TIMEHH:MM:SS-838:59:59 ~ 838:59:593 個字節(jié)
DATEYYYY-MM-DD1000-01-01 ~ 9999-12-33 個字節(jié)
DATETIMEYYYY-MM-DD HH:MM:SS1000-01-01 00:00:00 ~ 9999-12-31 23:59:598 個字節(jié)
TIMESTAMPYYYY-MM-DD HH:MM:SS1980-01-01 00:00:01 UTC ~ 2040-01-19 03:14:07 UTC4 個字節(jié)
3) 字符串類型
類型名稱說明存儲需求
CHAR(M)固定長度非二進(jìn)制字符串M 字節(jié)稿壁,1<=M<=255
VARCHAR(M)變長非二進(jìn)制字符串L+1字節(jié),在此歉备,L< = M和 1<=M<=255
TINYTEXT非常小的非二進(jìn)制字符串L+1字節(jié)傅是,在此,L<2^8
TEXT小的非二進(jìn)制字符串L+2字節(jié),在此喧笔,L<2^16
MEDIUMTEXT中等大小的非二進(jìn)制字符串L+3字節(jié)帽驯,在此,L<2^24
LONGTEXT大的非二進(jìn)制字符串L+4字節(jié)书闸,在此尼变,L<2^32
ENUM枚舉類型,只能有一個枚舉字符串值1或2個字節(jié)梗劫,取決于枚舉值的數(shù)目 (最大值為65535)
SET一個設(shè)置享甸,字符串對象可以有零個或 多個SET成員1、2梳侨、3蛉威、4或8個字節(jié),取決于集合 成員的數(shù)量(最多64個成員)
4) 二進(jìn)制類型
類型名稱說明存儲需求
BIT(M)位字段類型大約 (M+7)/8 字節(jié)
BINARY(M)固定長度二進(jìn)制字符串M 字節(jié)
VARBINARY (M)可變長度二進(jìn)制字符串M+1 字節(jié)
TINYBLOB (M)非常小的BLOBL+1 字節(jié)走哺,在此蚯嫌,L<2^8
BLOB (M)小 BLOBL+2 字節(jié),在此丙躏,L<2^16
MEDIUMBLOB (M)中等大小的BLOBL+3 字節(jié)择示,在此,L<2^24
LONGBLOB (M)非常大的BLOBL+4 字節(jié)晒旅,在此栅盲,L<2^32
表的操作
創(chuàng)建表:
create table 表名
(
字段名 數(shù)據(jù)類型 [約束],
字段名 數(shù)據(jù)類型 [約束],
....
)
主要的約束類型有:
primary key主鍵,表中只能有一個废恋,不能重復(fù)谈秫,不能為空
not null 非空,必須填寫
unique唯一鱼鼓,不能重復(fù)
auto_increment自動增長拟烫,必須是整數(shù)類型,不需要手動插入
foreign key外鍵迄本,建立表之間的引用關(guān)系
刪除表:
drop table 表名;
刪除表時進(jìn)行檢查:
drop table if exists 表名;
修改表硕淑,添加字段:
alter table 表名 add column 字段名 數(shù)據(jù)類型;
修改表,刪除字段:
alter table 表名 drop column 字段名;
查看表結(jié)構(gòu):
desc 表名;
代碼示例:
-- 刪除表
drop table if exists tb_student;
-- 創(chuàng)建學(xué)生表
create table tb_student
(
stu_id int primary key auto_increment,
stu_name varchar(20) not null,
stu_age int not null,
stu_gender varchar(1) not null,
stu_address varchar(200)
);
數(shù)據(jù)操作語言DML
數(shù)據(jù)操作語言有插入嘉赎、刪除和更新語句組成置媳。
單行插入:
insert into 表名(字段名,字段名,字段名..) values(值,值,值..);
多行插入
insert into 表名(字段名,字段名,字段名..)
values(值,值,值..),(值,值,值..),(值,值,值..);
將一張表數(shù)據(jù)插入另一張表
insert into 表1(字段名,字段名,字段名..)
select 字段名,字段名,字段名 from 表2;
刪除所有數(shù)據(jù)
delete from 表名;
清空表
truncate table 表名;
帶條件的刪除
delete from 表名 [where 條件];
更新
update 表名 set 字段 = 值,字段 = 值... [where 條件];
代碼示例:
-- 插入一行學(xué)生記錄
insert into tb_student(stu_name,stu_age,stu_gender,stu_address)
values('趙六',30,'男','上海');
-- 插入多行學(xué)生
insert into tb_student(stu_name,stu_age,stu_gender,stu_address)
values('陳七',20,'男','武漢'),('陳大七',28,'男','上海'),('陳小七',18,'男','北京');
-- 刪除學(xué)號為3的學(xué)生
delete from tb_student where stu_id = 3;
-- 全部刪除
delete from tb_student;
-- 清空表
truncate table tb_student;
-- 更新陳七的年齡為23,性別為女
update tb_student set stu_age = 23,stu_gender = '女'
where stu_name = '陳七';
總結(jié)
本章我們學(xué)習(xí)了SQL語言中的DDL和DML曹阔,能實(shí)現(xiàn)建表建表和數(shù)據(jù)的增刪改操作半开,還有一個重要的查詢操作,也就是DQL赃份,會在下章介紹。