一.DBMS 是什么
DBMS(Database Management System),数据库管理系统,是一种操纵和管理 数据库的大型软件,用于建立、使用和维护数据库。对数据库进行统一的管理和 控制,以保证数据库的安全性和完整性。
二、实体和实体之间的关系有哪些,外键上应该如何体现
一对一:外键字段放在使用频率高的表上,比如一个用户对应一个病人信息, 一个病人对应一个用户
一对多:外键字段放在多的一方,比如一个班级对应多个学生
多对多:建在关系表中,比如一个学生可以选择多个课程,一个课程可以被 多个学生选择,学生和课程之间就是多对多
三、 数据库三大范式是怎么样的
第一范式: 每列保证原子性,属性不可分割,每个属性都是不可分割的原子项
第二范式: 首先满足第一范式; 必须要有一个主键; 如果主键是复合主键,除了主键以外的其他列必须完全依赖于主键列, 不能只依赖主键的一部分;
第三范式: 满足第二范式 除了主键以外的其他列必须直接依赖于主键,不能间接依赖于主键
四.什么样的列适合建立主键
-
选择尽量更新少的列作为主键,尽量选择没有业务含义的列作为主键
-
一个表只有一个主键约束,但主键约束可以使组合键,但组合键尽量少用
-
主键不能为 null
五、主键约束和唯一约束有什么区别
1.同一张表可以有多个唯一约束,但只能有一个主键;
2.主键字段不能为 null,但唯一约束可以为 null;
3.主键字段可以作为其他表的外键,但唯一约束字段不可以作为其他表的 外键。
六.TRUNCATE TABLE 和 delete from 有什么区别 1
1.语句格式: Delete From: Delete from 表名(where 条件); Truncate table:truncate table 表名;
2.删除表数据不同 Delete from:可以删除整张表数据或删除指定条件的记录行; Truncate table:只能删除整张表数据,不能删除指定的行;
3.释放空间不同
delete from:删除数据后,不会释放表所占用的内存空间,删除后可撤销,删除操作会做日志记录
Truncate table:删除数据后,会释放表占用的内存空间,删除后不可撤销,删除操作不会记录日志
4.执行速度不同 Delete from:速度慢 Truncate table:速度快
七、sql 语句的分类有哪些
1.DQL(数据查询语言)select
2.DML(数据库操作语言) insert、delete、update
3.DDL(数据库定义语言)创建数据库中的各种对象,创建删除修改表结构
4.DCL(数据控制语句)授予或回收访问数据库的某种特权,并控制数据库 操纵事务发生的时间及效果,对数据库进行实时监视
八、mysql 中,char 和 varchar 有什么区别(看笔记找答案)
1.场景区别:char适合存放定长字符串,varchar存放长度可变的字符串
2.后面的数字:字符个数,char后面最多可以写到255,
varchar:一行数据最多占65535个字节(除去Bolb类的数据类型)
除去其他列所占的空间,剩余的空间和varchar后面写的字符个数有关系,编码不同,一个字符 所占用的存储空间也不一样,所以也会影响varchar后字符个数
3.char是固定长度,char(5),如果存放了3个字符,也会按照5个字符占用存储空间
varchar(5):可变长度,如果存储了3个字符,会按照3个字符占用存储空间。
4.速度区别:char优于varchar
5.空格的处理:char会消灭掉字符后自己插入的空格,varchar不会
九.mysql 中,dataTime 和 timestamp 有什么区别
相同点:存储格式相同 datetime 和 timestamp 两者的时间格式都是 YYYY-MMDD HH:MM:SS
不同点:存储范围不同,datetime 的范围是 1000-01-01 到 9999-12-31,而 timestamp 是从 1970-01-01 到 2038-01-19,即后者的时间范围很小。
与时区关系:datetime 是存储服务器当前的时区,而 timestamp 类型,是将服务 器当前时间转换为 UTC(世界时间)来存储,即 datetime 与时区无关,存什么, 返回什么,而 timestamp 存储的时间,返回的时间会随着数据库的时区不同而 发生改变。
九.mysql 中,enum 和 set 有什么区别
enum和set的区别:enum只能从列出来的值中选择一个作为数据,set可以从列出来的值中选择多个值作为数据
十、mysql 中的这些函数,能说出来一些
select if(1>2,2,3)
select ifnull(title,0) from book
#如果两个表达式补相等,返回表达式1,否则返回null
select nullif('abc','abc1')
#将参数进行连接(必然会使用)
select concat('a','*','b')
select concat(title,',',type,',',bookid) from book
#第一个参数为分隔符
select CONCAT_WS('*',title,type,bookid) from book
#字符串截取,索引从1开始(字符串,开始位置,长度)
select substring('abcde',2,2)
#去掉字符串收尾的空格
select trim(' bcde ')
create table test4(
t_id int primary key auto_increment,
t_name varchar(20)
)
insert into test4(t_name)values("amdin")
#返回最后一次插入的自增列的值(非常实用)
select LAST_INSERT_ID()
select CURDATE()
select CURRENT_DATE()
select CURTIME()
select CURRENT_TIME()
SELECT NOW()
select DATE_ADD(NOW(),INTERVAL -6 MONTH);
select DATE_ADD(CURRENT_DATE,INTERVAL 6 DAY);
select DATE_ADD(CURRENT_DATE,INTERVAL 6 HOUR);
select DATE_ADD(CURRENT_DATE,INTERVAL 6 YEAR);
select DATE_ADD(now(),INTERVAL 6 MINUTE);
select DATE_ADD(now(),INTERVAL 6 SECOND);
select DATE_ADD(CURRENT_DATE,INTERVAL 6 WEEK);
SELECT DATE_SUB(CURRENT_DATE,INTERVAL -6 MONTH);
SELECT MONTH(now()) 获取时间的月份
SELECT year(now()) 获取时间的年份
#y代表两MONTH(NO)位年份 Y代表4位年份 h代表12小时制 H代表24小时制
select DATE_FORMAT(CURRENT_TIMESTAMP(),'%y/%m/%d %h:%i:%s')
select DATE_FORMAT(CURRENT_TIMESTAMP(),'%Y/%m/%d %H:%i:%s')
十一、mysql 中的自然连接是怎么会事情,举个例子说明下 natural join
自然连接 条件:两张连接的表中作为联合条件的列的列名称和类型完全一致
create table bookType(
type_id int auto_increment primary key,
type_name varchar(20)
)
create table books(
book_id int auto_increment primary key,
book_name varchar(20),
type_id INT,
foreign key(type_id) REFERENCES bookType(type_id)
)
select * from bookType
insert into bookType(type_name)values('计算机类'),('文学类')
insert into books(book_name,type_id)values('JAVA基础',1),('JAVA编程思想',1),
('西游记',2),('三国演义',2)
insert into books(book_name,type_id)values('JAVA基础',null)
#自然连接,条件:需要联合条件所涉及的列的列名需要一样
#自然内连接
select * from books NATURAL join bookType
#自然左连接
select * from books NATURAL left join bookType
#自然右连接
select * from books NATURAL right join bookType
#交叉连接
select * from books cross join bookType on books.type_id=bookType.type_id