基本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; '''