數據庫的基本概念
-
數據庫的英文單詞: DataBase 簡稱 : DB
-
什麼是數據庫?
- 用於存儲和管理數據的倉庫。
-
數據庫的特點:
- 持久化存儲數據的。其實數據庫就是一個文件系統
- 方便存儲和管理數據
- 使用了統一的方式操作數據庫 – SQL
MySQL數據庫軟件
安裝
略
卸載(安裝版)
- 去mysql的安裝目錄找到
my.ini
文件- 複製
datadir
="C:/ProgramData/MySQL/MySQL Server 5.7/Data/"
- 複製
- 卸載MySQL
- 刪除
C:/ProgramData
目錄下的MySQL
文件夾。
配置
MySQL服務啓動
- 手動。
cmd
-->services.msc
打開服務的窗口- 使用管理員打開
cmd
net start mysql
: 啓動mysql的服務net stop mysql
:關閉mysql服務
MySQL登錄
mysql -uroot -p密碼
mysql -hip -uroot -p連接目標的密碼
mysql --host=ip --user=root --password=連接目標的密碼
MySQL退出
exit
quit
MySQL目錄結構
- MySQL安裝目錄:
basedir="D:/develop/MySQL/"
- 配置文件
my.ini
- 配置文件
- MySQL數據目錄:
datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"
- 幾個概念
- 數據庫:文件夾
- 表:文件
- 數據:數據
- 幾個概念
SQL
什麼是SQL?
Structured Query Language:結構化查詢語言
其實就是定義了操作所有關係型數據庫的規則。每一種數據庫操作的方式存在不一樣的地方,稱爲“方言”。
SQL通用語法
- SQL 語句可以單行或多行書寫,以分號結尾。
- 可使用空格和縮進來增強語句的可讀性。
- MySQL 數據庫的 SQL 語句不區分大小寫,關鍵字建議使用大寫。
- 3 種註釋
- 單行註釋: – 註釋內容 或 # 註釋內容(mysql 特有)
- 多行註釋: /* 註釋 */
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 等
1. DDL:操作數據庫、表
1.1 操作數據庫:CRUD
C(Create):創建
-
創建數據庫:
create database 數據庫名稱;
-
創建數據庫,判斷不存在,再創建:
create database if not exists 數據庫名稱;
-
創建數據庫,並指定字符集
create database 數據庫名稱 character set 字符集名;
-
練習: 創建db4數據庫,判斷是否存在,並制定字符集爲utf8(沒有-)
create database if not exists db4 character set utf8;
R(Retrieve):查詢
-
查詢所有數據庫的名稱:
show databases;
-
查詢某個數據庫的字符集:查詢某個數據庫的創建語句
show create database 數據庫名稱;
U(Update):修改
-
修改數據庫的字符集
alter database 數據庫名稱 character set 字符集名稱;
D(Delete):刪除
-
刪除數據庫
drop database 數據庫名稱;
-
判斷數據庫存在,存在再刪除
drop database if exists 數據庫名稱;
使用數據庫
-
查詢當前正在使用的數據庫名稱
select database();
-
使用數據庫
use 數據庫名稱;
1.2 操作表
C(Create):創建
基本語法:
create table 表名(
列名1 數據類型1 [完整約束條件],
列名2 數據類型2 [完整約束條件],
...
列名n 數據類型n [完整約束條件]
);
# 注意:最後一列,不需要加逗號(,)
補充1:常用的數據庫類型:
-
int
:整數類型age int
-
double
: 小數類型score double(5,2)
-
date
: 日期,只包含年月日,yyyy-MM-dd
-
datetime
: 日期,包含年月日時分秒yyyy-MM-dd HH:mm:ss
-
timestamp
: 時間戳類型 包含年月日時分秒yyyy-MM-dd HH:mm:ss
- 如果將來不給這個字段賦值,或賦值爲null,則默認使用當前的系統時間,來自動賦值
-
varchar
:字符串-
name varchar(20):姓名最大20個字符
exam:
zhangsan 8個字符 張三 2個字符
-
補充2:完整性約束條件
約束條件 | 說明 |
---|---|
PRIMARY KEY | 標識該屬性爲該表的主鍵,可以唯一的標識對應的元組 |
FOREIGN KEY | 標識該屬性爲該表的外鍵,是與之聯繫某表的主鍵 |
NOT NULL | 標識該屬性不能爲空 |
UNIQUE | 標識該屬性的值是唯一的 |
AUTO_INCREMENT | 標識該屬性的值是自動增加,這是MySQL的SQL語句的特色 |
DEFAULT | 爲該屬性設置默認值 |
Exam:
create table student(
id int PRIMARY KEY NOT NULL AUTO_INCREMENT, -- 設置主鍵,非空,自動遞增
name varchar(32) NOT NULL, --設置姓名非空
age int DEFAULT 0, --設置年齡的默認值爲0
score double(4,1),
birthday date,
insert_time timestamp
--註釋:也可以在最後指定表的主鍵:PRIMARY KEY(id)
);
複製表:
create table 表名 like 被複制的表名;
R(Retrieve):查詢
-
查詢某個數據庫中所有的表名稱
show tables;
-
查詢表結構
desc 表名;
U(Update):修改
-
修改表名
alter table 表名 rename to 新的表名;
-
修改表的字符集
alter table 表名 character set 字符集名稱; # 查看錶的字符集 show create table 表名;
-
添加一列
alter table 表名 add 列名 數據類型 [完整性約束]; #[爲可選項]
-
修改列名稱 類型
alter table 表名 change 列名 新列名 新數據類型; alter table 表名 modify 列名 新數據類型;
-
刪除列
alter table 表名 drop 列名;
D(Delete):刪除
drop table 表名;
drop table if exists 表名 ;
2. DML:增刪改表中數據
添加數據:
-
語法:
insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);
-
注意:
- 列名和值要一一對應。
- 如果表名後,不定義列名,則默認給所有列添加值
insert into 表名 values(值1,值2,...值n);
- 除了數字類型,其他類型需要使用引號(單雙都可以)引起來
刪除數據:
-
語法:
delete from 表名 [where 條件]
-
注意:
-
如果不加條件,則刪除表中所有記錄。
-
如果要刪除所有記錄
--1. 不推薦使用。有多少條記錄就會執行多少次刪除操作 delete from 表名; --2. 推薦使用,效率更高 先刪除表,然後再創建一張一樣的表。 TRUNCATE TABLE 表名;
-
修改數據:
-
語法:
update 表名 set 列名1 = 值1, 列名2 = 值2,... [where 條件];
-
注意:如果不加任何條件,則會將表中所有記錄全部修改。
3. DQL:查詢表中的記錄
select * from 表名;
基本語法:
select
字段列表
from
表名列表
where
條件列表
group by
分組字段
having
分組之後的條件
order by
排序
limit
分頁限定
基礎查詢
-
多個字段的查詢
select 字段名1,字段名2, ..., 字段名n from 表名;
- 注意:如果查詢所有字段,則可以使用*來替代字段列表。
-
去除重複:
select distinct 字段名 from 表名;
-
計算列
- 一般可以使用四則運算計算一些列的值。(一般只會進行數值型的計算)
- ifnull(表達式1,表達式2):null參與的運算,計算結果都爲null
- 表達式1:值可能爲null的字段
- 當字段爲null時的默認值。
-
起別名:
- as:as也可以省略
select 字段名 as 別名 from 表名;
條件查詢
where子句後跟條件
補充3:運算符
- 補充:比較運算符
運算符 | 表達式的形式 | 作用 |
---|---|---|
= | a=b | 判斷a是否等於b |
<>或!= | a<>b 或 a!=b | 判斷a是否不等於b |
<=> | 嚴格比較兩個NULL值是否相等 | 兩個操作碼均爲NULL時,其所得值爲1;而當一個操作碼爲NULL時,其所得值爲0判斷a時候等於b |
> | a>b | 判斷是否a大於b |
>= | a>=b | 判斷a是否大於等於b |
< | a<b | 判斷a是否小於b |
<= | a<=b | 判斷a是否小於等於b |
IS NULL | a IS NULL | 判斷a是否等於NULL |
IS NOT NULL | a IS NOT NULL | 判斷a是否不等於NULL |
BETWEEN AND | x BETWEEN a and b | 判斷a的取值是否在a和b之間 |
IN | a IN(值1,值2,…,值n) | 判斷a的取值是否爲值1到值n中的一個 |
LIKE | a LIKE 表達式 | 判斷a是否匹配表達式 |
REGEXP | a REGEXP 正則表達式 | 判斷a是否匹配正則表達式 |
說明:LIKE:模糊查詢
- 佔位符:
_
:單個任意字符%
:多個任意字符
-
補充:邏輯運算符
and
或&&
or
或||
not
或!
示例:
-- 查詢年齡大於/大於等於20歲
SELECT * FROM student WHERE age > 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 20 AND 30;
-- 查詢年齡22歲,18歲,25歲的信息
SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25
SELECT * FROM student WHERE age IN (22,18,25);
-- 查詢英語成績爲null
SELECT * FROM student WHERE english = NULL; -- 不對的。null值不能使用 = (!=) 判斷
SELECT * FROM student WHERE english IS NULL;
-- 查詢英語成績不爲null
SELECT * FROM student WHERE english IS NOT NULL;
-- 查詢姓馬的有哪些? like
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 '%德%';