存储过程和函数
1.什么是存储过程? 优缺点都有什么?
存储过程是预编译的 SQL 语句。 优点是允许模块化设计,即只需要创建一次,以后可以在程序中多次调用。 如果一个操作需要执行多个SQL,使用存储过程比纯SQL语句更快。
优势
缺点
扳机
1.什么是触发器? 触发器的使用场景有哪些?
触发器是用户在关系表上定义的特殊事件驱动存储过程。 触发器是当事件被触发时自动执行的一段代码。
使用场景
通过数据库中的相关表可以实现级联更改。 实时监控表中某个字段的变化需要进行相应的处理。 例如,可以生成一些商业号码。 注意不要滥用它,否则会给数据库和应用程序的维护带来困难。
需要牢记以上基础知识点,重点是要了解数据类型CHAR和CHAR的区别,以及表存储引擎和CHAR的区别。
2. MySQL中有哪些触发器?
MySQL数据库中有六种类型的触发器:
常用的SQL语句
1. SQL语句主要有哪些类型?
①数据定义语言DDL(Data)、DROP、ALTER。 上述操作主要是对逻辑结构的操作,包括表结构、视图和索引。
②数据查询语言DQL(Data Query)。 这个比较容易理解,就是根据关键字进行查询操作。 各种简单查询、连接查询等都属于DQL。
③数据操作语言DML(Data),,。 主要是针对上面的操作,即对数据进行操作。 对应上面提到的查询操作,DQL和DML共同构造了大多数初级程序员常用的增删改查操作。 查询是一种特殊的查询,分为DQL。
④ 数据控制函数DCL(数据)GRANT,,,。 主要原因是上述操作对数据库的安全性和完整性都有操作,可以简单理解为权限控制。
2. 什么是超级键、候选键、主键和外键?
①超键:能够唯一标识关系中元组的属性集,称为关系模式的超键。 一个属性可以作为超级键,多个属性的组合也可以作为超级键。 超级键包括候选键和主键。
②候选键:是最小的超级键,即没有冗余元素的超级键。
③主键:唯一、完整地标识数据库表中存储的数据对象的数据列或属性的组合。 一个数据列只能有一个主键,并且主键的值不能缺失,即不能为空值(Null)。
④外键:一个表中存在的另一表的主键称为该表的外键。
3. SQL 约束有哪些类型?
四到六个相关查询
SELECT * FROM A,B(,C)或者SELECT * FROM A CROSS JOIN B (CROSS JOIN C)#没有任何关联条件,结果是笛卡尔积,结果集会很大,没有意义,很少使用内连接(INNER JOIN)SELECT * FROM A,B WHERE A.id=B.id或者SELECT * FROM A INNER JOIN B ON A.id=B.id多表中同时符合某种条件的数据记录的集合,INNER JOIN可以缩写为JOIN
1.内部连接分为三类
2. 外连接(LEFT JOIN/RIGHT JOIN)
3.联合查询(UNION和UNION ALL)
SELECT * FROM A UNION SELECT * FROM B UNION ...
4.全连接(FULL JOIN)
SELECT * FROM A LEFT JOIN B ON A.id=B.id UNIonSELECT * FROM A RIGHT JOIN B ON A.id=B.id
5. 表连接面试问题
有2个表,1个R和1个S,R表有三列ABC,S表有两个CD列,每个表有3条记录。
R表
稳定的
交叉连接(笛卡尔积):
select r.*,s.* from r,s
内连接结果:
select r.*,s.* from r inner join s on r.c=s.c
左连接结果:
select r.*,s.* from r left join s on r.c=s.c
右连接结果:
select r.*,s.* from r right join s on r.c=s.c
全表连接的结果(MySql不支持,但支持):
select r.*,s.* from r full join s on r.c=s.c
5.什么是子查询?
六、子查询的三种情况
1、子查询为单行单列时:结果集为值,父查询使用:=等运算符
-- 查询工资最高的员工是谁?
select * from employee where salary=(select max(salary) from employee);
2、子查询是多行单列情况:结果集类似数组,父查询使用:in运算符
-- 查询工资最高的员工是谁?
select * from employee where salary=(select max(salary) from employee);
3、子查询多行多列:结果集类似于虚拟表,不能用在where条件中,而是在子句中作为子表使用
-- 1) 查询出2011年以后入职的员工信息
-- 2) 查询所有的部门信息,与上面的虚拟表中的信息比对,找出所有部门ID相等的员工。
select * from dept d, (select * from employee where join_date > '2011-1-1') e where e.dept_id = d.id;
-- 使用表连接:
select d.*, e.* from dept d inner join employee e on d.id = e.dept_id where e.join_date > '2011-1-1'
7.in和mysql的区别
mysql中的in语句是在外表和内表之间进行哈希连接,该语句是在外表上进行循环循环,然后在每个循环循环后查询内表。 大家一直认为它比in语句效率更高,但这种说法其实是不准确的。 这是为了区分环境。
八、与char的区别
炭化特性
特别的
总之,结合性能(char更快)和节省磁盘空间(更小),针对特定情况专门设计数据库是合适的。
9.(50)中50的含义
最多存储50个字符,(50)和(200)为hello存储相同的空间,但后者在排序时会消耗更多的内存,因为order by col使用了col长度的计算(引擎是相同的)。 在早期的MySQL版本中,50代表字节数,现在它代表字符数。
10. int(20)中20的含义
指显示字符的长度。 20表示最大显示宽度为20,但仍占用4字节存储,存储范围不变; 不影响内部存储,只影响有定义的int,前面加多少个0,方便报表显示。
11、mysql为什么要这样设计
对大多数应用程序来说没有意义,只是指定一些工具使用的字符数; int(1)和int(20)的存储和计算相同;
12、mysql中int(10)和char(10)和(10)的区别
1、int(10)中的10表示显示数据的长度,而不是存储数据的大小; 图(10)和(10)中的10表示存储数据的大小,即存储了多少个字符。
2、char(10)表示存储10个固定长度的字符,如果少于10个字符用空格填充,则占用较多的存储空间。
3、(10)表示存储10个变长字符,存储多少个,空格也按1个字符存储,与char(10)的空格不同,它代表占位符不算作一个人物。
13.FLOAT和FLOAT有什么区别?
FLOAT类型数据最多可存储8位十进制数,占用内存4个字节。
类型数据最多可存储18位十进制数字,占用内存8个字节。
14. drop 和 和有什么不一样?
三个都是删除的意思,但是三者之间也有一些区别:
因此,当不再需要表时,使用drop; 当你想删除一些数据行时使用它; 当您想在保留表的同时删除所有数据时使用它。
15. UNION 和 UNION ALL 有什么区别?
如果使用 UNION ALL,则不会合并重复行
UNION 效率高于 UNION ALL