表相关操作
表相关操作
1、存储引擎
1、存储引擎:是用于根据不同的机制处理不同的数据
2、查看MySQL中所有的引擎
show engines;
3、存储引擎几种常见类型
- innodb:默认使用的引擎
- 支持事务
- 行锁
- 外键
- myisam:5.5之前的老版本使用的引擎
- memory:通电数据存在,断电丢失
- blackhole(黑洞):类似于队列中的数据,存进去即消失
插入数据验证引擎的作用:
使用不同引擎:
use db1;
create table t1(id int)engine=innodb;
create table t2(id int)engine=myisam;
create table t3(id int)engine=blackhole;
create table t4(id int)engine=memory;
插入数据验证:
insert into t1 values(111);
insert into t2 values(222);
insert into t3 values(333);
insert into t4 values(444);
关闭服务器重启后
2、创建表完整的语法
约束条件:可有可无
宽度:限制某些数据类型的存储大小
create table 表名(字段名1 字段类型(宽度) 约束条件,字段名2 字段类型(宽度) 约束条件);
初始约束条件:not null # 约束插入记录时不能为空
例:create table t5(id int not null,name varchar(16));
insert into t5 values(null,'张全蛋');
》》》ERROR 1048 (23000): Column 'id' cannot be null
insert into t5 values(1,'张全蛋');
注意:
1、创建表字段名不能重复
create table test(id int,id int);
2、创建最后一个字段不能在末尾加 ,号
create table test(id int,name varchar(18),);
3、字段名必须要有字段类型与宽度,整型默认宽度是11,char默认宽度是1
3、字段类型
1、确定表结构
2、字段与字段类型
1、整型:
tinyint:默认范围(-128,127)
create table t5(id tinyint);
insert into t5 values(-128),(127);
插入id为空严格模式下会报错,非严格模式下不会报错但是无法插入数据,5.6.4版本为非严格模式,插入会成功插入但是会自动将值限定在范围内
insert into t5 values(-129);
insert into t5 values(128);
int:默认范围是(-2147483648, 2147483647)
create table t6(id int);
insert into t6 values(-2147483648),( 2147483647);
插入id为空严格模式下会报错,非严格模式下不会报错但是无法插入数据,5.6.4版本为非严格模式,插入会成功插入但是会自动将值限定在范围内
insert into t6 values(-2147483649);
int默认宽度是11,可设置宽度,若插入记录数据超过设置宽度,则正常显示,插入不足则会以空格补全
2、浮点型
1、float(宽度最大255)
2、double(宽度最大255)
3、decimal (宽度最大65)
字段特点(255,30)前一个数255代表最大的长度(包括小数),30代表是小数的位数
这三种浮点型区别:精确度逐渐增高
create table t8(sal float(255,30));
create table t9(sal double(255,30));
create table t10(sal decimal(65,30));
insert into t8 values(1.111111111111111111111111111111);
insert into t9 values(1.1111111111111111111111111111);
insert into t10 values(1.1111111111111111111111111111);
3、字符类型
char(16);指定定长字符16
create table t11(name char(16));
insert into t11 values('沈'); # 沈+15个空格
优点:存取速度快
缺点:浪费空间
varchar(16): 不定长字符
存几个符,就是几个字符的大小,每个字符前都要有+1bytes
优点:节省空间
create table t12(name varchar(4));
insert into t12 values('a') # 1bytes+a
4、日期类型
date:2019-12-11
datetime: 2019-12-10 11:11:11
time:11:11:11
year:2019
timestamp:时间戳,用null自动记录当前时间,每次对那一条记录操作则会改变
create table student(id int,name varchar(4),birth date,register datetime,work_time year,t_time time,update_time timestamp);
insert into student values(1,'张全蛋','2000-12-11','2010-11-11 11:11:11','2019','11:11:12',null);
注意:python插入时间数据时,转成str类型
5、枚举与集合
enum:可以 多选一
create table t13(id int,name varchar(4),gender enum('male','female'));
insert into t13 values(1,'shen','male');
严格模式下,选择枚举以外的数据会报错
set:可以 多选一 或者多选多
create table t14(id int,name varchar(6),gender enum('male','female'),hobbies set('read','study','play'));
多选一
insert into t14 values(1,'tate','male','play');
多选多,顺序可不一致,按照创建的顺序自动排序
insert into t14 values(2,'shen','male','study,play,read');
严格模式下,选择集合以外的数据会报错
4、约束条件
1、not null:设置不能为空
create table u1(id int not null);
insert into u1(id) values(1);
insert into u1(id) values(null); >>> ERROR 1048 (23000): Column 'id' cannot be null
2、unique:设置为唯一值(如果设置为null,可以重)
create table u2(id int unique,name varchar(4));
insert into u2 values(1,'shen');
insert into u2 values(1,'tate'); >>> ERROR 1062 (23000): Duplicate entry '1' for key 'id'
insert into u2 values(null,'shen');
insert into u2 values(null,'tate');
3、primary key ==》not null + unique :主键
pk就是表中的索引:可以通过索引快速查找某些数据,提高查询效率
将id设为主键,非空且唯一
create table u3(id int primary key,name varchar(4));
insert into u3 values(1,'tank');
insert into u3 values(2,'sean');
4、auto_increment:自增
需要与key连用,将指定的字符段会自动排序,不写指定的字符段会默认从1开始,指定一个值后面不写会自增
与unique连用,将指定的字符段会自动排序,不写指定的字符段会默认从1开始,指定一个值后面不写会自增
与primary key连用,不写指定的字符段会默认从1开始,也可以指定一个值后面不写会自增
create table u4(id int unique auto_increment,name varchar(4));
insert into u4(name) values('a');
insert into u4(name) values('c');
create table u5(id int primary key auto_increment,name varchar(4));
insert into u5(name) values('a');
insert into u5 values(3,'b');
insert into u5(name) values('c');
-
删除记录
delete from 表名;# 清空表中所有的记录,下次添加数据id默认从清空前开始
delete from u5;
insert into u5(name) values('d');
truncate table 表名;# 清空所有的记录,并且id重置为0
truncate table u4;
insert into u4(name) values('f');
5、unsigned:无符号
create table u6(id int unsigned);
insert into u6 values(-10); >>>ERROR 1264 (22003): Out of range value for column 'id' at row 1
insert into u6 values(0);
6、zerofill:使用0填充空格
create table u7(id int zerofill);
insert into u7 values(123);
7、default:约束默认值
create table u8(pwd varchar(20) default '000000');
5、严格模式
设置严格模式(管理员模式进入客户端修改)
1、查看数据库配置中变量名包含mode的配置参数:
show variables like "%mode%";
2、修改安全模式:
set session; # 局部有效,只在你当前操作的窗口有效
set global session; # 全局有效,永久有效
3、修改完之后退出当前客户端重新登录即可
set global sql_mode="strict_trans_tables,only_full_group_by";