DDL数据定义语言

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

DDL数据定义语⾔DDL(Data Definition Language):数据定义语⾔,⽤于库和表的创建、修改、删除。

主要包括CREATE、DROP、ALTER语句;
1、对数据库的操作
-- 创建数据库
create database [if not exists] 数据库名 [character set 字符集名];
-- 删除数据库
drop database [if exists] 数据库名;
-- 修改数据库的字符集
alter database 数据库名 character set gbk;
2、常⽤的数据类型
数值
tinyint,⾮常⼩的数据,1个字节。

(bit)
smallint,较⼩的数据,2个字节。

(short)
mediumint,中等⼤⼩的数据,3个字节。

int,标准的整数,4个字节。

bigint,较⼤的整数,8个字节。

(long)
float,单精度浮点数,4个字节。

double,双精度浮点数,8个字节。

decimal,字符串形式的浮点数(⽤于⾦融计算)。

字符串
char,固定长字符串,⽐较耗费空间,长度⼤⼩:0~255。

varchar,可变字符串,长度⼤⼩:0~65535。

(String)
tinytext,微型⽂本,2^8-1。

text,⽂本串,2^16-1。

(保存⼤⽂本)
时间⽇期
date,⽇期,YYYY-MM-DD。

time,时间,HH:mm:ss。

datetime,最常⽤的时间格式,YYYY-MM-DD HH:mm:ss。

timestamp,时间戳,1970.1.1到现在的毫秒数。

year,年份。

3、对表的操作
表(table)是数据库的基本组成单元,所以数据都以表的形式组织,⽬的是可读性强。

表分为⾏和列,⾏:数据/记录(data),列:字段(column)
字段属性:字段名,数据类型,相关的约束
-- 创建数据表
create table [if not exists] `表名`(
`字段名` 列类型 [属性] [索引] [注释], -- 使⽤``来区分mysql⾃带的关键字
...
`字段名` 列类型 [属性] [索引] [注释]
)[表类型] [字符集设置];
-- 删除数据表
drop table [if exists] 表名;
-- 添加字段
alter table `表名` add(`字段名1` 字段类型1,...,`字段名n`,字段类型n);
-- 修改字段类型
alter table `表名` modify `字段名` 字段的新类型;
-- 同时修改字段名和字段类型
alter table `表名` change `字段名` `新字段名` 新字段类型;
-- 删除字段
alter table `表名` drop 字段名;
-- 修改表名
alter table `表名` rename to `新表名`;
【⽰例 1】创建student表
CREATE TABLE IF NOT EXISTS `student` (
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` VARCHAR(2) NOT NULL DEFAULT '男' COMMENT '性别',
`birthday` DATETIME DEFAULT NULL COMMENT '出⽣⽇期',
`address` VARCHAR(100) DEFAULT NULL COMMENT '家庭地址',
`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY(`id`) -- 设置主键
)ENGINE=INNODB DEFAULT CHARSET=utf8; -- 设置引擎和字符编码
4、字段属性
Unsigned:⽆符号的,声明的数据不允许为负数。

如 Unsigned tinyint,范围:0~255(128+127)。

zerofill:0填充的,不⾜的位数使⽤0来填充。

如 int(3) ,5 --- 005。

Auto_InCrement:主键⾃增策略,可以定义起始值和步长。

not null:如果不给它赋值,就会报错。

null:如果不写值,默认就是null。

default:设置默认的值。

comment:注释。

5、数据表的类型(引擎)
名称MYISAM INNODB
事务⽀持不⽀持⽀持
数据⾏锁定不⽀持⽀持
外键约束不⽀持⽀持
全⽂索引⽀持不⽀持
表空间的⼤⼩较⼩较⼤,约为MYISAM的2倍
适⽤场景:
MYISAM,节约空间,速度较快。

INNODB,安全性⾼,事务的处理,多⽤户操作数据表
6、在物理空间存储的位置
所有的数据库⽂件都存储在data⽬录下:
MySQL引擎在物理⽂件上的区别:
InnoDB类型数据表只有⼀个 *.frm⽂件 , 以及上⼀级⽬录的ibdata1⽂件。

MyISAM类型数据表对应三个⽂件 :
* . frm 表结构的定义⽂件。

* . MYD 数据⽂件 ( data )。

* . MYI 索引⽂件 ( index )。

7、设置数据表的字符集编码
因为编码不匹配就会出现乱码,有的编码不能存储汉字。

写建表语句时加上字符编码的设置,charset=utf8。

在my.ini⽂件上配置⼀些参数。

8、外键(foreign key)
作⽤:⽤于限制两个表的关系,保证该字段的值必须来⾃于主表的关联列的值。

使⽤:在⼦表添加外键约束,然后引⽤主表中某字段。

【⽰例 2】在创建表的时候,增加约束
-- 创建年级表(id,年级名称)
CREATE TABLE `grade`(
`gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级id',
`gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',
PRIMARY KEY(`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
-- 创建学⽣信息表(学号,姓名,密码,性别,出⽣⽇期,学⽣年级,家庭地址,邮箱)
CREATE TABLE IF NOT EXISTS `student` (
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` VARCHAR(2) NOT NULL DEFAULT '男' COMMENT '性别',
`birthday` DATETIME DEFAULT NULL COMMENT '出⽣⽇期',
`gradeid` INT(10) NOT NULL COMMENT '学⽣年级',
`address` VARCHAR(100) DEFAULT NULL COMMENT '家庭地址',
`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY(`id`), -- 将id设置主键
KEY `FK_gradeid` (`gradeid`), -- 定义外键
CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`gradeid`) -- 给这个外键添加约束(CONSTRAINT),然后执⾏引⽤(REFERENCES) )ENGINE=INNODB DEFAULT CHARSET=utf8;
注:如果要删除有外键关系的表,必须先删除引⽤的别⼈的表(从表),再删除被引⽤的表(主表)。

【⽰例 3】创建表成功后,添加外键约束
-- 创建年级表(id,年级名称)
CREATE TABLE `grade`(
`gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级id',
`gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',
PRIMARY KEY(`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
-- 创建学⽣信息表(学号,姓名,密码,性别,出⽣⽇期,学⽣年级,家庭地址,邮箱)
CREATE TABLE IF NOT EXISTS `student` (
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` VARCHAR(2) NOT NULL DEFAULT '男' COMMENT '性别',
`birthday` DATETIME DEFAULT NULL COMMENT '出⽣⽇期',
`gradeid` INT(10) NOT NULL COMMENT '学⽣年级',
`address` VARCHAR(100) DEFAULT NULL COMMENT '家庭地址',
`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY(`id`) -- 将id设置主键
)ENGINE=INNODB DEFAULT CHARSET=utf8;
-- 给学⽣表添加外键约束
ALTER TABLE `student`
ADD
CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`);
阿⾥⼿册相关约束:。

相关文档
最新文档