1、DDL语法
数据定义语言。涉及库和表的管理。
1.1 库的管理
1.1.1. 库的创建。
create database 【if not exists】 库名;
1.1.2. 库的修改。
库名不支持修改,可以修改字符集。
ALTER DATABASE 库名 CHARACTER SET gbk;
1.1.3. 库的删除。
DROP DATABASE IF EXISTS 库名;
1.2 表的管理
1.2.1 表的创建
create table 表名(
列名 列的类型(长度)【约束】,
列名 列的类型(长度)【约束】
列名 列的类型(长度)【约束】
)
例:创建学生表。
CREATE TABLE student(
id INT(11),
student_name VARCHAR(11)
)
1.2.2 表的修改
修改表名
RENAME TABLE 旧表名 TO 新表名;
修改列名
ALTER TABLE 表名 change 旧列名 新列名 数据类型(长度) [约束];
删除列
ALTER TABLE 表名 drop 列名;
新增列
ALTER TABLE 表名 add 新列名 数据类型(长度) [约束];
表的删除
DROP TABLE 表名;
2、数据类型
2.1 数值类型
TINYINT 1Bytes
SMALLINT 2.Bytes
MEDIUMINT 3Bytes
INT 或INTEGER 4Bytes
BIGINT 8Bytes
FLOAT 4Bytes
DOUBLE 8Bytes
DECTMAL 8Bytes
2.3 字符串类型
| 类型 | 大小 | 用途
| CHAR | 0-255 bytes | 定长字符串
| VARCHAR | 0-65535 bytes | 变长字符串
| TINYBLOB | 0-255 bytes | 不超过 255 个字符的二进制字符串
| TINYTEXT | 0-255 bytes | 短文本字符串
| BLOB | 0-65 535 bytes | 二进制形式的长文本数据
CHAR 定长字符串
VARCHAR 变长字符串
name char(4)
张三 -> 内存中,有2个位置空出来了
name varchar(32)
张三 -> 在一开始定义的时候,内存的长度是32,但是注入值之后,长度会缩减到2
既然变长这么好用,为什么不都使用变长字符串(varchar)
3、约束
含义:一种限制,用于限制表中的数据,为了保证表中数据的准确性和可靠性。
1. NOT NULL:非空,该字段的值不能为空。
2. DEFAULT: 默认、设置字段的默认值。
3. PRIMARY KEY:主键,保证字段值的唯一性,并且不能为空,比如学号。
4. UNIQUE:唯一,保证字段值得唯一性,可以为空,比如座位。
5. FOREIGN KEY:外键,用于限制两个表的关系,用于保证字段的值,必须来自于另一张表的关联列的值。
外键
是表中用于关联其他表的字段
外键约束
用来开启这个关联效果的
3.1 NOT NULL
如果在列上定义了not null,那么当插入数据时,必须为列提供数据。
没有插入学生姓名,可以成功
insert into student (id, age) values (100, 18);
将学生表的name修改成not null约束
ALTER TABLE student
CHANGE name
name VARCHAR(32) NOT NULL;
没有插入学生姓名,插入失败
insert into student (id, age) values (101, 18);
3.2 DEFAULT
默认值,当插入数据时,没有提供列数据,使用默认值。
-- 插入学生信息,没有提供graduation列的值,默认是null
insert into student (id, age) values (102, 18);
-- 修改graduation列默认值为0
ALTER TABLE student
CHANGE graduation
graduation VARCHAR(1) DEFAULT 0;
-- 插入学生信息,没有提供graduation列的值,默认是0
insert into student (id, age) values (103, 18);
3.3 PRIMARY KEY
primary key不能重复而且不能为null。
在实际开发中,每一张表往往都会设计一个主键,表示每一条数据的唯一性,方便后续的修改、删除等操作。
如果设置多个主键的话,要多个字段同时相同,才记作重复
3.4 UNIQUE
修改seat列为UNIQUE约束
ALTER TABLE student
CHANGE seat
seat VARCHAR(255) UNIQUE;
-- 插入成功,表中seat不存在1
insert into student (id, seat) values (105, 1);
-- 插入失败,表中seat存在1,UNIQUE不能重复
insert into student (id, seat) values (106, 1);
3.5 FOREIGN KEY
外键:用于定义主表和从表之间的关系。
当定义外键约束后,要求外键列数据必须在主表的主键列存在或是为null。
修改列为外键约束
ALTER TABLE 表名 ADD CONSTRAINT 外键名
FOREIGN KEY(列名) REFERENCES 主表名 (列名);
修改学生表的class_id为外键约束,值取自于class表的id
ALTER TABLE student ADD CONSTRAINT class_id_ibfk
FOREIGN KEY(class_id) REFERENCES class (id);
-- 插入失败,因为class表中id列不存在值10
insert into student (id, class_id) values (107, 10);
4、索引
索引是用来提高数据查询效率的一种数据结构。
索引相当于一本书的目录,查找内容的时候先根据目录,找到要找的内容的页码,然后再去页码查看数据。
1. 全表扫描
2. 根据索引检索
4.1 索引的实现原理
mysql数据库中的索引是需要排序的,底层是通过B-Tree(二叉树)实现的。查找的时候是根据中序遍历方式来查找数据。
注意:
1. 在数据库中主键上都会自动添加索引对象,或者一个字段上如果有unique约束的话也会自动创建索引对象。
2. 在数据库中,任何一张表的任何一条记录在硬盘存储上都有一个物理地址,指的是该数据存储在硬盘的什么位置。
5.数据库设计思路
5.1 一对一
假设有学生表student,用于存放学生基础信息;另有一张学生卡表student_card,用于存放学生的学生卡信息。
现在要用外键关联,表示这两张表的数据关系。经过分析,可以知道一个学生对应一张学生卡,一张学生卡属于某一个学生,属于一对一关系。
一对一关系外键建立在任意一张表都可以。
5.2 一对多
假设有学生表student,用于存放学生基础信息。另有一张班级表class,用于存放班级的基础信息。
现在要用外键关联,表示这两张表的数据关系。经过分析,可以知道一个学生属于某一个班级,一个班级有很多个学生,属于一对多关系。
一对多关系外键建立在多的一方,即建立在学生表上。