基本sql语句
'''
ps:大部分程序的业务逻辑其实都是增删改查
针对库的增删改查(文件夹)
增:
create database db1;
create database db2 charset='gbk';
查:
show databases; # 查所有库
show create database db1; # 查单个库(可以看到库的编码)
改:
alter database db2 charset='utf8'; #修改db2库的编码格式
删:
drop database db2;
针对表的增删改查(文件)
注意:在操作表(文件)的时候,需要指定所在的库(文件夹)
# 查看当前所在的库的名字(NULL表示不在任何一个库下)
select database();
# 切换库
use db1;
增:
create table t1(id int,name char(10)); # 也可以用绝对路径的形式操作不同的库 create table db1.t2(id int,name char(10));
查:
show tables; # 查看当前库下面所有的表名
show create table t1; # 查单个表(可以看到表中每个字段的类型)
describe t1; # 支持简写(查单个表的信息比上面的展示信息可直观) desc t1;
改:
alter table t1 modify name char(16);
删:
drop table t1;
针对数据的增删改查(一行行数据)
一定要先有库,有表,最后才能操作数据
增:
insert into t1 values(1,'jason'); # 单条数据
insert into t1 values(1,'jason'),(2,'mike'),(3,'jack'); # 多条数据
查:
select * from t1; # 该命令当数据量特别大的时候不建议使用
select name from t1;
改:
update t1 set name='DSB' where id>1;
删:
delete from t1 where id>1;
将表所有的数据清空:
delete from t1;
'''
存储引擎
'''
日常生活中文件格式有很多种,并且针对不同的文件格式会有对应不同存储方式和处理机制(txt,pdf,word,mp4...)
针对不同的数据应该有对应的不同的处理机制来存储
存储引擎就是不同的处理机制
MySQL主要存储引擎
innodb
是mysql5.5版本及之后默认的存储引擎
支持事务 行锁 外键 存储数据更加的安全
创建表会生成两个文件
表结构文件
表数据文件
myisam
是mysql5.5版本之前默认的存储引擎
速度要比innodb更快,但是我们更加注重的是数据的安全
创建表会生成三个文件
表结构文件
表数据文件
表索引文件
memory
内存引擎(数据全部存放在内存中),断电数据丢失
创建表会生成一个文件
表结构文件
blackhole
无论存什么,都立刻消失(黑洞)
创建表会生成一个文件
表结构文件
# 查看所有的存储引擎
show engines;
# 不同的存储引擎在存储表的时候有什么异同点
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(1);
insert into t2 values(1);
insert into t3 values(1);
insert into t4 values(1); # 存储与mysql服务端内存里,重新启动mysql服务,数据就没有了
'''
创建表的语法
'''
# 语法
create table 表名(
字段名1 类型(宽度) 约束条件,
字段名2 类型(宽度) 约束条件,
字段名3 类型(宽度) 约束条件
);
# 注意:
1 在同一张表中字段名不能重复
2 宽度和约束条件是可选的(可写可不写),而字段名和字段类型是必须的
约束条件写的话,支持写多个
字段名1 类型(宽度) 约束条件1 约束条件2...,
create table t5(id); 报错,缺少类型
3 最后一行不能有逗号
create table t6(
in int,
name char,
); 报错
补充:
# 宽度
一般情况下指的是对存储数据的限制
create table t7(name char); 默认宽度是1
insert into t7 values('mike');
insert into t7 values(null); 关键字null
针对不同的版本会出现不同的效果
5.6版本默认没有开启严格模式,规定只能存一个字符,你给了多个字符,那么会自动帮你截取
5.7版本及以上或者开启了严格模式,那么规定只能存几个就不能超,一旦超过范围立刻报错
严格模式到底开不开呢?
mysql5.7之后的版本默认都是开启严格模式的
使用数据库的准则:
能尽量少的让数据库干活就尽量少,不要给数据库增加额外的压力
约束条件之not null(不能插入null)
create table t8(id int,name char not null);
insert into t8 values(1,null); 报错
宽度和约束条件到底是什么关系?
宽度是用来限制数据的存储
约束条件是在宽度的基础之上增加的额外的约束
'''
严格模式
'''
如何查看严格模式?
show variables like '%mode';
variable_name:sql_mode;value:no_engine_substitution
模糊匹配/查询
关键字:like
%:匹配任意多个字符
_:匹配任意单个字符
修改严格模式
set session 只在当前窗口有效,相当于临时修改,一旦退出就不行了
set global 全局有效
set global sql_mode='strict_trans_tables'; 设置完后重新进mysql就可以了
create table t14(name char);
desc t14;
insert into t14('jason'); 报错
insert into t14('j');
select * from t14;
'''