數據庫的基本概念:
數據庫的(Database,簡稱DB):用於存儲和管理數據的倉庫。
數據庫的特點:
1.持久化存儲數據,其實數據庫就是一個文件系統
2.方便存儲和管理數據
3.使用了統一的方式操作數據庫--SQL
SQL:
Structured Query Language:結構化查詢語言,其實就是定義了操作關係型數據庫的規則。每一種數據庫操作的方式存在不一樣的地方,成爲“方言”。
SQL通用語法:
1.SQL語句可以單行或多行書寫,以分號結尾
2.可使用空格和縮進增强語句可讀性
3.MySQL數據庫的SQL語句不區分大小,關鍵字建議使用大寫
4.三种注釋:
(1)單行注釋:-- 注釋内容 或 # 注釋内容(mysql 特有)
(2)多行注釋:/* 注釋 */
SQL分類:
- DDL(Data Definition Language)數據庫定義語言。用來定義數據庫對象--數據庫,表,列等。關鍵字:create、drop、alter等。
- DML(Data Manipulation Language)數據庫操作語言。用來對數據庫中表的數據進行增刪改。關鍵字:insert、delete、update等。
- DQL(Data Query Language)數據查詢語言。用來查詢數據庫中表的記錄(數據)。關鍵字:select、where等。
- DCL(Data Control Language)數據控制語言(了解)用來定義數據庫的訪問權限和安全級別,及創建用戶。關鍵字:GRANT、REVOKE等。
DDL:操作數據庫、表
1.操作數據庫
1.C(Create):創建
建數據庫:create database 數據庫名稱
創建數據庫,判斷不存在再創建:create database if not exists 數據庫名稱;
創建數據庫,並指定字符集:create database 数据库名称 character set 字符集名;如:
create database if not exists db4 character set gbk;
2.R(Retrieve):查詢
查詢所有數據庫的名稱:show databases;
查詢某個數據庫的字符集:查詢某個數據庫的創建語句:show create database 数据库名称;
3.U(Update):修改
修改數據庫的字符集:alter database 数据库名称 character set 字符集名称;
4.D(Delete):刪除
刪除數據庫:drop database 数据库名称;
判斷數據庫存在,再刪除:drop database if exists 数据库名称;
5.使用數據庫
查詢當前正在使用的數據庫名稱:select database();
使用數據庫:use 數據庫名稱;
2.操作表
C(Create):创建
語法:
create table 表名(
列名1 数据类型1,
列名2 数据类型2,
....
列名n 数据类型n
);
#注意:最後一列,不需要加逗號(,)
3.數據庫類型:
int:整數類型
double:小數類型
date:日期,包含年月日,yyyy-MM-dd
datetime:日期,包含年月日時分秒,yyyy-MM-dd HH:mm:ss
timestamp:時間戳類型 包含年月日時分秒,yyyy-MM-dd HH:mm:ss
如果將來不給這個字段賦值,或賦值爲null,則默認使用當前的系統
時間,來自動賦值
varchar:字符串
name varchar(20):姓名最大20個字符
創建表
create table student(
id int,
name varchar(32),
age int ,
score double(4,1),
birthday date,
insert_time timestamp
);
複製表:
create table 表名 like 被复制的表名;
R(Retrieve):查询
查詢某個數據庫中所有的表名稱:show tables;
查詢表結構:desc 表名;
U(Update):修改
修改表名:alter table 表名 rename to 新的表名;
修改表的字符集:alter table 表名 character set 字符集名称;
添加一列:alter table 表名 add 列名 数据类型;
修改列名稱 類型:
alter table 表名 change 列名 新列别 新数据类型;
alter table 表名 modify 列名 新数据类型;
刪除列:alter table 表名 drop 列名;
D(Delete):删除
drop table 表名;
drop table if exists 表名 ;
DML:增刪改表中數據
添加數據
語法:insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);
注意:
列名和值要一一對應
如果表名后,不定義列名,則默認給所有列添加值
insert into 表名 values(值1,值2,...值n);
除了數字類型,其他類型需要使用引號(單雙都可以)引起來
刪除數據:
語法:delete from 表名 [where 条件]
注意:
如果不加條件,則刪除表中所有記錄
如果要刪除所有記錄
delete from 表名; -- 不推荐使用。有多少条记录就会执行多少次删除操作
TRUNCATE TABLE 表名; -- 推荐使用,效率更高 先删除表,然后再创建一张一样的表。
修改數據:
語法:update 表名 set 列名1 = 值1, 列名2 = 值2,... [where 条件];
注意:如果不加任何條件,則會將表中所有記錄全部修改。
DQL:查詢表中的記錄
* select * from 表名;
1.語法:
select
字段列表
from
表名列表
where
條件列表
group by
分組字段
having
分組之後的條件
order by
排序
limit
分頁限定
2.基礎查詢:
(1)多個字段查詢:
select 字段名1,字段名2... from 表名;
注意:如果查詢所以字段則可以使用*來替代字段列表
(2)去除重複:
distinct
(3)計算列:
i.一般可以使用四則運算計算一些列的值。(一般只會進行數值型的計算)
ii.ifnull(表達式1,表達式2):null參與的運算,計算結果都爲null
a.表達式1:哪個字段需要判斷是否為null
b.如果該字段為null后的替換值
(4)起別名
as:as也可以省略
3.條件查詢:
(1)where子句后跟條件
(2)運算符:
> 、< 、<= 、>= 、= 、<>
BETWEEN...AND
IN( 集合)
LIKE:模糊查询
佔位符:
_:單個任意字符
*:多個任意字符
IS NULL
and 或 &&
or 或 ||
not 或 !
--查詢年齡大於20嵗
SELECT * FROM student WHERE age > 20;
--等於20嵗
SELECT * FROM student WHERE age = 20;
--不等於20嵗
SELECT * FROM student WHERE age != 20;
SELECT * FROM student WHERE age <> 20;
--大於等於20,小於等於30
SELECT * FROM student WHERE age >= 20 && age <= 30;
SELECT * FROM student WHERE age >= 20 AND age <= 30;
SELECT * FROM student WHERE age BETWEEN AND 30;
--查詢年齡22,18,25嵗的信息
SELECT * FROM student WHERE age = 20 OR age = 18 OR age = 25;
SELECT * FROM student WHERE age IN (22,18,25);
--查詢英語成績為null
SELECT * FROM student WHERE english = NULL;
SELECT * FROM student WHERE english IS NULL;
--查詢英語成績不爲null
SELECT * FROM student WHERE english IS NOT NULL;
--查詢姓馬的有哪些
SELECT * FROM student WHERE NAME LIKE '马%';
--查詢姓名第二個字為化的人
SELECT * FROM student WHERE NAME LIKE "_化%";
--查詢姓名是3個字的人
SELECT * FROM student WHERE NAME LIKE '___';(三個“_”)
--查詢姓名中包含德的人
SELECT * FROM student WHERE NAME LIKE '%德%';