数据库定义语言DDL(Data Definition Language)
- 库和表的管理
创建、修改、删除
create alter drop
- 库的创建(data文件夹下)
create database if not exists 数据库名;
- 库的修改
基本不修改
字符集修改:alter database 库名 character set 字符集;
- 库删除
drop database if exists 库名;
- 表的创建
create table 表名(
列名 列的类型【(长度)约束】,
列名 列的类型【(长度)约束】,
列名 列的类型【(长度)约束】,
…
)
- 表的修改
修改列名
alter table 表名 change column 旧列名 新列名 类型;
修改列的类型和约束
alter table 表名 mudify column 列名 新类型/约束;
添加列
alter table 表名 add column 列名 类型;
删除列
alter table 表名 drop column if exists 列名;
修改表名
alter table 表名 rename to 新表名;
删除表
drop table 表名;
显示库里所有表
show tables;
复制表结构(可跨库)
create table 复制的新表名 like 被复制表;
复制表结构和数据(可跨库)
create table 复制的新表名
select 字段 from 被赋值表 where 筛选条件;
- 常见数据类型介绍
- 数值型
整型
tinyint、smallint,mediumint、int/integer、bigint
1 2 3 4 8 字节
特点:默认有符号,unsigned设置无符号
小数
定点数:dec(M,D)、decimal(M,D)
浮点数:flout(M,D)、double(M,D)
float 、double
4 8 字节
特点:M数值总位数
D小数点后保留多少位,结果位数多则四舍五入
定点数精确度更高
原则:选择类型越简单越好,保存数值长度越短越好
- 字符型
较短文本:char、varchar
较长文本:text、blob(较长的二进制数据)
特点
char(M) M省略默认为1 固定长度字符 耗费空间 效率高
varchar(M) M不能省略 可变长度字符 节省空间 效率低
3、日期型
date 4字节 年月日
datetime 8 年月日时分秒 1000-9999 不受时区影响
timestamp 4 时间戳 1970-2038 受时区影响
time 3 时分秒
year 2 年
- 常见约束
目的:保证数据的准确和可靠性
六大约束
not null
default
primary key
unique
check:mysql不支持
foreign key
添加约束的时机:
- 创建表
- 修改表
约束的添加分类:
- 列级约束
- 表级约束
一、创建表时添加约束
例如:
create table 表名(
字段名 字段类型 列级约束,
字段名 字段类型,
表级约束
)
表级约束:(注意约束写法)
CONSTRAINT pk PRIMARY KEY(id),
CONSTRAINT uq UNIQUE(name)
CONSTRAINT fk_name forgien key(外键) references 关联表(关联表主键)
查看表级约束
show index from 表名;
主键和唯一对比
主键:内容唯一性 不能为空 列只能有一个 不推荐组合使用
唯一:内容唯一性 能为空 列可不唯一 不推荐组合使用
外键
- 要求在从表设置外键关系
- 从表的外键列的类型和主表的关联列类型一致或兼容
- 主表的关联列一般是key(主键或唯一)
- 插入数据先插入主表再插入从表,删除顺序相反
二、修改表时添加约束
1、添加非空约束
列级约束
ALTER TABLE 表名 MODIFY COLUMN 列名 类型 约束;
表级约束
ALTER TABLE 表名 ADD 约束(字段名);
添加外键
ALTER TABLE 表名 ADD CONSTRAINT fk_name forgien key(外键) references 关联表(关联表主键)
- 修改表时删除约束
- 删除非空约束
alter table 表名 modify column 字段名 类型 null;
- 删除默认约束
alter table 表名 modify column 字段名 类型;
- 删除主键
alter table 表名 drop primary key;
- 删除唯一
alter table 表名 drop index 唯一键名;
- 删除外键
alter table 表名 drop foreign key 外键名;
标识列:auto_increment
自增长,不用手动插入,系统提供默认标识值
插入时直接写null或者不写
增长的步长默认为1,起始值默认为1
注意:至多有一个标识列;类型为数值型;
新建、修改表时设置标识列和删除标识列和约束类似;