第一话:标准SQL DDL
SQL 和 MySQL的区别在哪里?
标准SQL是关系数据库的标准,MySQL实际上是根据这个标准所衍生出来的一个产品。所有的关系数据库语言大家共同的标准是标准SQL。
SQL数据库的体系结构:
在大宏观里面,用户可以对三种对象进行操作:视图,基本表,存储文件。
标准SQL语言包括三类:DDL(数据定义语言),DML(数据操作语言),DCL(数据控制语言)
作为标准,标准SQL语言非常简单,只有下面的操作动词:
SQL标准类别 | 动词 |
---|---|
DDL | create drop alter |
DML | select insert update delete |
DCL | grant revoke |
1.1 实验环境配置
为了我们学习使用,我们使用SQLite3进行实验,和MySQL,SQLServer语法大同小异,所以无需过于纠结版本。
为什么我们选择SQLite,因为它够小,精巧,无需像MySQL占用我大量的内存和CPU资源。它只有30MB
我们下载SQLiteStudio,带可视化的DBMS工具,里面已经封装好SQLite3了。
你可以选择到 Github 下载对应自己的电脑版本:
https://github.com/pawelsalawa/sqlitestudio/releases
使用很简单,我们可以调用>工具–SQL编辑器,输入代码,执行即可,数据库的视图变化都可以显示在可视化的窗口里面。需要注意的是,数据库文件是作为一个文件出现在文件管理器里面的。
1.2 DDL 数据定义语言
DDL 语言能完成以下任务:
-
定义表【针对模式】
– 创建表
– 删除表
– 修改表定义 -
定义索引【针对内模式】
– 创建索引
– 删除索引
– 间接修改索引定义:删除+创建 -
定义视图【针对外模式】
– 创建视图
– 删除视图
– 间接修改视图的定义:删除+创建
1.2.1 数据类型
整数类型:
- bigint:负64bit-正64bit
- int:负32bit-正32bit
- smallint:负16bit-正16bit
- tinyint:0-255
- bit:二值
精确数值:
- decimal或者numeric:
用来储存指定精度的数据,比如decimal(10,4)
表示整数位10位,小数位4位
浮点数:
- float:最大数位53位的数据
- real:最大数位24位的数据
字符串数据:
- char:定长数据,这个定长的意思是存储在文件里面是定长的。char(8),定长8个字符
- varchar:变长数据,这个变长是在文件里面的差异。
日期和时间数据:
- date:
date 'yy-mm-dd'
例如:date '2020-04-21'
- time:
time 'hh:mm:ss'
例如:time '19:03:23'
- datetime:
datetime 'yy-mm-dd hh:mm:ss'
1.2.2 定义表 create
定义表的格式语句:
create table <table_name> (<col_name> <data_type> <optical_limit>,...);
例子:
create table Student(
sid CHAR(8) primary key,
sname VARCHAR(20) NOT NULL,
sdept INT,
sbirth DATE
);
常见的<optical_limit>
词:
- primary key 主键
- foreign key 外键
- unique 唯一
- not null 非空
primary key
主键必须是非空而且唯一。
和约束词:unique
的区别在于,unique允许值可以是null
组合限制
在一个Table里只允许一个主键,假如说像这样的需求:建立一个学生选课表SC,由学号sno,课程号cno,成绩score组成,其中(Sno,Cno)作为主键。
如果我们对两个col赋予主键的限制就会错误,所以,我们可以把主键作为最后的可选项打包。如下:
create table SC(
sno CHAR(8),
cno VARCHAR(20),
score FLOAT,
Primary key(sno,cno)
);
1.2.3 修改表 alert
当我们在创建表的时候犯错了,多加或者少加了一个属性,这时候我们就需要对表进行修改。
alter table <table_name> <child_op>
<child_op> 包括以下三种:
add <new_col_name> <data_type> <optical_limit>
drop <col_name> <optical_limit>
modify <col_name> <new_data_type>
例子:
向学生表增加入学时间列,其数据类型是日期型
alter table Student add ctime data
删除呢?如下:
alter table Student drop ctime
假如我要删除某一列的完整性约束:
alter table Student drop ctime primary key
假如我要增加某一列的完整性约束:
alter table Student add primary key(cno)
1.2.4 删除表
如果要删表,drop table即可:
drop table Student