DDL数据定义语言
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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`);
阿⾥⼿册相关约束:。