嘘~ 正在从服务器偷取页面 . . .

MySQL数据库(四)——DDL语言


库的管理

1.创建库

create database 库名;
# 也可以
create database if not exists 库名;

2.修改库

若想修改库名则需要到C:\ProgramData\MySQL\MySQL Server 8.0\Data中找到相应的库名进行修改

更改库的字符集

alter database 库名 character set gbk;

3.删除库

drop database 库名;
# 也可以
drop database if exists 库名;

表的管理

1.创建表

create table if not exists 表名(
    列名 列的类型[(长度),约束]
    列名 列的类型[(长度),约束]
    列名 列的类型[(长度),约束]
    列名 列的类型[(长度),约束]
    ...
);create table 表名(
    列名 列的类型[(长度),约束]
    列名 列的类型[(长度),约束]
    列名 列的类型[(长度),约束]
    列名 列的类型[(长度),约束]
    ...
);

案例:创建book表

create table book(
    id int,
    bname varchar(20),
    price double,
    authorid int,
    publishdate datetime
);

案例:创建author表

create table author(
    id int,
    au_name varchar(20),
    nation varchar(10)
);

2.修改表

修改列名

alter table 表名 change column 原列名 新列名 新的列类型;

修改列的类型或约束

alter table 表名 modify column 列名 列类型;

添加列

alter table 表名 add column 列名 列类型;

删除列

alter table 表名 drop column 列名;

修改表名

alter table 表名 rename to 新表名;

3.删除表

drop table 表名;
drop table if exists 表名;

4.复制表

# 仅仅复制表的结构
create table 表名 like 被复制表名;

# 复制表的结构加数据
create table 表名
select * from 被复制表名;

# 复制部分内容
create table 表名
select 列名1,列名2...
from 被复制表名
where 筛选条件;

# 复制部分结构
create table 表名
select 列名1,列名2...
from 被复制表名
where 不可能成立的筛选条件;

数据类型

数值型

1.整型

整数类型 tinyint smallint mediumint int bigint
字节 1 2 3 4 8

特点

1.默认有符号,通过unsigned设置无符号
2.如果超出了范围,会报out or range异常,插入临界值
3.长度可以不指定,默认会有一个长度
长度代表显示的最大宽度,如果不够则左边用0填充,但需要搭配zerofill,并且默认变为无符号整型

2.小数

浮点数类型 字节
float 4
double 8
定点数类型 字节
DEC(M,D) M+2

浮点数

float (M,D)
double (M,D)

定点数

DEC (M,D)
decimal (M,D)

特点

1.M代表整数部位+小数部位的个数,D代表小数部位
2.如果超出范围,则报out or range异常,并且插入临界值
3.M和D都可以省略,但对于定点数,M默认为10,D默认为0
4.如果精度要求较高,则优先考虑使用定点数

3.字符型

字符串类型 最多字符数
char (M) M
varchar (M) M

char:固定长度的字符,最大长度不能超过M,其中M可以省略,默认为1
varchar:可变长度的字符,最大长度不能超过M,其中M不可以省略

其他

1.binary和varbinary用于保存较短的二进制
2.enum用于保存枚举
3.set用于保存集合

4.日期型

日期和时间类型 字节
date 4
datetime 8
timestamp 4
time 3
year 1

注意:timestamp 比较容易受时区、语法模式、版本的影响,更能反映当前时区的真实时间

常见的约束

常见约束

NOT NULL:非空,该字段的值必填
UNIQUE:唯一,该字段的值不可重复
DEFAULT:默认,该字段的值不用手动插入有默认值
CHECK:检查,mysql不支持
PRIMARY KEY:主键,该字段的值不可重复并且非空  unique+not null
FOREIGN KEY:外键,该字段的值引用了另外的表的字段

主键和唯一的区别

保证唯一性 是否允许为空 一个表可以有几个 是否允许组合
主键 × 一个
唯一 多个

外键的特点

1.要求在从表设置外键关系
2.从表外键列的类型与主表关联列的类型一致,名称无要求
3.主表中的关联列必须是一个key(一般是主键或唯一)
4.插入数据时,先插入主表,再插入从表
5.删除数据时,先删除从表,再删除主表

添加约束的时机

  • 创建表时
  • 修改表时

注意

支持类型 是否可以起约束名
列级约束 除了外键 不可以
表级约束 除了非空和默认 可以,但对主键无效

创建表时添加约束

1.添加列级约束

create database students;
Use students;
create table stuinfo(
    id int primary key, #主键
    stuName varchar(20) not null, #非空
    gender char(1) check(gender='男' or gender='女'), #检查
    seat int unique, #唯一
    age int default 18 #默认约束
);

#可以查看表结构
desc stuinfo;
#可以查看所有的索引(主键,外键,唯一)
show index from stuinfo;

2.添加表级约束

create table 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='女'), #检查
    constraint fk_stuinfo_major foreign key(majorid) references major(id)    
);

修改表时添加或删除约束

create table stuinfo(
    id int,
    stuName varchar(20),
    gender char(1),
    seat int, 
    age int,
    majorid int
);
create table major(
    id int primary key,
    majorName varchar(20)
);

1.添加或删除非空约束

# 添加
alter table stuinfo modify column stuName varchar(20) not null;
# 删除
alter table stuinfo modify column stuName varchar(20);

2.添加或删除默认约束

# 添加
alter table stuinfo modify column age int default 18;
# 删除
alter table stuinfo modify column age int;

3.添加或删除主键约束

# 添加
alter table stuinfo modify column id int primary key;
# 也可以
alter table stuinfo add primary key(id);
# 删除
alter table stuinfo modify column id int# 也可以
alter table stuinfo drop primary key;

4.添加或删除唯一约束

# 添加
alter table stuinfo modify column seat int unique;
# 也可以
alter table stuinfo add unique(seat);
# 删除
alter table stuinfo modify column seat int;
# 也可以
alter table stuinfo drop index seat;

5.添加或删除外键约束

# 添加
alter table stuinfo add constraint fk foreign key(majorid) references major(id);
# 删除
alter table stuinfo drop foreign key fk;

自增长列

又称为标识列

含义:可以不手动插入值,系统提供默认序列值

1.创建表时设置标识列

drop table if exists tab_identity;
create table if not exists tab_identity(
    id int primary key auto_increment,
    name varchar(20)
);
insert into tab_identity(id,name) values(Null,"Aiden");
insert into tab_identity(name) values("Brian");
select * from tab_identity;

2.修改表时设置标识列

alter tablemodify column 字段名 字段类型 约束 auto_increment

3.删除标识列

alter tablemodify column 字段名 字段类型 约束 

如何修改自增步长和起始值:

show variables like "%auto_increment%";
起始值(auto_increment_offset):mysql不支持修改
修改自增步长(auto_increment_increment)set auto_increment_increment=步长;
# 注意这样会使当前所有的表的步长全部被修改

特点

1.标识列不一定和主键搭配,但要求是一个key
2.一个表中只能有一个标识列
3.标识列的类型只能是数值型,一般是int

如果有其他问题欢迎留言或邮件提问

QQ:1269112498

Email:1269112498@qq.com

相关文章


文章作者: 刘天翼
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 刘天翼 !
评论
  目录