SQL
- WHAT(SQL是什么?)
Structured Query Language:結構化查詢語⾔ - WHY(為何要使用SQL?)
難道僅僅使用SQL Server Management Studio操作數據庫?
應用程序如何與數據庫打交道? - WHEN(何時使用?)
對SQL Server執⾏所有的操作都可以
程序中的增刪改查 - HOW(怎么使用?)
...
四大SQL語句
- 數據定義語句DDL:
create、alter、drop、truncate(表結構) - 數據操作語句DML:
insert、delete、update、select(數據) - 數據控制語句DCL:
授權grant
收回權限:revoke - 事務控制語句TCL:
開啟事務:begin
提交:commit
回滾:rollback
數據庫操作
創建數據庫
SQL語句:
create database 數據庫名;
create database stu_a;
-- 在建庫時指定字符集,避免中文數據亂碼的問題
create database stu_b default charset='utf8';
成功創建數據庫后,數據庫根目錄下會自動創建數據庫目錄。
顯示數據庫結構
SQL語句:
show create database 數據庫名;
可以查看數據庫的相關信息(例如默認字符集等信息)。
刪除數據庫
SQL語句:
drop database 數據庫名;
MySQL數據類型
MySQL提供的數據類型包括數值類型(整數類型和小數類型)、字符串類型、日期類型、復合類型(復合類型包括enum類型和set類型)以及⼆進制類型 。
decimal(length, precision)用於表示精度確定(小數點后數字的位數確定)的小數類型,length決定了該小數的最⼤位數,precision用於設置精度(小數點后數字的位數)。
例如:
decimal(5,2)表示小數取值范圍:-999.99∼999.99
decimal(5,0)表示: -99999∼99999的整數。
char()與varchar():
例如對於簡體中⽂字符集gbk的字符串⽽⾔,varchar(255)表示可以存儲255個漢字,⽽每個漢字占用兩個字節的存儲空間。假如這個字符串沒有那么多漢字,例如僅僅包含⼀個‘中’字,那么varchar(255)僅僅占用1個字符(兩個字節)的儲存空間;⽽char(255)則必須占用255個字符長度的存儲空間,哪怕里面只儲⼀個漢字。
表操作
創建數據庫表
注意:在創建表之前,需要選擇當前操作的數據庫
Use 數據庫名;
創建數據庫表SQL語句:
use student;
create table stu(id int,name varchar(20));
create table stuinfo(
id int,
name char(20),
address char(50),
city char(50),
age int,
love char(50)
)default charset='utf8';
顯示表結構
SQL語句:
desc 表名; -- 即可查看指定表的結構
SQL語句:
show create table 表名; -- 查看指定表的詳細信息
刪除表
SQL語句:
drop table 表名;
注意:刪除表后,MySQL服務實例會自動刪除該表結構定義的文件,以及數據、索引信息。該命令慎用!
刪除字段
alter table 表名 drop 字段名
添加新字段
alter table 表名 add 新字段名 新數據類型 [新約束條件]
修改字段名
alter table 表名 change 舊字段名 新字段名 新數據類型
修改數據類型
alter table 表名 modify 字段名 新數據類型
修改表名
rename table 舊表名 to 新表名
數據的增、刪、改、查
表記錄的插入
SQL語句:
insert into 表名(字段列表) values(值列表);
提示:當插入的數據值的個數與表字段個數相同時,可以省略字段列表
insert stu(id,name) values(1,'newdream');
insert stu values(2,'newdream1');
一次插入多條記錄
insert into 表名(字段列表) values (值列表1),(值列表2),...(值列表n);
insert into stu values(3,'new1'),(4,'new2'),(5,'new3');
使用insert...select插入結果
insert into 目標表名(字段列表1)
select(字段列表2) from 源表 where 條件表達式
insert into stu_bak(id,name)
select id,newname from stu where id>2;
注意:字段列表1與字段列表2的字段個數必須相同,且對應字段的數據類型盡量保持一致。
如果果源表與目標表的表結構完全相同,“(字段列表1)”可以省略。
復制表結構及數據到新表
create table 新表 select * from 舊表;
只復制表結構到新表
create table 新表 select * from 舊表 where 1=2;
修改表記錄
update 表名 set 字段名1=值1,字段名2=值2,...,字段名n=值n
[where 條件表達式]
update stu set newname='new5' where id=1;
where 子句指定了表中的哪些記錄需要修改。若省略了where子句,則表示修改表中的所有記錄。
set子句指定了要修改的字段以及該字段修改后的值。
使用delete刪除表記錄
delete from 表名 where 條件表達式;
說明:如果沒有指定wheree⼦句,那么該表的所有記錄都將被刪除,但表結構依然存在。
使用truncate清空表記錄
truncate table 表名;
delete和truncate的區別
Delete不加WHERE條件是刪除所有數據
Truncate不能夠加WHERE條件
Delete可以加WHERE條件
Truncate會重置AUTO_INCREMENT
Delete可以進⾏回滾操作
表記錄的查詢
select 字段列表 from 表名
where條件表達式
表記錄的查詢—給列取別名
可以為字段列表中的字段名或表達式指定別名,中間使用as關鍵字分隔即可(as關鍵字可以省略)。多表查詢時,同名字段前必須添加表名前綴,中間使用“.”分
隔。
Select id as ’學⽣學號’,newname ‘學⽣姓名’ from stu;
使用source命令
測試⼈員經常會和MySQL打交道,備份和恢復應該是最常用的操作了,那么通過直接執⾏sql⽂件⽆疑是最快捷的⽅式。
我們會把寫好的sql語句保存成⼀個.sql⽂件進⾏備份;如果想在新的數據庫中執⾏時,可以使用source命令進⾏恢復;
例如:在D盤的new⽂件夾中保存了dream.sql⽂件
(此⽅法只用在命令提示窗⼝)
第⼀步:可以先新建⼀個數據庫;
第⼆步:use 新的數據庫
第三步:Source d:\www\dream.sql
如此就把之前的表數據在新的數據庫中進⾏恢復;之前的表及數據在新的數據庫中都是存在的;