首页 > 热点 > > 内容页

面试官问“你的SQL能力怎么样?”时应该如何回答?

时间:2023-06-29 16:16:25
x

第一章 SQL的介绍

、什么是sql

SQL:Structure Query Language。(结构化查询语言),通过sql操作数据库(操作数据库,操作表,操作数据)

SQL被美国国家标准局(ANSI)确定为关系型数据库语言的美国标准,后来被国际化标准组织(ISO)采纳为关系数据库语言的国际标准


【资料图】

各数据库厂商(MySql,oracle,sql server)都支持ISO的SQL标准。

各数据库厂商在标准的基础上做了自己的扩展。各个数据库自己特定的语法

、sql的分类

Data Definition Language (DDL数据定义语言) 如:操作数据库,操作表

Data Manipulation Language(DML数据操纵语言),如:对表中的记录操作增删改

Data Query Language(DQL 数据查询语言),如:对表中数据的查询操作

Data Control Language(DCL 数据控制语言),如:对用户权限的设置

、MySQL的语法规范和要求

(1)mysql的sql语法不区分大小写

MySQL的关键字和函数名等不区分大小写,但是对于数据值是否区分大小写,和字符集与校对规则有关。

ci(大小写不敏感),cs(大小写敏感),_bin(二元,即比较是基于字符编码的值而与language无关,区分大小写)

(2)命名时:尽量使用26个英文字母大小写,数字0-9,下划线,不要使用其他符号user_id

(3)建议不要使用mysql的关键字等来作为表名、字段名等,如果不小心使用,请在SQL语句中使用`(飘号)引起来

(4)数据库和表名、字段名等对象名中间不要包含空格

(5)同一个mysql软件中,数据库不能同名,同一个库中,表不能重名,同一个表中,字段不能重名

(6)标点符号:

必须成对

必须英文状态下半角输入方式

字符串和日期类型可以使用单引号’’

列的别名可以使用双引号"",给表名取别名不要使用双引号。取别名时as可以省略

如果列的别名没有包含空格,可以省略双引号,如果有空格双引号不能省略。

(7)SQL脚本中如何加注释

单行注释:#注释内容

单行注释:–空格注释内容 其中–后面的空格必须有

多行注释:/* 注释内容 */

第二章-DDL操作数据库

、创建数据库(掌握)

语法

create database 数据库名 [character set 字符集][collate  校对规则]     注: []意思是可选的意思

字符集(charset):是一套符号和编码。

练习

创建一个day01的数据库(默认字符集)

create database day01;

创建一个day01_2的数据库,指定字符集为gbk(了解)

create database day01_2 character set gbk;

、查看所有的数据库

查看所有的数据库

语法

show databases;

查看数据库的定义结构【了解】

语法

show create database 数据库名;

查看day01这个数据库的定义

show create database day01;

、删除数据库

语法

drop database 数据库名;

删除day01_2数据库

drop database day01_2;

、修改数据库【了解】

语法

alter database 数据库名 character set 字符集;

修改day01这个数据库的字符集(gbk)

alter database day01 character set gbk;

注意:

是utf8,不是utf-8

不是修改数据库名

、其他操作

切换数据库, 选定哪一个数据库

use 数据库名;     //注意: 在创建表之前一定要指定数据库. use 数据库名

练习: 使用day01

use day01;

查看正在使用的数据库

select database();

第三章-DDL操作表

、创建表

语法

create table 表名( 列名 类型 [约束], 列名 类型 [约束] ...  );

类型

数值类型

整型系列:xxxInt

int(M),必须和unsigned zerofill一起使用才有意义

double(M,D):表示最长为M位,其中小数点后D位

例如:double(5,2)表示的数据范围[-,],如果超过这个范围会报错。

定点型系列:decimal(底层实际上是使用字符串进行存储)

decimal(M,D):表示最长为M位,其中小数点后D位

位类型:bit

字节范围是:1-8,值范围是:bit(1)~bit(64),默认bit(1)

用来存储二进制数。对于位字段,直接使用select命令将不会看到结果。可以使用bit()或hex()函数进行读取。插入bit类型字段时,使用bit()函数转为二进制值再插入,因为二进制码是“01”。常见 SQL 面试题:经典 50 例

日期时间类型

日期时间类型:year, date, datetime, timestamp

注意一下每一种日期时间的表示范围

timestamp和datetime的区别:

timestamp范围比较小

timestamp和时区有关

show variables like ‘time_zone’;

set time_zone = ‘+8:00’;

timestamp受MySQL版本和服务器的SQLMode影响很大

表中的第一个非空的timestamp字段如果插入和更新为NULL则会自动设置为系统时间

字符串类型

MySQL中提供了多种对字符数据的存储类型,不同的版本可能有所差异。常见的有:

char,varchar,xxtext,binary,varbinary,xxblob,enum,set等等

字符串类型char,varchar(M)

char如果没有指定宽度,默认为1个字符

varchar(M),必须指定宽度

binary和varbinary类似于char和varchar,不同的是它们包含二进制字符串,不支持模糊查询之类的。

一般在保存少量字符串的时候,我们会选择char和varchar;而在保存较大文本时,通常会选择使用text或blob系列。blob和text值会引起一些性能问题,特别是在执行了大量的删除操作时,会在数据表中留下很大的“空洞”,为了提高性能,建议定期时候用optimize table功能对这类表进行碎片整理。可以使用合成的(Synthetic)索引来提高大文本字段的查询性能,如果需要对大文本字段进行模糊查询,MySql提供了前缀索引。但是仍然要在不必要的时候避免检索大型的blob或text值。

enum枚举类型,它的值范围需要在创建表时通过枚举方式显式指定,对于1~255个成员的枚举需要1个字节存储;对于【 255`65535】个成员需要2个字节存储。例如:gender enum(‘男’,‘女’)。如果插入枚举值以外的值,会按第一个值处理。一次只能从枚举值中选择一个。

set集合类型,可以包含0~64个成员。一次可以从集合中选择多个成员。如果选择了1-8个成员的集合,占1个字节,依次占2个,3个。。8个字节。例如:hoppy set(‘吃饭’,‘睡觉’,‘玩游戏’,‘旅游’),选择时’吃饭,睡觉’或’睡觉,玩游戏,旅游’

示例

约束

即规则,规矩 限制;

作用:保证用户插入的数据保存到数据库中是符合规范的

约束种类:

not null: 非空 ; eg: username varchar(40) not null username这个列不能有null值

unique:唯一约束, 后面的数据不能和前面重复; eg: cardNo char(18) unique; cardNo 列里面不可以有重复数据

primary key;主键约束(非空+唯一); 一般用在表的id列上面. 一张表基本上都有id列的, id列作为唯一标识的

auto_increment: 自动增长,必须是设置了primary key之后,才可以使用auto_increment

id int primary key auto_increment; id不需要我们自己维护了, 插入数据的时候直接插入null, 自动的增长进行填充进去, 避免重复了.

注意:

先设置了primary key 再能设置auto_increment

只有当设置了auto_increment 才可以插入null , 否则插入null会报错

id列:

给id设置为int类型, 添加主键约束, 自动增长

或者给id设置为字符串类型,添加主键约束, 不能设置自动增长

上一篇:《八角笼中》长沙路演 王宝强:相信自己找到方向_全球头条 下一篇:最后一页
推荐阅读