定义
SQL是用于操控关系表数据的一种语言。
过程化语言对所期望的结果和产生这些结果的执行机制或过程都进行了定义。
如:Java,C,C++等。
SQL是非过程化语言。非过程化语言定义了期望结果,但是将产生结果的过程留给外部代理来定义。
使用SQL意味着必须放弃对过程的控制,因为SQL语句只定义必要的输入和输出,而执行语句的方式则交由数据库引擎的一个组件(优化器)来处理。
优化器的工作包括查看SQL语句并考虑该表的配置信息以及有无索引等,以确定最具效率的执行路径。
术语 | 定义 |
---|---|
实体 | 数据库用户所关注的对象 |
列 | 存储在表中的独立数据片段 |
行 | 所有列的一个集合,完整地描述了一个实体(或实体上的某个行为),也称之为记录 |
表 | 行的集合,既可以保存在内存中(未持久化),也可以保存在存储设备中(已持久化) |
结果集 | 未持久化表的另一个名字,一般为SQL查询的结果 |
主键 | 用于唯一标识表中每个行的一个或多个列 |
外键 | 用于标识其他表中某一行的一个或多个列 |
分类
SQL方案(schema)语句:用于定义存储于数据库中的数据结构。如:创建新表。
SQL数据语句:用于操作SQL方案语句所定义的数据结构。如:在表中增加数据。
SQL事务语句:用于开始,结束或回滚事务。
MySQL数据类型
字符型数据
类型 | 含义 |
---|---|
char(n) | 固定长度为n个字符的字符串 |
varchar(n) | 最大长度为n个字符的可变长字符串 |
固定长度的字符串使用空格向右填充,以保证占用同样的字节数。
可以使用show命令查看支持的字符集。
文本数据
类型 | 最大字节数 |
---|---|
tinytext | 255 |
text | 65535 |
mediumtext | 16777215 |
longtext | 4294967295 |
如果数据超过了该类型的最大长度,数据将会被截断。
在向文本列装载数据时,不会消除数据的尾部空格。
当使用文本列排序或分组时,只会使用前1024个字节,在需要时可以进行调整。
数值型数据
在类型前加上unsigned关键字,指明数据为无符号数(值大于等于0)
整数类型 | 带符号范围 | 无符号范围 |
---|---|---|
tinyint | -128 ~ 127 | 0 ~ 255 |
smallint | -32768 ~ 32767 | 0 ~ 65535 |
mediumint | -8388608 ~ 8388607 | 0 ~ 16777215 |
int | -2147483648 ~ 2147483647 | 0 ~ 4294967295 |
bigint | -9223372036854775808 ~ 9223372036854775807 | 0 ~ 18446744073709551615 |
浮点类型 | 含义 |
---|---|
folat(p,s) | 总位数(精度)为p,小数位(有效位)占s位 |
double(p,s) | 总位数(精度)为p,小数位(有效位)占s位 |
如果数字位超过了该列所定义的精度或有效位,那么该列中存储的数据将被四舍五入。
时间数据
类型 | 默认格式 | 允许的值 |
---|---|---|
date | YYYY-MM-DD | 1000-01-01 ~ 9999-12-31 |
datetime | YYYY-MM-DD HH:MI:SS | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 |
timestamp | YYYY-MM-DD HH:MI:SS | 1970-01-01 00:00:00 ~ 2037-12-31 23:59:59 |
year | YYYY | 1901 ~ 2155 |
time | HHH:MI:SS | -838:59:59 ~ 838:59:59 |
可以使用str_to_date(‘Feb-21-1980’ , ‘%b-%d-%Y’)进行日期格式转换。
格式 | 含义 |
---|---|
%a | 星期几的简写,如:Sun,Mon |
%b | 月名称的简写,如:Jan,Feb |
%c | 月份的数字形式(0……12) |
%d | 日在月中的次序(00……31) |
%f | 毫秒数(000000……999999) |
&H | 24时格式中的小时(00……23) |
%h | 12时格式中的小时(01……12) |
%i | 小时中的分钟(00……59) |
%j | 一年中天的次序(001……366) |
%M | 月名称(January……December) |
%m | 月份的数字表示 |
%p | AM或PM |
%s | 秒数(00……59) |
%W | 星期名(Sunday……Saturday) |
%w | 天在星期中的次序(0=周日……6=周六) |
%Y | 4位数字的年份 |
创建表
CREATE TABLE person(
person_id SMALLINT UNSIGNED,
fname VARCHAR(20) NOT NULL,
lname VARCHAR(20) NOT NULL,
gender CHAR(1) CHECK (gerder IN ('M','F')),
birth_date DATE,
CONSTRAINT pk_person PRIMARY KEY (person_id)
);
null
在某些情况下,在向表中插入数据时,无法位其中某一列提供具体的值。此时该列被设置为null,以指明该值的缺失。null被用于各种不能赋值的情况。
null是指不能确定值的值,null不等于null。
扫描二维码关注公众号,回复:
2457540 查看本文章