DDL语言
库的管理
#一、创建库
create database 库名
#二、删除库
drop database 库名
表的管理
#1.创建表
CREATE TABLE IF NOT EXISTS stuinfo(
stuId INT,
stuName VARCHAR(20),
gender CHAR,
bornDate DATETIME
);
#2.修改表名
ALTER TABLE stuinfo RENAME [TO] studentinfo;
#3.修改表字段 alter
语法:ALTER TABLE 表名 ADD|MODIFY|DROP|CHANGE COLUMN 字段名 【字段类型】;
#①修改字段名
ALTER TABLE studentinfo CHANGE COLUMN sex gender CHAR;
#②修改字段类型和列级约束
ALTER TABLE studentinfo MODIFY COLUMN borndate DATE ;
#③添加字段
ALTER TABLE studentinfo ADD COLUMN email VARCHAR(20) first;
#④删除字段
ALTER TABLE studentinfo DROP COLUMN email;
#3.删除表
DROP TABLE [IF EXISTS] studentinfo;
常见类型
数值类型
类型 | 大小(bytes) | 范围(有符号) | 范围(无符号) | 范围(用途) |
---|---|---|---|---|
TINYINT | 1 | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2 | (-32 768,32 767) | (0,65 535) | 大整数值 |
MEDIUMINT | 3 | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 |
INT或INTEGER | 4 | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
BIGINT | 8 | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
FLOAT | 4 | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度/浮点数值 |
DOUBLE | 8 | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度/浮点数值 |
DECIMAL | 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 | 依赖于M和D的值 | 依赖于M和D的值 | 小数值 |
日期和时间类型
类型 | 大小(bytes) | 范围 | 格式 | 用途 |
---|---|---|---|---|
DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 | ‘-838:59:59’/‘838:59:59’ | HH:MM:SS | 时间值或持续时间 |
YEAR | 1 | 1901/2155 | YYYY | 年份值 |
DATETIME | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD | HH:MM:SS | 混合日期和时间值 |
TIMESTAMP | 4 | 1970-01-01 00:00:00/2038结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 | YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 |
字符串类型
类型 | 大小(bytes) | 用途 |
---|---|---|
CHAR | 0-255 | 定长字符串 |
VARCHAR | 0-65535 | 变长字符串 |
TINYBLOB | 0-255 | 不超过 255 个字符的二进制字符串 |
TINYTEXT | 0-255 | 短文本字符串 |
BLOB | 0-65535 | 二进制形式的长文本数据 |
TEXT | 0-65535 | 长文本数据 |
MEDIUMBLOB | 0-16777215 | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16777215 | 中等长度文本数据 |
LONGBLOB | 0-4294967295 | 二进制形式的极大文本数据 |
LONGTEXT | 0-4294967295 | 极大文本数据 |
常见约束
NOT NULL 非空约束
用not null约束的字段不能为null值,必须给定具体的数据
DEFAULT 默认约束
默认值,用于保证该字段有默认值
UNIQUE 唯一性约束
unique约束的字段,具有唯一性,不可重复,但可以为null(null 为不确定值)
PRIMARY KEY 主键约束
表设计时一定要有主键
给某个字段添加主键约束之后,该字段不能重复也不能为空
默认添加"索引——index"
FOREIGN KEY 外键约束
外键,用于限制两个表的关系,用于保证该字段的值必
须来自于主表的关联列的值,在从表添加外键约束,用于引用主表中某些的值注. CHECK 检查约束(mysql不支持)
检查字段的值是否为指定的值
添加约束
添加约束方式:
- 创建表时
- 修改表时
约束的添加分类:
- 列级约束:
六大约束语法上都支持,但外键约束没有效果- 表级约束:
除了非空,默认都支持
创建表时添加约束
- 添加列级约束
create table if not exists t_stuinfo(
id int primary key, #主键
stuName varchar(20) not null, #非空
gender char(1) check(gender='男' or gender='女'), #检查约束,MySql没有效果但不报错
seat int unique, #唯一约束
age int default 18, #默认(值)约束
majorId int references major(id) #外键约束,MySql没有效果,但不报错
);
- 添加表级约束
create table if not exists t_stuinfo(
id int,
stuName varchar(20),
gender char(1),
seat int,
age int,
majorId int,
constraint pk primary key(id), #约束名随意,主键不生效,但不报错。
constraint uq unique(seat), #唯一约束
constraint ck check(gender='男' or gender='女'), #检查约束,MySql不支持此约束,不报错但不生效
constraint fk_stuinfo_major foreign key(majorId) references major(id) #外键约束
);
修改表时添加约束
- 添加非空约束
alter table 表名称 modify column 列名 列类型 not null;
- 添加默认约束
alter table 表名称 modify column 列名 列类型 default 默认值;
- 添加主键约束
#列级约束
alter table 表名称 modify column 列名 列类型 primary key;
#表级约束
alter table 表名称 add primary key(id);
- 添加唯一约束
#列级约束
alter table 表名称 modify column 列名 列类型 unique;
#表级约束
alter table 表名称 add unique(列名);
- 添加外键约束(列级写法可行,但无效果)
alter table 表名称 add constraint fk_stuinfo_magor foreign key(magorId) references major(id);
- 归纳语法
#列级约束
alter table 表名称 modify column 列名 列类型 新约束;
#表级约束
alter table 表名称 add constraint 约束名 约束类型(列名称) [外键的引用];
删除约束
- 删除非空约束
alter table 表名称 modify column 列名 列类型 [null];
- 删除默认约束
alter table 表名称 modify column 列名 列类型;
- 删除主键
# 列级删除
alter table 表名称 modify column id int;
# 表级删除
alter table 表名称 drop primary key;
- 删除唯一
alter table 表名称 drop index(索引名) 设置唯一时的名称;
- 删除外键
alter table 表名称 drop foreign key(索引名) 设置外键时的名称;
自增长
自动填充自增长的数值,oracle数据库中没有子增长但是有序列
自增长列特点:
- 自增长列必须和一个Key搭配(Key指主键、唯一、外键…)
- 一个表最多有一个自增长列
- 自增长列的类型只能是数值型
- 自增长列可以通过SET auto_increment_increment = 3;设置步长(全局),可以通过插入行时手动插入标识列值设置起始值。
- 创建表时设置自增长列
create table user(
id int primary key auto_increment,
name varchar(20)
);
- 修改表时设置自增长列
alter table 表名称 modify column id int primary key auto_increment;
- 修改表时删除自增长列
alter table 表名称 modify column id int primary key;