一.SQL介绍
数据库分为两种,一种是关系型数据库(RDBMS),另一种呢就是非关系型数据(NOSQL)。而我们的 SQL 是关系型数据库的通用数据库语言,它是一种结构化查询语言。像比较出名的 Oracle、MySQL、SQL Server 等都是关系型数据库。
SQL语句主要分为三种,DDL、DML、DCL。以下列表说明他们的作用。
类型 | 描述 |
---|---|
DDL | 数据定义语言,这些语句定义了不同的数据段、数据库、表、列、索引等数据库对象。 |
DML | 数据操纵语句,用于添加、删除、更新、和查询数据库记录,并检查数据完整性 |
DCL | 数据控制语句,用于控制不同数据段直接许可和访问级别的语句。 |
二.数据完整性
我们在创建表的时候,为了数据更好的存储,保证数据更高效的被我们使用,我们在创建表的时候,可以给表添加一些强制性的约束,还有数据的类型。
三.数据类型
常用数据类型
- 数值类型
- 日期时间类型
- 字符串类型
数值类型
- 以下的无符号范围怎么使用的话,他是有一个约束的,在文章的下面有写
整数类型 | 有符号范围 | 无符号范围 |
---|---|---|
TINYINT(size) | -128~127 | 0~255 |
SMALLINT(size) | -32768~32767 | 0~65535 |
MIEDIUMINT(size) | -8388608~8388607 | 0~16777215 |
INT(size) | -2147483648~2147483647 | 0~4294967295 |
BIGINT(size) | -9223372036854775808~9223372036854775807 | 0~18446744073709551615 |
小数类型 | 描述 |
---|---|
FLOAT(size,d) | 带有浮动小数点的小数字。括号中 size 这个数值的最大位数, d 则是小数点右侧的最大位数 |
DOUBLE(size,d) | 带有浮动小数点的大数字括号中 size 这个数值的最大位数, d 则是小数点右侧的最大位数 |
DECIMAL(size,d) | 作为字符串储存的DOUBLE类型,允许固定的小数点(定点数类型) |
字符串类型 | 字节大小 | 实例 |
---|---|---|
CHAR(size) | 0-255 | char(3):输入’abc’则存储’abc’:输入’abcd’ 则存储’abc‘ |
VARCHAR(size) | 0-65535 | varchar(3)输入’abc’则存储’abc’:输入’abcd’ 则存储’abc‘ |
枚举类型 | 描述 |
---|---|
ENUM | 枚举类型英文为ENUM,对1255个成员的枚举需要1个字节存储;对于25565535个成员,需要2个字节存储。最多允许65535个成员。创建方式:enum(“M”,“F”); |
日期类型 | 描述 |
---|---|
DATE() | 日期。格式:YYYY-MM-DD 注释:支持的范围是从 ‘1000-01-01’ 到 ‘9999-12-31’ |
DATETIME() | 日期和时间的组合。格式:YYYY-MM-DD HH:MM:SS; 注释:支持的范围是从 ‘1000-01-01 00:00:00’ 到 ‘9999-12-31 23:59:59’ |
TIME() | 时间。格式:HH:MM:SS ;注释:支持的范围是从 ‘-838:59:59’ 到 ‘838:59:59’ |
YEAR() | 2 位或 4 位格式的年。 4 位格式:1901 到 2155。2 位格式:70 到 69,表示从 1970 到 2069 |
TIMESTAMP | 时间戳。格式:YYYY-MM-DD HH:MM:SS 注释:支持的范围是从 ‘1970-01-01 00:00:01’ UTC 到 ‘2038-01-09 03:14:07’ UTC |
四.列属性
约束名 | 解释 |
---|---|
主键primary key | 物理上存储的顺序 |
非空not null | 此字段不允许填写空值 |
惟一unique | 此字段的值不允许重复(例如身份证、手机号码等不可重复的数据) |
默认default | 当这个字段不填写内容时,将会默认为默认值,输入了就以输入的值为准 |
外键foreign key | 对关系字段进行约束,当为关系字段填写值时,会到关联的表中查询此值是否存在,如果存在则填写成功,如果不存在则填写失败并抛出异常 |
自增auto_increment | 自增 |
检查check | 指定一个表达式,用于检验指定数据(但在 MySQL 中不支持) |
无符号 UNSIGNED | 不允许出现符号,例如整数类型的负数(-) |
zerofill | 零填充 |
列属性使用示例
- 主键primary key
create table '表名'('字段名' int('括号里填最大的位数') primary key unsigned);
-- int类型的括号里填最大位数(不填的话默认为11),后边跟上想添加的约束
--而这个UNSIGNED是无符号约束,也就是说不允许出现这个字段符号,所以也不可能出现负数
- 非空not null
create table '表名'('字段名' int('括号里填最大的位数') not null);
-- 这个字段不允许空着,必须填点什么
- 惟一unique
create table '表名'('字段名' int('括号里填最大的位数') unique
);
-- 也就是说这个字段的数值不能重复,整张表中它只能是唯一一个
- 默认default
create table '表名'('字段名' int('括号里填最大的位数') default 10
);
-- 这个字段什么都不填的话就默认为 10(default 10:中间加空格)
- 外键foreign key
create table '表名'('字段名' int('括号里填最大的位数') not null,CONSTRAINT '外键的名称'FOREIGN KEY ('要创建外键的字段') REFERENCES '外键要关联的表'('外键关联的那张表的关联字段')
);
-- 添加外键的时候要先创建一个用来添加外键的字段
- 自增auto_increment
create table '表名'('字段名' int('括号里填最大的位数') auto_increment);
-- 自增:也就是说不填写任何东西的时候,会随着行数的增加,自动填入这个字段。一般用在整数类型的字段。没增加一行记录就会 +1
- 无符号 UNSIGNED
create table '表名'('字段名' int('括号里填最大的位数') UNSIGNED);
-- 不分大小写,UNSIGNED是无符号约束,也就是说不允许出现这个字段符号,所以也不可能出现负数
MySQL中常用的约束就这些。在很多的可视化工具都会有自动补齐功能,但是像自增这种就不会自动补齐,所以还是建议大家记下来。