数据引擎 创建表完整语法,字段类型,约束条件
回顾:
1、设置密码与修改密码
mysqladmin -uroot -p password设置的密码
mysqladmin -uroot -p原密码 password新密码
2、破解密码
- 1、先关掉服务,杀死进程
- 2、跳过权限认证启动服务端
- 3、以游客的身份登录即可
3、制作服务
- 1、mysql --install
- 2、net start mysql
4、语法:
库的操作:
增:
create database 库名;
create database 库名 charset='utf8';
查:
show databases;
show create database 库名
改:
alter database 库名 charset='gbk';
删:
drop database 库名;
表的操作:
- 注意:操作表之前,需要先切换到指定的库中
语法:use 库名
增:
create table 表名(字段名 字段类型);
查:
show tables;
desc 表名;
改:
alter table 表名 modify 字段名 字段类型(16);
删:
drop table 表名;
记录的操作:
create table user_info(id int, name char(16), age int);
增:
insert into 表名 values(id字段值int, name字段值的字符串, age字段的值int);
insert into user_info values(1, 'yafeng', 18);
查:
select * from 表名;
select * from user_info;
select name from user_info;
select * from 表名 where 条件;(条件成立,则返回条件成立的记录)
select * from user_info where id=3;
改:
update 表名 set 修改的字段=字段值 where 条件判断;
update user_info set name='dsb' where id>1;
删:
# delete 可回滚
delete from 表名; #清除表中所有记录
delete from user_info;
delete from 表名 条件判断; #删除条件成立的记录
delete from user_info where id>1;
#truncate : 不可回滚
新知识:
1、存储引擎
- 存储引擎是根据不同的机制处理不同的数据
- 查看mysql中所有的引擎
- show engines;
- myisam:5.5以前老版本使用的存储引擎
- blackhole:数据进入就会消失
- innodb: 默认使用存储引擎
- 支持事务
- 行锁
- 外键
- memory:通过数据存在,断电丢失
create table t1(id int)engine=innodb;
cerete table t2(id int)engine=myisam;
cerete table t3(id int)engine=blackhole;
cerete table t4(id int)engine=memory;
=====*****可提前学习 Redis面试问的比较多*****=====
- 插入数据验证引擎的作用:
insert into t1 values(1);
insert into t2 values(2);
insert into t3 values(3);
insert into t4 values(4);
2、创建表完整的语法
# 约束条件:可有可无
# 宽度;限制某些数据类型的存储大小
create table 表名(
字段名1 字段类型(宽度) 约束条件,
字段名2 字段类型(宽度) 约束条件
);
# 初始约束条件:not null
create table teacher (
id int not null, #约束插入记录时ID不能为空
name varchar(16),
age int
);
insert into teacher values(1, 'yafeng', 18);
注意:
1、创建表的字段名不能重复
create table test(
id int,
id int
);
2、最后一个字段不能在末尾加 , 号
create table test(
id int,
age int,
);
3、字段名必须要有字段类型与宽度
create table test(
id int,
name char
);
3、字段类型
1)确定表结构
2)字段与字段类型
- 整型:
- tinyint: 默认范围 -128, 127
create table t5(
id tinyint,
name varchar(16)
);
insert into t5 values(-128, 'yafeng'), (127, 'reba');
insert into t5 values(-129, 'tank');
insert into t5 values(128, 'jason');
insert into t5 values(12, 'sean');
- int 默认范围是(-2147483648, 2147483647)
应用场景:id 号,年龄...
create table t6(
id int
);
# int 默认宽度11---->默认展示宽度
insert into t6 values(-2147483649);
insert into t6 values(2147483648);
insert into t6 values(100);
create table t7(
id int(3)
);
# 若插入超过设定宽度,则正常显示
insert into t7 values(123456);
# 若插入不足够4位,则以空格补全
insert into t7 values(1);
- bigint
- 浮点型
应用场景:工资、身高、体重...
- float
- double
- decimal
# 范围255是最大长度(包括.小数), 30代表是小数的位数
create table t8(x float(255, 30));
create table t9(x double(255, 30));
create table t10(x decimal(65, 30));
# 插入数据
# 三种浮点型:区别在于精度不一样
insert into t8 values(1.23456789666666666);
insert into t9 values(1.23456789666666666);
insert into t10 values(1.23456789666666666);
- 字符类型
- char(16):定长字符
char :手机号、身份证号、银行卡号等...
- 插入16个字符:
create table t11(
id int,
name char(4) #这里的4指的是四个字符
);
insert into t11 values(1, 'reba');
# utf8 中文3个bytes gbk 中文2个bytes
insert into t11 values(2, '亚峰牛皮');
insert into t11 values(3, '亚峰真牛皮');
优点:
存取速度快
缺点:
浪费空间(字符长度不够的情况下,会以空格作为字符填入,会浪费内存占用资源)
比如:insert into t11 values(1, 't') # 其实是t + 三个空格
- varchar(16): 不定长字符
- 存几个字符:就是几个字符的大小,每个字符前都要+ 1个bytes(用来去记录后面存放的到底是几个字符)
优点:
节省空间
create table t12(id int, name varchar(4));
insert into t12 values(1, '亚峰牛皮'); # 1bytes + 亚峰牛皮
insert into t12 values(2, 'reba'); # 1bytes + reba
insert into t12 values(3, 'sean'); # 1bytes + sean
insert into t12 values(4, 't'); # 1bytes + t
日期类型
- data:2019-12-11
- datatime:2019-12-11 16:16:16
- time: 16:16:16
- year: 2019
- timestamp: 时间戳
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, '张全蛋', '2019-11-11', '2019-11-11 11:11:11','2019', '11:11:11', null);
注意:python插入时间数据时,的转成str类型
- 枚举与集合
- enum(enumerate): 可以 多选一
create table t13(
id int,
name varchar(6),
gender enum('male', 'female', 'others')
);
#insert into 表名(字段名) values(字段名对应的值);
insert into t13(id, name, gender) values(1, 'yafeng', 'male');
# 严格模式下,选择枚举以外的值会报错
insert into t13(id, name, gender) values(2, 'gd', '人yao');
- set: 可 多选一 或 多选多
create table t14(
id int,
name varchar(6),
gender enum('male', 'female', 'others'),
hobbies set('read', 'sing', 'jump', 'rap', '会所嫩模')
);
# 多选一
insert into t14 values(1, 'tank', 'male', '会所嫩模');
# 多选多
insert into t14 values(2, 'yafeng', 'male', 'read,sing,jump,rap'); #注意:多选多中都在一个''下用,且逗号后不可有空格
# 注意:多选多的顺序可不一,因为它最后都会以一种排序方式排列
4、约束条件
- not null + unique:
create table user1(
id int not null,
name varchar(6)
);
insert into user1(id, name) values(null, 'tank');
insert into user1(id, name) values(1, 'tank');
- unique 将某个字段设置为唯一的值
# not null + unique 相当于主键
create table user2(
id int not null unique,
name varchar(4)
);
insert into user2(id, name) values(1, 'tank'), (2, 'sean');
- primary key + auto_increment: 主键 + 自增
- primary key ----> not null + unique
- pk就是标中的索引:可以通过索引快速查找某些数据
- 提高效率
# 将ID设为主键,非空且唯一
create table user3(
id int primary key,
name varchar(4)
);
insert into user3(id, name) values(1, 'tank');
insert into user3(id, name) values(2, 'tank');
- auto_increment:
#将ID设置为自增
create table user4(
id int primary key auto_increment,
name varchar(4)
);
#自增默认从0开始
insert into user4(name) values('tank');
insert into user4(name) values('sean');
insert into user4(name) values('egon');
insert into user4(name) values('dada');
#若想自增从指定值开始,可插入第一条数据时先指定ID值;
insert into user4(id, name) values(10, 'tank');
insert into user4(name) values('sean'); #11
insert into user4(name) values('egon'); #12
insert into user4(name) values('dada'); #13
- unsigned
- 无符号(值不可为负,只能大于等于0)
create table user5(
id int unsigned
);
insert into user5 values(-100); #报错的写法
insert into user5 values(0);
insert into user5 values(100);
- 有符号
create table user6(
id int
);
insert into user6 values(-100);
- zerofill
使用0填充空格
create table user7(
id int zerofill
);
insert into user7 values(100);
- 删除记录
create table user8(
id int primary key auto_increment,
name varchar(4)
);
insert into user8(name) values('tank');
insert into user8(name) values('dada'), ('egon');
- delete
# 清空user8表中的所有记录
delete from user8;
- truncate:
# 清空user8表中的所有记录,并且ID重置为0
truncate table user8;