DDl语法,数据类型,约束,索引。

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,用于存放班级的基础信息。

现在要用外键关联,表示这两张表的数据关系。经过分析,可以知道一个学生属于某一个班级,一个班级有很多个学生,属于一对多关系。

一对多关系外键建立在多的一方,即建立在学生表上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值