數(shù)據(jù)庫可能會考的題目
1跋破、數(shù)據(jù)庫和數(shù)據(jù)庫管理系統(tǒng)之間的關系帆竹?
數(shù)據(jù)庫:存儲目胡,維護和管理數(shù)據(jù)的集合
數(shù)據(jù)庫管理系統(tǒng):其實就是數(shù)據(jù)庫管理軟件,通過它可以進行數(shù)據(jù)庫的管理和維護工作
2源织、sql 語言分類
DDL 數(shù)據(jù)定義語言 庫 表結構
DML 數(shù)據(jù)操作語言 數(shù)據(jù)增刪改
DQL 數(shù)據(jù)查詢語言 數(shù)據(jù)查詢
DCL 數(shù)據(jù)控制語言
3翩伪、庫層的增刪改查
創(chuàng)建庫 create database 數(shù)據(jù)庫名 default charset=utf8;
刪除庫 drop database 數(shù)據(jù)庫名;
修改庫字符集 alter database 數(shù)據(jù)庫名 default charset=utf8;
查看庫 show databases;
查看建庫語句 show create database 數(shù)據(jù)庫名谈息;
查看當前使用的數(shù)據(jù)庫 select database();
切換進入數(shù)據(jù)庫 use database
4缘屹、表結構層的增刪改查
-
創(chuàng)建表create table 表名(
? 字段名1 類型 限制,(primary key auto_increment)
? 字段名2 類型 限制侠仇,
? ...
? 復合主鍵可以放在這primary key(字段轻姿,字段)
)engine=innodb default charset=utf8;
primary key 主鍵 不允許有重復值,不允許為空
auto_increment 自增長犁珠,只對int型主鍵起作用
刪除表 drop table 表名;
-
改表
修改表名 alter table 表名 rename 新表名
修改字段數(shù)據(jù)類型 alter table 表名 modify 字段名 類型 [限制]
修改字段名和類型 alter table 表名 change [column] 舊字段名 新字段名 類型 [限制];
增加字段 alter table 表名 add [column] 字段名 類型 [限制];
刪除字段 alter table 表名 drop [column] 字段名;
修改字段的排列位置 alter table 表名 modify 字段1 數(shù)據(jù)類型 first|after 字段2
查看表結構 desc 表名互亮;
查看建表語句 show create table 表名犁享;
5、表數(shù)據(jù)層的增刪改查
-
增 insert
insert into 表名(字段1豹休,字段2...) values(值1,值2...); insert into 表名 values(值1,值2...); insert into 表名(字段1炊昆,字段2...) values(值1,值2...), (值1,值2...), (值1,值2...)....
-
刪 delete和truncate
delete from 表名 where 條件;#如果不加條件威根,會刪除表中所有數(shù)據(jù),慎重使用
truncate table 表名,清空表中所有記錄窑眯,等價于delete from 表名;
delete和truncate差別医窿,truncate后磅甩,表中自增主鍵值從1開始
-
改 update
update 表名 set 字段1=值1,字段2=值2... where 條件 #不加where修改的是所有的記錄
-
查 select
select 字段 from 表名 [ where 條件 、 group by 姥卢、having 卷要、 order by 、limit ]- 單表常規(guī)查詢
- 單表子查詢
- 多表查詢 隱式連接(標準sql)和 顯示內(nèi)連接 join on
- 表自身連接
- 外鏈接 左連接和右連接
- 查詢合并操作(只支持查詢結果的并集)
6独榴、事務
7僧叉、索引
- 創(chuàng)建索引
普通索引 create index 索引名 on 表名(字段 asc/desc) 默認asc升序
唯一索引 create unique index 索引名 on 表名(字段 asc/desc) 默認asc升序 (或修改字段限制為unique)
主鍵索引 主鍵字段自帶
全文索引 create FULLTEXT index 索引名 on 表名(字段 asc/desc) - 刪除索引 drop index 索引名 on 表
- 查看索引 show index from 表 \G(;)
通過修改字段的方式添加索引:
alter table 表 add index(字段1,字段2,...)
alter table 表 add primary key(字段1,字段2,...)
alter table 表 add unique(字段1,字段2,...)
alter table 表 add fulltext(字段1,字段2,...)
8棺榔、外鍵
如果表A的主關鍵字是表B中的字段瓶堕,則該字段稱為表B的外鍵,表A稱為主表症歇,表B稱為從表郎笆。
添加外鍵:
create table score1( score int, courseid int,stuid varchar(10), constraint stu_sco_id foreign key(stuid) references student(stuid) );
alter table score2 add constraint stu_sco_id foreign key(stuid) references student(stuid);
刪除外鍵:
ALTER TABLE 從表 DROP FOREIGN KEY 外鍵名
9、備份與恢復
shell下備份 mysqldump -u root -p 數(shù)據(jù)庫名>生成sql腳本的路徑
mysql下恢復 創(chuàng)建空數(shù)據(jù)庫 -> use 庫 -> source /home/rock/Desktop/mydb1.sql;
或者 創(chuàng)建空數(shù)據(jù)庫 -> mysql -uroot –p 數(shù)據(jù)庫名 < ~/備份文件.sql
10忘晤、pymysql 操作mysql的通用步驟
import pymysql
# 連接數(shù)據(jù)庫
conn = pymysql.connect('localhost', 'user', 'password', 'db')
# 創(chuàng)建游標
cursor = conn.cursor()
# 定制sql語句
sql = '增刪改查語句宛蚓,mysql怎么寫這里怎么寫'
# 操作表數(shù)據(jù)第一種情況是需要執(zhí)行事務的增刪改寫法
try:
cursor.execute(sql)
conn.commit() # 如果全部執(zhí)行成功,提交事務
except Exception as e:
print(e)
conn.rollback() # 失敗回滾
# 操作表數(shù)據(jù)第二種情況是不需要執(zhí)行事務的查詢寫法
# 執(zhí)行sql語句设塔,獲取結果集
cursor.execute(sql)
res = cursor.fetchone() # res = cursor.fetchall()
# 關閉游標
cursor.close()
# 關閉數(shù)據(jù)庫
conn.close()
11凄吏、char和varchar的區(qū)別:
- char的執(zhí)行效率高于varchar ,varchar 相對于 char 節(jié)省存儲空間
- 如果使用char 傳入的數(shù)據(jù)的長度 小于指定的長度的時候 存儲的實際長度 不夠的會拿空格來填充
- 如果使用 varchar 傳入的數(shù)據(jù)的長度 小于指定的長度的時候 存儲的實際長度 為傳進來的數(shù)據(jù)的長度
12闰蛔、數(shù)據(jù)庫引擎痕钢,其中 myisam和innodb的區(qū)別:
myisam查詢速度快,不支持事務序六、不支持外鍵任连、支持表鎖
innodb增刪改效率高,支持事務难咕、支持外鍵课梳,支持行鎖
13距辆、事務的四大特征ACID
原子性(Atomicity余佃,或稱不可分割性)暮刃、
一致性(Consistency)、
隔離性(Isolation爆土,又稱獨立性)椭懊、
持久性(Durability)。
原子性:
一個事務(transaction)中的所有操作步势,要么全部完成氧猬,要么全部不完成,不會結束在中間某個環(huán)節(jié)坏瘩。事務在執(zhí)行過程中發(fā)生錯誤盅抚,會被回滾(Rollback)到事務開始前的狀態(tài),就像這個事務從來沒有執(zhí)行過一樣倔矾。
一致性:
在事務開始之前和事務結束以后妄均,數(shù)據(jù)庫的完整性沒有被破壞。這表示寫入的資料必須完全符合所有的預設規(guī)則哪自,這包含資料的精確度丰包、串聯(lián)性以及后續(xù)數(shù)據(jù)庫可以自發(fā)性地完成預定的工作。
隔離性:
數(shù)據(jù)庫允許多個并發(fā)事務同時對其數(shù)據(jù)進行讀寫和修改的能力壤巷,隔離性可以防止多個事務并發(fā)執(zhí)行時由于交叉執(zhí)行而導致數(shù)據(jù)的不一致邑彪。事務隔離分為不同級別,包括讀未提交(Read uncommitted)胧华、讀提交(read committed)寄症、可重復讀(repeatable read)和串行化(Serializable)。
持久性:
事務處理結束后矩动,對數(shù)據(jù)的修改就是永久的瘸爽,即便系統(tǒng)故障也不會丟失。
14铅忿、事務的流程
執(zhí)行開始事務命令后,下面將進入事務模式. start transaction剪决、begin
sql語句下 update、delete檀训、insert 需要事務
1在事務執(zhí)行完成后,確認執(zhí)行無誤且成功,就可以使用commit把內(nèi)存中執(zhí)行的結果,提交到物理內(nèi)存中
2如果在事務執(zhí)行過程中,發(fā)生了錯誤,則可以使用rollback命令回滾到上一個事務操作