SQL语言的分类

数据操作语言DML

对数据的添加、修改、删除、查询。
插入数据:

INSERT INTO student VALUES(1,"张三", "男","1995-05-15","12312312389",NULL);

mysql 逻辑型L_mysql 逻辑型L

数据控制语言DCL

对用户、权限、事物的管理。

数据定义语言DDL

对逻辑库、数据表、视图、索引的管理。

对逻辑库的相关操作:

SHOW DATABASES; #显示逻辑库
CREATE DATABASE demo;#创建新的逻辑库
DROP DATABASE demo;#删除逻辑库
USE test; #使用逻辑库
SHOW tables; #查看当前逻辑空间的数据表
DESC student; #查看指定表的结构情况
SHOW CREATE TABLE student; #查看生成数据表的sql语句
DROP TABLE student; #删除指定的数据表

mysql 逻辑型L_sql_02


mysql 逻辑型L_sql_03


mysql 逻辑型L_数据库_04


mysql 逻辑型L_mysql 逻辑型L_05


mysql 逻辑型L_mysql 逻辑型L_06


mysql 逻辑型L_数据库_07


mysql 逻辑型L_mysql_08


mysql 逻辑型L_sql_09

创建数据表:

/*
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)
	);

mysql 逻辑型L_sql_10

SQL语句注意事项
  1. SQL语句不区分大小写,但是字符串区分大小写。
  2. SQL语句必须以分号结尾。
  3. SQL语句中的空格和换行没有限制。
  4. SQL语句的注释有两种:
#单行注释
/* 多行注释 */

数据类型

保存数字的数据类型

mysql 逻辑型L_mysql 逻辑型L_11


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… 来逼近。

保存字符串的数据类型

mysql 逻辑型L_mysql_12

保存日期的数据类型

mysql 逻辑型L_mysql_13

修改表结构

添加字段
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中的字段约束:

mysql 逻辑型L_mysql_14


注: 外键约束不推荐使用,因为一旦数据表实现外键闭环则无法删除数据表的数据。

索引

创建数据表的时候添加索引
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; // 删除索引的方法
索引的使用原则
  • 数据量很大,而且经常被查询的数据表可以设置索引
  • 索引只添加在经常被用作检索条件的字段上面
  • 不要在大字段上创建索引