MySQL基础问答

1.常见的数据库对象?
①表(table):表是存储数据的逻辑单元,以行和列的形式存在;列是字段,行是记录。
②数据字典:就是系统表,存放数据库相关信息的表。系统表里的数据通常由数据库系统维护,程序员通常不应该手动修改系统表及系统表数据,只可查看系统表数据。
③约束(constraints):执行数据校验的规则,用于保证数据完整性的规则。
④视图(view):一个或多个数据表里数据的逻辑显示。视图并不存储数据。
⑤索引(index):用于提高查询性能,相当于书的目录。
⑥函数(function):用于完成一次特定的计算,具有一个返回值。
⑦存储过程(procedure):用于完成一次完整的业务处理,没有返回值,但可通过传出参数将多个值传给调用环境。
⑧触发器(trigger):相当于一个事件监听器,当数据库发生特定事件后,触发器被触发,完成相应的处理。

2.大部分数据库支持哪5种完整性约束?(MySQL不支持CHECK)
①NOT NULL:非空约束,指定某列不能为空。(只能作为列级约束使用)
②UNIQUE:唯一约束,指定某列或几列组合不能重复。(NULL不等于NULL)
③PRIMARY KEY:主键,指定该列的值可以唯一地标识该条记录。(MySQL总是将所有的主键约束命名为PRIMARY)
④FOREIGN KEY:外键,指定该行记录从属于主表的一条记录,主要用于保证参照完整性。(MySQL中只能使用表级约束语法才会使其生效)
⑤CHECK:检查,指定一个布尔表达式,用于指定对应列的值必须满足该表达式。
其中表级约束语法定义:[constraint 约束名] 约束定义。
外键定义语法:constraint table_name_ibfk_n foreign key(name_volumn) references name_table(name_volumn) //其中table_name为从表名字,n从1开始,name_table为主表名字。

3.MySQL的数据类型?
①串数据类型(常用CHAR和VARCHAR)
②数值数据类型(常用INT)
③日期和时间数据类型(常用DATETIME和TIMESTAMP)
④二进制数据类型(常用BLOB)

4.什么是聚集函数?
聚集函数(aggregate function)运行在行组上,计算和返回单个值的函数。
①AVG():返回某列的平均值
②COUNT():返回某列的行数
③MAX():返回某列的最大值
④MIN():返回某列的最小值
⑤SUM():返回某列值之和

5.标准的SQL语句通常分为如下几种类型?
①查询语句:主要由SELECT关键字完成,查询语句是SQL语句中最复杂、功能最丰富的语句。
②DML(Data Manipulation Language–数据操作语言)语句:主要由INSERT、DELETE和UPDATE三个关键字完成。
③DDL(Data Definition Language–数据定义语言)语句:主要由CREATE、ALTER、DROP和TRUNCATE四个关键字完成。
④DCL(Data Control Language–数据控制语言)语句:主要由GRANT(授予)和REVOKE(撤销)两个关键字完成。
⑤事务控制语句:主要由COMMIT、ROLLBACK和SAVEPOINT三个关键字完成。

6.由标准SQL语句的几种类型写出所有相关的常见SQL语法?

6.1 查询语句
6.1.1 SELECT用于从一个或多个表(视图)中检索数据。
SELECT name_column, …
FROM name_table, …
[LIMIT m OFFSET n] //从第n行出发(数据表从0行开始),查询出m行
[WHERE …] //查询条件,也可以使用联结
[UNION …] //联合多个SELECT语句
[GROUP BY …] //表明查询结果根据一列或多列进行分组——当一列或多列组合的值完全相同时,系统会把这些记录当成一组。
[HAVING …] //过滤分组
[ORDER BY …] //排序

6.2 DML语句
6.2.1 INSERT
6.2.1.1 INSERT用于向指定的数据表中插入一行。
INSERT INTO name_table[(name_columnN, …)]
VALUES(valueN, …);

6.2.1.2 INSERT SELECT用于向指定的数据表中插入SELECT的结果。
INSERT INTO name_table[(name_columnN, …)]
SELECT name_columnN, …
FROM name_table, …
[WHERE …];

6.2.2 DELETE FROM用于删除指定的数据表中的一行或多行。
DELETE FROM name_table
[WHERE …];

6.2.3 UPDATE 用于更新指定的数据表中的一行或多行。
UPDATE name_table
SET name_columnN = value, …
[WHERE …];

6.3 DDL语句
6.3.1 CREATE
6.3.1.1 CREATE TABLE 用于创建新数据表。
CREATE TABLE name_table
(
name_column1 datatype [NULL | NOT NULL] [DEFAULT value1_default] [CONSTRAINTS],
name_column2 datatype [NULL | NOT NULL] [DEFAULT value2_default] [CONSTRAINTS],
… //最后一行没”,”
);

6.3.1.2 CREATE INDEX 用于在一个或多个列上创建索引。
CREATE INDEX name_index
ON name_table (column [ASC|DESC] , …);

6.3.1.3 CREATE PROCEDURE用于创建存储过程。
CREATE PROCEDURE name_procedure([parameters])
BEGIN

END;

6.3.1.4 CREATE USER 用于向系统中添加新的用户账户。
CREATE USER username[@hostname]
[IDENTIFIED BY [PASSWORD] ‘password’];

6.3.1.5 CREATE VIEW 用于创建一个或多个表上的新视图。
CREATE [OR REPLACE] VIEW name_view
AS
SELECT …;

6.3.2 ALTER TABLE用来更新已存在表的模式。
ALTER TABLE name_table
(
ADD name_column datatype [NULL | NOT NULL] [CONSTRAINTS],
CHANGE old_name_column new_name_column datatype [NULL | NOT NULL] [CONSTRAINTS],
MODIFY name_column datatype [NULL | NOT NULL] [CONSTRAINTS],
DROP name_column,

);

6.3.3 DROP永久地删除数据库对象。
DROP DATABASE | INDEX | PROCEDURE | TABLE | TRIGGER | USER | VIEW
name_item;

6.3.4 TRUNCATE 删除原来的表并重新创建一个表,而不是逐行删除表中的数据。
TRUNCATE TABLE name_table;

6.4 DCL语句
6.4.1 GRANT(授权)
GRANT 权限1, … , 权限N ON name_database.* TO username@IP;
GRANT CREATE, ALTER, DROP, INSERT, DELETE, SELECT, UPDATE ON name_database.* TO username@IP;
GRANT ALL ON name_database.* TO username@IP;

6.4.2 REVOKE(撤销授权)
REVOKE 权限1, … , 权限N ON name_database.* FROM username@IP;
REVOKE CREATE, ALTER, DROP, INSERT, DELETE, SELECT, UPDATE ON name_database.* FROM username@IP;

6.5 事务控制语句
6.5.1 START TRANSACTION表示一个新的事务处理块的开始.
START TRANSACTION;

6.5.2 ROLLBACK用于撤销一个事务处理块。
ROLLBACK[TO SAVEPOINT];

6.5.3 SAVEPOINT为使用ROLLBACK语句设立保留点。
SAVEPOINT savepoint1;

6.5.4 COMMIT用于将事务处理写到数据库中。
COMMIT;

7.多表连接查询?
很多时候,需要选择的数据并不是来自一个表,而是来自多个数据表,这就需要使用多表连接查询。多表连接查询有两种规范:SQL92和SQL99。
7.1 SQL92规范支持如下几种多表连接查询
SELECT name_columnN, …
FROM name_tableN, …
[WHERE join_condition] //连接条件为两值相等则为等值连接,否则称为非等值连接;如果没有任何连接条件,则称为广义笛卡儿积。
①等值连接
②非等值连接
③外连接(MySQL不支持)
④广义笛卡尔积

7.2 SQL99规范提供了可读性更好的多表连接语法,并提供了更多类型的连接查询
①交叉连接(cross join):相当于SQL92中的广义笛卡儿积。
②自然连接(natural join):会以两个表中的同名列作为连接条件;如果两个表中没有同名列,则自然连接与交叉连接效果完全一样——因为没有连接条件。
③使用using子句的连接:用于显式指定两个表中的同名列作为连接条件。
④使用on子句的连接:SQL99语法的连接条件放在on子句中指定,而且每个on子句只指定一个连接条件。完全可以代替SQL92中的等值连接、非等值连接。
⑤全外连接(MySQL不支持全外连接)或左(left [outer] join)、右外连接(right [outer] join):SQL99左外连接将会把左边表中所有不满足连接条件的记录全部列出;SQL99右外连接将会把右边表中所有不满足连接条件的记录全部列出。SQL99的全外连接将会把两个表中所有不满足连接条件的记录全部列出.

8.用通配符进行过滤?
‘LIKE’为关键字。
‘%’表示任何字符出现任意次数。
‘_’表示单个字符出现一次。

9.用正则表达式进行搜索?
‘REGEXP’为关键字。
‘.’表示匹配任意一个字符。
‘|’表示OR匹配。
‘[]’匹配任意单个字符。
‘-‘匹配范围。
‘\’匹配特殊字符。(多数正则表达式实现单个反斜杠转义特殊字符,以便能使用这些字符本身。但MySQL要求两个反斜杠(MySQL自己解释一个,正则表达式库解释另外一个)。)
‘*’0个或多个匹配。
‘+’一个或多个匹配。
‘?’0个或一个匹配。
‘^’文本的开始。
‘$’文本的末尾。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值