SQL是用于访问和处理数据的标准的计算机语言
一、sql语言分类
DML 添加,修改,删除,查询
DCL 用户,权限,事务
DDL 逻辑库,数据表,视图,索引
SQL语句的注意事项
SQL语句不区分大小写,但是字符串区分大小写
SQL语句必须以分号结尾
SQL语句中的空白和换行没有限制,但是不能破坏语法
SQL语句的注释
SQL语句的注释有两种,分别如下
# 这是一段注释文字
/* 这是另一段注释文字 */
创建逻辑库
create database 逻辑库名称;
show databases; # 出示所有数据库
drop database 逻辑库名称;
创建数据表
create table 数据表(
列名1 数据类型 [约束] [comment 注释],
列名1 数据类型 [约束] [comment 注释],
....
) [comment = 注释];
create table student( id int unsigned primary key, name varchar(20) not null, sex char(1) not null, birthday date not null, tel char(11) not null, remark varchar(200) );
二、数据类型
数字
类型 | 大小 | 说明 |
TINYINT | 1字节 | 小整数 |
SMALLINT | 2字节 | 普通整数 |
MEDIUMINT | 3字节 | 普通整数 |
INT | 4字节 | 较大整数 |
BIGINT | 8字节 | 大整数 |
FLOAT | 4字节 | 单精度浮点数 |
DOUBLE | 8字节 | 双精度浮点数 |
DECIMAL | ------- | DECIMAL(10,2) |
数据类型:字符串
类型 | 大小 | 说明 |
CHAR | 1-255字符 | 固定长度字符串 |
VARCHAR | 1-65535字符 | 不固定长度字符串 |
TEXT | 1-65535字符 | 不确定长度字符串 |
MEDIUMTEXT | 1-1千6百万字符 | 不确定长度字符串 |
LONGTEXT | 1-42亿字符 | 不确定长度字符串 |
数据类型:日期类型
类型 | 大小 | 说明 |
DATE | 3字节 | 日期 |
TIME | 3字节 | 时间 |
YEAR | 1字节 | 年份 |
DATETIME | 8字节 | 日期时间 |
TIMESTAMP | 4字节 | 时间戳 |
三、修改数据表结构
alter table 表名称
add 列1 数据类型 [约束] [COMMENT 注释],
add 列2 数据类型 [约束] [COMMENT 注释],
......;
alter table student modify home_tel varchar(20) not null;
修改字段名称
alter table 表名称
change 列1 新列名1 数据类型 [约束] [comment 注释],
change 列2 新列名2 数据类型 [约束] [comment 注释],
........;
alter table student change address home_address varchar(200) not null;
删除字段
alter table 表名称
drop 列1,
drop 列2,
......;
alter table student drop home_address, drop home_tel;
二、数据库的规则范式
第一范式:原子性
构造数据库必须遵循一定的规则,这种规则就是范式
目前关系型数据库有6中范式,一般情况下,只满足第三范式即可
第一范式是数据库的基本要求,不满足这一点就不是关系数据库
第二范式:唯一性
数据表中的每条记录必须是唯一的,为了实现区分,通常要为表加上一个列来存储唯一标识,这个唯一属性被称作主键列
第三范式:关联性
每列都与主键有直接关系,不存在传递依赖
字段约束
约束名称 | 关键字 | 描述 |
主键约束 | PRIMARY KWY | 字段值唯一,且不能为NULL |
非空约束 | NOT NULL | 字段值不能为NULL |
唯一约束 | UNIQUE | 字段值唯一,且可以为NULL |
外键约束 | FOREIGN KEY |
保持关联数据的逻辑性 |
主键约束:
- 主键约束要求字段的值在全表必须唯一,而且不能为NULL值
- 建议主键一定要使用数字类型,因为数字的检索速度会非常快
- 如果主键是数字类型,还可以设置自动增长
create table t_teacher( id int primary key auto_increment, ...... );
非空约束:
- 非空约束要求字段的值不能为NULL值
- NULL值以为没有值,而不是“”空字符串
create table t_teacher( id int primary key auto_increment, name varchar(200) not null, married boolean not null default false );
唯一约束:
唯一约束要求字段值如果不为NULL,那么在全表必须唯一
create table t_teacher( ..... tel char(11) not null unique );
外键约束:
外键约束的定义是写在子表上的
create table t_dept( deptno int unsigned primary key, ename varchar(20) not null, sex enum('男','女') not null, deptno int unsigned, hiredate date not null, foreign key (deptno) references t_dept(deptno) );
三、数据库索引
1.建表时添加索引
create table 表名称(
......,
index [索引名称](字段),
....
);
create table t_message( id int unsigned primary key, content varchar(200) not null, type enum('公告','通报','个人通知') NOT NULL, create_time timestamp not null, index inx_type(type) );
2.建表后添加和删除索引
create index 索引名称 on 表名(字段);
alter table 表名称 add index [索引名](字段);
show index from 表名; # 查看数据表所有索引
drop index 索引名称 on 表名;
drop index idx_type on t_message; # 删除索引 create index idx_type on t_message(type); # 创建索引 show index from t_message; # 显示索引 alter table t_message add index idx_type(type); #添加索引
索引的使用原则
- 数据量很大,而且经常被查询的数据表可以设置索引
- 索引只添加在经常被用作检索条件的字段上面
- 不要在大字段上创建索引