資料庫 1. 資料庫伺服器:運行資料庫管理軟體的電腦 2. 資料庫管理軟體:mysql,oracle,db2,sqlserver 3. 庫:文件夾 4. 表:文件 5. 記錄:食物一系列典型的特征 6. 數據:描述事物特征的符號 資料庫的分類: 關係型:sqllite,db2,oracle,acc ...
資料庫
- 資料庫伺服器:運行資料庫管理軟體的電腦
- 資料庫管理軟體:mysql,oracle,db2,sqlserver
- 庫:文件夾
- 表:文件
- 記錄:食物一系列典型的特征
- 數據:描述事物特征的符號
- 資料庫的分類:
- 關係型:sqllite,db2,oracle,access,sqlserver,mysql,關係型資料庫需要有表結構
- 非關係型:mongodb,redis,memcache:key-vavle結構存儲
- 統一字元編碼
- utf-8
- 初識SQL語句
- DDL語句:
- DML語句:
- DCL語句:
- 操作文件夾(庫)
- 增:create database db1 charset utf-8;
- 查:show create database db1;查看所有show databases;
- 改:alter database db1 charset gbk;
- 刪:drop database db1;
- 操作文件(表)
- 切換文件夾: use db1;
- 查看當前所在文件夾:select database;
- 增:create table t1(id int,name char);
- 查:show create table t1;查看所有表:show tables;desc t1;
- 改:alter table t1 modify name char(6);
- 刪: drop database db1;
- 操作文件內容(記錄)
- 增:insert t1(id,name)values(1,'egon'),(2,'egon2');
- 查:select id,name from t1;(必須切換到當前庫目錄,否則需要增加庫首碼)
- 改:updata db1.t1 set name='SB';updata db1.t1 set name='ALEX' where id=1;
- 刪:delete from t1;delete from t1 where id =2;
- 操作文件夾(庫)
庫操作:
- 語法:
create database 資料庫名charset utf8;
表操作:
- 存儲引擎就是存儲表的類型,查看mysql支持的存儲引擎:show engines;
- 指定表類型/存儲引擎
create table t1(id int)engine=innodb;
create table t2(id int)engine=memory;
- 增
語法:
create table 表名(欄位名 類型[()])
...
數據類型
* 整數類型:
字元類型
枚舉類型和集合類型
約束條件not null 與default
* create table t1(id int(11)unsigned);在int確定數據類型後附加的約束條件
* not null:不能為空如果傳空了就是預設值default
* create table t2(
id int,
name char(6)
sex enum('male','female')not null default 'male'
);
約束條件unique key:傳入的值是唯一的
* create table department(id int,name char(10) unique);
* create table department(id int,name char(10),unique(id),unique(name));
* 聯合唯一:create table services(id int,ip char(15),prot int,unique(id),unique(ipprot));
約束條件:primary key
* 約束:not null unique
* 存儲引擎(innodb):對於innodb存儲引擎來說,一張表內必須有一個主鍵
* 單列主鍵
* create table t17(id int primary key,name char(16));
* 複合主鍵
* create table t18(ip char(15),port int,primary key(ip,port));
約束條件auto_increment:自增
* create table t19(id int primary key auto_increment);在插入欄位的時候只需要插入數據,id會自增
* auto_increment步長與起始設置:
* 查看:show variables like 'auto_inc%'
* 設置步長:
* set session auto_increment_increment=5;
* set global auto_increment_increment=5;
* 設置起始偏移量:
* set global auto_increment_offset=3;
* 起始偏移量<=步長
* 使用delete表清空後,會記錄上次自增到什麼位置,再傳值的時候會從上次結束的地方開始
* 使用truncate清空表後不會出現上述情況
約束條件foreign key建立表之間的關係
* 先建被關聯的表,並且保證被關聯的欄位是唯一的,再建關聯的表
* create table dep(id int primary key,mame char(16),comment char(6));
* create table emp(id int primaty key,name char(10),sex enum('male','female'),dep_id int,foreign key(dep_id) references dep(id));
* 插入數據:
* 先往被關聯的表插入記錄
* 再往關聯表插入記錄
* 刪除數據:
* 先刪除關聯的數據
* 再刪除被關聯的數據
* 在建立關聯表時:在foreign ket加上 on delete cascade與on update cascade 沒有逗號
* 儘量不要去建立表關係,為了方便擴展儘量在邏輯層面去設計表關係
表關係之多對一
* 一個表的多條記錄對應另外一個表的一條記錄
表關係之多對多
* 一個表的一條記錄對應另一個表的多條記錄,並且另一個表的一條記錄對應一個表的多條記錄,解決方法是建立一個中間表,存放兩個表之間的表關係
表關係一對一
* 一一對應的關係
記錄的增刪該查
插入數據:
1. 插入完整數據(順序插入)
語法一:
INSERT INTO 表名(欄位1,欄位2,欄位3…欄位n) VALUES(值1,值2,值3…值n);
語法二:
INSERT INTO 表名 VALUES (值1,值2,值3…值n);
2. 指定欄位插入數據
語法:
INSERT INTO 表名(欄位1,欄位2,欄位3…) VALUES (值1,值2,值3…);
3. 插入多條記錄
語法:
INSERT INTO 表名 VALUES
(值1,值2,值3…值n),
(值1,值2,值3…值n),
(值1,值2,值3…值n);
4. 插入查詢結果
語法:
INSERT INTO 表名(欄位1,欄位2,欄位3…欄位n)
SELECT (欄位1,欄位2,欄位3…欄位n) FROM 表2
WHERE …;
更新數據
語法:
UPDATE 表名 SET
欄位1=值1,
欄位2=值2,
WHERE CONDITION;
示例:
UPDATE mysql.user SET password=password(‘123’)
where user=’root’ and host=’localhost’;
刪除數據
語法:
DELETE FROM 表名
WHERE CONITION;
示例:
DELETE FROM mysql.user
WHERE password=’’;
練習:
更新MySQL root用戶密碼為mysql123
刪除除從本地登錄的root用戶以外的所有用戶
單表查詢
#語法
SELECT 欄位1,欄位2... FROM 表名
WHERE 條件
GROUP BY field
HAVING 篩選
ORDER BY field
LIMIT 限制條數
關鍵字的執行優先順序:
from 找到表
where 拿著where指定的約束條件,去文件/表中取出一條條記錄
group by 將取出的一條條記錄進行分組group by,如果沒有group by 則整體作為一組
having 將分組的結果進行having過濾
select 執行select
distinct 去重
order by 將結果按條件排序
limit 限制結果的顯示條數
- where 約束:where字句中可以使用:
- 比較運算符:> < >= <= <> !=
- between 80 and 100 值在80到100之間
- in(80,90,100)值是80或90或100
- like 'engo%'
pattern可以是%或_,%表示任意多字元,_表示一個字元 - 邏輯運算符:在多個條件直接可以使用邏輯運算符 and or not