"""针对库的增删改查"""
创建新库
Create database db1;
Show craate database db1; 查看数据表的描述
alter database db1 charset = ‘gbk’; 修改表的编码类型
drop data db1; 删除表
"""针对表的增删改查"""
# 如何查看当前所在的库
Select database();
切换当前所在的库
use db1;
Create table t1(id int, name char(16)); 创建t1表 表字段名 id,字段类型 int
Show tables; 查看所有的表
Show create table t1; 查看表名为t1 的表结构
Desc t1; 和上面的代码意思是一样的
Alter table t1 modify name char(16); 修改表字段类型宽度
Drop table t1; 删除表单
insert into t1 values(1,’jason’),(2,’tank’); 向表t1插入两个相关信息
Select * from t1; 查看t1表中的所有数据
select name from t1; 查看t1表中的name 字段数据
Update t1 set name=‘dsb’ where name = ‘jason’; 更新或修改 t1表中 name=Jason的数据为dsb
delete from t1; 清空表单
delete from t1 where id > 1; 删除t1表中 id字段大于1的数据
show engines; 查询所有的存储引擎
创建表的完整语法
create table 表名(
字段名1 类型(宽度) 约束条件,
字段名2 类型(宽度) 约束条件,
字段名3 类型(宽度) 约束条件
);
1 修改表名
alter table 表名 rename 新表名;
2 增加字段
alter table 表名 add 字段名 字段类型(宽度) 约束条件;
alter table 表名 add 字段名 字段类型(宽度) 约束条件 first;
alter table 表名 add 字段名 字段类型(宽度) 约束条件 after 字段名;
3 删除字段
alter table 表名 drop 字段名;
4 修改字段
alter table 表名 modify 字段名 字段类型(宽度) 约束条件;
alter table 表名 change 旧字段名 新字段名 字段类型(宽度) 约束条件;
# 复制表
create table 表名 select * from 旧表; 不能复制主键 外键 ...
create table new_dep2 select * from dep where id>3;
约束条件 可以是多个
not null 不为空的
unsinged 无符号(理解为正数)
zerofill() 使用0填充
default 默认值
unique 唯一 可以使用联合唯一比如ip和port unique(ip,port)
primary key 主键
单单从约束效果上来看primary key等价于not null + unique
非空且唯一!!!
1 一张表中有且只有一个主键 如果你没有设置主键 那么会从上往下搜索直到遇到一个非空且唯一的字段将它自动升级为主键
2 如果表中没有主键也没有其他任何的非空且唯一字段 那么Innodb会采用自己内部提供的一个隐藏字段作为主键,隐藏意味着你无法使用到它 就无法提示查询速度
3 一张表中通常都应该有一个主键字段 并且通常将id/uid/sid字段作为主键
4 联合主键(多个字段联合起来作为表的主键 本质还是一个主键) primary key(ip,port)
delete from t1 删除表中数据后 主键的自增不会停止
truncate t1 清空表数据并且重置主键
auto_increment 自增 注意auto_increment通常都是加在主键上的 不能给普通字段加
foreign key 外键 (day45 有详细的讲解教程)
create table dep(
id int primary key auto_increment,
dep_name char(16),
dep_desc char(32)
);
create table emp(
id int primary key auto_increment,
name char(16),
gender enum('male','female','others') default 'male',
dep_id int,
foreign key(dep_id) references dep(id)
on update cascade # 同步更新
on delete cascade # 同步删除
);
### 严格模式
如何查看严格模式
show variables like "%mode";
模糊匹配/查询
关键字 like
%:匹配任意多个字符
_:匹配任意单个字符
# 修改严格模式
set session 只在当前窗口有效
set global 全局有效
set global sql_mode = 'STRICT_TRANS_TABLES';
修改完之后 重新进入服务端即可
# 存储限制
float(255,30) # 总共255位 小数部分占30位
double(255,30) # 总共255位 小数部分占30位
decimal(65,30) # 总共65位 小数部分占30位
float < double < decimal 这个是对比的精准度
# 再次修改sql_mode 让MySQL不要做自动剔除操作
set global sql_mode = 'STRICT_TRANS_TABLES,PAD_CHAR_TO_FULL_LENGTH';
### 时间类型
* 分类
date:年月日 2020-5-4
datetime:年月日时分秒 2020-5-4 11:11:11
time:时分秒11:11:11
Year:2020
### 枚举与集合类型
* 分类
```python
"""
枚举(enum) 多选一
集合(set) 多选多
"""
```
* 具体使用
```python
create table user(
id int,
name char(16),
gender enum('male','female','others')
);
insert into user values(1,'jason','male'); 正常
insert into user values(2,'egon','xxxxooo'); 报错
# 枚举字段 后期在存数据的时候只能从枚举里面选择一个存储
create table teacher(
id int,
name char(16),
gender enum('male','female','others'),
hobby set('read','DBJ','hecha')
);
insert into teacher values(1,'jason','male','read'); 正常
insert into teacher values(2,'egon','female','DBJ,hecha'); 正常
insert into teacher values(3,'tank','others','生蚝'); 报错
# 集合可以只写一个 但是不能写没有列举的