数据库可能会考的题目
1、数据库和数据库管理系统之间的关系?
数据库:存储,维护和管理数据的集合
数据库管理系统:其实就是数据库管理软件,通过它可以进行数据库的管理和维护工作
2、sql 语言分类
DDL 数据定义语言 库 表结构
DML 数据操作语言 数据增删改
DQL 数据查询语言 数据查询
DCL 数据控制语言
3、库层的增删改查
创建库 create database 数据库名 default charset=utf8;
删除库 drop database 数据库名;
修改库字符集 alter database 数据库名 default charset=utf8;
查看库 show databases;
查看建库语句 show create database 数据库名;
查看当前使用的数据库 select database();
切换进入数据库 use database
4、表结构层的增删改查
-
创建表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 新表名
-
修改字段数据类型 alter table 表名 modify 字段名 类型 [限制]
-
修改字段名和类型 alter table 表名 change [column] 旧字段名 新字段名 类型 [限制];
-
增加字段 alter table 表名 add [column] 字段名 类型 [限制];
-
删除字段 alter table 表名 drop [column] 字段名;
-
修改字段的排列位置 alter table 表名 modify 字段1 数据类型 first|after 字段2
-
-
查看表结构 desc 表名;
-
查看建表语句 show create table 表名;
5、表数据层的增删改查
-
增 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 条件;#如果不加条件,会删除表中所有数据,慎重使用
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 ]- 单表常规查询
- 单表子查询
- 多表查询 隐式连接(标准sql)和 显示内连接 join on
- 表自身连接
- 外链接 左连接和右连接
- 查询合并操作(只支持查询结果的并集)
6、事务
7、索引
- 创建索引
普通索引 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 数据库名>生成sql脚本的路径
mysql下恢复 创建空数据库 -> use 库 -> source /home/rock/Desktop/mydb1.sql;
或者 创建空数据库 -> mysql -uroot –p 数据库名 < ~/备份文件.sql
10、pymysql 操作mysql的通用步骤
import pymysql
# 连接数据库
conn = pymysql.connect('localhost', 'user', 'password', 'db')
# 创建游标
cursor = conn.cursor()
# 定制sql语句
sql = '增删改查语句,mysql怎么写这里怎么写'
# 操作表数据第一种情况是需要执行事务的增删改写法
try:
cursor.execute(sql)
conn.commit() # 如果全部执行成功,提交事务
except Exception as e:
print(e)
conn.rollback() # 失败回滚
# 操作表数据第二种情况是不需要执行事务的查询写法
# 执行sql语句,获取结果集
cursor.execute(sql)
res = cursor.fetchone() # res = cursor.fetchall()
# 关闭游标
cursor.close()
# 关闭数据库
conn.close()
11、char和varchar的区别:
- char的执行效率高于varchar ,varchar 相对于 char 节省存储空间
- 如果使用char 传入的数据的长度 小于指定的长度的时候 存储的实际长度 不够的会拿空格来填充
- 如果使用 varchar 传入的数据的长度 小于指定的长度的时候 存储的实际长度 为传进来的数据的长度
12、数据库引擎,其中 myisam和innodb的区别:
-
myisam查询速度快,不支持事务、不支持外键、支持表锁
-
innodb增删改效率高,支持事务、支持外键,支持行锁
13、事务的四大特征ACID
原子性(Atomicity,或称不可分割性)、
一致性(Consistency)、
隔离性(Isolation,又称独立性)、
持久性(Durability)。
原子性:
一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
一致性:
在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
隔离性:
数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
持久性:
事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
14、事务的流程
执行开始事务命令后,下面将进入事务模式. start transaction、begin
sql语句下 update、delete、insert 需要事务
1在事务执行完成后,确认执行无误且成功,就可以使用commit把内存中执行的结果,提交到物理内存中
2如果在事务执行过程中,发生了错误,则可以使用rollback命令回滚到上一个事务操作
网友评论