SQL语言的分类
数据操作语言DML
对数据的添加、修改、删除、查询。
插入数据:
INSERT INTO student VALUES(1,"张三", "男","1995-05-15","12312312389",NULL);
数据控制语言DCL
对用户、权限、事物的管理。
数据定义语言DDL
对逻辑库、数据表、视图、索引的管理。
对逻辑库的相关操作:
SHOW DATABASES; #显示逻辑库
CREATE DATABASE demo;#创建新的逻辑库
DROP DATABASE demo;#删除逻辑库
USE test; #使用逻辑库
SHOW tables; #查看当前逻辑空间的数据表
DESC student; #查看指定表的结构情况
SHOW CREATE TABLE student; #查看生成数据表的sql语句
DROP TABLE student; #删除指定的数据表
创建数据表:
/*
CREATE TABLE 数据表(
列名1 数据类型 约束 COMMENT 注释,
列名2 数据类型 约束 COMMENT 注释,
列名3 数据类型 约束 COMMENT 注释,
)COMMENT = 注释;
其中约束和注释为可写可不写
*/
CREATE TABLE student(
id INT UNSIGNED PRIMARY KEY,
name VARCHAR(20) NOT NULL, #VARCHAR为不定长度的字符数组
sex CHAR(1) NOT NULL,
birthday DATE NOT NULL,
tel CHAR(11) NOT NULL,
remark VARCHAR(200)
);
SQL语句注意事项
- SQL语句不区分大小写,但是字符串区分大小写。
- SQL语句必须以分号结尾。
- SQL语句中的空格和换行没有限制。
- SQL语句的注释有两种:
#单行注释
/* 多行注释 */
数据类型
保存数字的数据类型
DECIMAL: 以字符串的形式保存数字,十进制转成二进制的时候不会丢失精度,第一个参数代表整数和小数一共有几位,第二个参数表示保存到小数点之后几位。
浮点数丢失精度问题
二进制转换十进制的时候,由于计算机智能计算二进制,所以对于有的小数只能无限逼近,不能精确表示。例如0.2。
二进制只能表示2-1, 2-2, 2-3, 2-4, 2-5, … 即1/2, 1/4, 1/8, …所以对于1/5只能用1/8 + 1/16 + 1/128… 来逼近。
保存字符串的数据类型
保存日期的数据类型
修改表结构
添加字段
ALTER TABLE student
ADD address VARCHAR(200) NOT NULL,
ADD home_tel CHAR(11) NOT NULL;
修改字段
MODIFY: 修改字段类型和约束
CHANGE: 修改字段名称
ALTER TABLE student
MODIFY home_tel VARCHAR(20) NOT NULL,
CHANGE address com_address VARCHAR(200) NOT NULL;
删除字段
ALTER TABLE student
DROP com_address,
DROP home_tel;
字段约束
数据库范式
第一范式(原子性): 数据表的每一列都是不可分割的基本数据项,同一列中不能有多个值,也不能存在重复的属性。
第二范式(唯一性): 数据表中的每条记录必须是唯一的。(一般通过主键实现唯一标识)
第三范式(关联性): 每列都与主键有直接关系, 不存在传递依赖。
字段约束
MySQL中的字段约束:
注: 外键约束不推荐使用,因为一旦数据表实现外键闭环则无法删除数据表的数据。
索引
创建数据表的时候添加索引
CREATE TABLE t_message(
id INT UNSIGNED PRIMARY KEY,
content VARCHAR(200) NOT NULL,
type ENUM("公告", "通报", "个人通知") NOT NULL,
INDEX idx_type (type)
);
已有数据表的添加和删除索引
SHOW INDEX FROM t_message; //显示表已有的索引
CREATE INDEX idx_type ON t_message(type); //创建索引的方法
ALTER TABLE t_message ADD INDEX idx_type(type); //创建索引的第二种方法
DROP INDEX idx_type ON t_message; // 删除索引的方法
索引的使用原则
- 数据量很大,而且经常被查询的数据表可以设置索引
- 索引只添加在经常被用作检索条件的字段上面
- 不要在大字段上创建索引