库的管理
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 table 表 modify column 字段名 字段类型 约束 auto_increment
3.删除标识列
alter table 表 modify 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
相关文章