今日内容

基本SQL语句

#数据库的增删改查
# 查看
show databases;	#查看所有数据库
show create database 数据库的名字;	#查看指定的某一个数据库

# 创建数据库
create database 数据库的名字; # 建议不要用中文

# 修改数据库的字符编码
'alter database 数据库的名字 charset='gbk'  '

# 删除数据库
drop database 数据库的名字;

	'MySQL本质就是用来远程操作文件、文件夹、数据的一款软件'
    
# 针对表的增删改查
'''
先指定在哪个库下

如何查看当前在哪个库下
	select database(); # 不在任何的库下就返回NULL
如何切换到库下
	use 数据库的名字;
'''
'******不要修改默认的MySQL数据库,也不要在默认数据库下面操作表和记录******'

# 查看
show table;				# 查看当前库下面所有的表 1
show create table 表名;	# 查看指定表的信息 2
describe 表名;			# 查看指定表的表头字段以及字段类型和其他信息 3
	=	
desc 表名;

# 增
create table 表名(id int);

# 改
alter table 表名 modify id int(4);  # 改字段的数据类型
alter table 表名 change id nid int; # 改字段名
alter table 表名 rename 新表名; 	    # 改表名

# 删
drop table 表名;

针对库 ↑↑↑

针对记录 ↓↓↓

# 针对记录的增删改查
"""
要想操作记录首先必须得有库和表
"""

# 查看
select * from 表名;   # 查看指定表里面的所有的数据 '*'表示所有
select id,User from 表名; #只能查看指定表里面的id字段和User字段下面的数据
'''
也可以在一个库下面查看其它库下面的表数据
select * from 库名.表名;
'''

# 增
insert into 表名 value(数据1,数据2);         # 按照字段顺序给表增数据
insert into 表名(字段3,字段2,字段3) values(数据1,数据2,数据3);
insert into 表名 values(数据1,数据2),(数据1,数据2),(数据1,数据2),(数据1,数据2),(数据1,数据2);

# 改
update 表名 set username='jason123' where username='jason';
'将表里username的字段jason 改成jason123'

# 删
delete from 表名 where id=1;		# 将id=1的数据全部删除
delete from 表名;					# 将整个表都删除

储存引擎

# 查看所有的存储引擎
show engines;

# 需要掌握的四个存储引擎
MyISAM 	 	# MySQL5.5版本之前默认的存储引擎
InnoDB  	# MySQL5.5版本之后默认的存储引擎(我们现在所使用的的MySQL基本都是InnoDB)
	"""
	1.支持事务
	2.支持锁(行锁)	
	3.支持外键(表与表之间创建关系  后面课程详细的讲)
	"""
BlackHole 	 # 所有放入里面的数据都会立刻消失
Memory  	# 基于内存保存数据(断电数据立刻丢失)

# 创建表的时候我们可以自定义存储引擎
create table t1(id int) engine=memory;

"""
MySQL默认是忽略大小写的
"""

MySQL中的数据类型

# 整型
tinyint(-128,127)
smallint(-256,255)
int
bigint
不同整型类型能够存储的数字最大范围不一样,并且数字有正负号,那么需要牺牲一位来存储正负号
'''验证整型默认是带正负号还是不带'''
create table t1(id tinyint);
insert into t1 values(256);
# 查看结果发现只存到了127 说明默认是带正负号的
按照上述方法依次验证其余的整型类型发现规律一致

# 规定整型不带正负号
create table t2(id tinyint unsigned);    # unsigned
insert into t2 values(256);				# 结果发现可以从最大127存到256

"""验证整型括号里面的数字表示的含义:表示的展示长度"""
create table t4(id tinyint(1));
insert into t4 values(111);
# 不够位数默认用空格填充 够了则有几位存几位
create table t5(id int);
# 不够位数用0填充 够了则有几位存几位
create table t6(id int zerofill);

"""
总结:整型括号里面的数字其实我们不需要在意,直接使用默认的位数即可
不要自己制定数字,完全没有任何意义
"""

浮点型

float(255,30)  # 总共255位小数位占30位
double(255,30)  # 总共255位小数位占30位
decimal(65,30)  # 总共65位小数位占30位

# 三者的区别在于精确度不一样
create table t7(id float(255,30));
create table t8(id double(255,30));
create table t9(id decimal(65,30));

insert into t7 values(1.111111111111111111111111111111);	# float存浮点长度最短
insert into t8 values(1.111111111111111111111111111111);	# 中等
insert into t9 values(1.111111111111111111111111111111);   # decimal存浮点最精确最长

decimal > double > float

"""
讨论:
	结合实际情况采用不同精确度的数据类型
补充:
	生活中看似有很多需要使用整型或者浮点型存储的数据
	其实内部有可能都是直接存的字符串
	在取出来的是手动转成整型 操作完毕之后再转回字符串存入
"""

字符类型

char(4)  	# 最多只能存4个字符 少了用空格填充至四个,多了直接报错
varchar(4)  # 最多只能存4个字符 少了有几个存几个,多了直接报错
'''针对字符类型括号后面的数组表示的就是存储限制'''
create table t10(username char(4));
create table t11(username varchar(4));

'''验证char在存储数据的时候是固定长度的'''
char_length()  # 用来统计字符的个数
我们在使用上述方法去统计char字段长度的时候发现无法得出正确的结论
因为MySQL内部在存储的时候确实是按照固定长度存储的,
但是在取出来的时候回自动帮你把填充的空格移除,
如果你不想让MySQL做自动的处理需要再加一个严格模式配置
set global sql_mode='STRICT_TRANS_TABLES,PAD_CHAR_TO_FULL_LENGTH';

'''验证varchar在存储数据的时候长度不是固定的'''

'''讨论char与varchar优缺点'''
char
	优点:整存整取  存取数据的速度快
     缺点:浪费存储空间
     jasonegon kevintony wusiralex 
   	 存的五位五位的存取得时候五位五位的取
varchar
	优点:节省存储空间
     缺点:存取数据的速度没有char快
     1bytes+jason1bytes+egon1bytes+kevin1bytes+tony1bytes+wusir1bytes+alex  
     存的时候需要给数据生成一个报头,取得时候先读报头再读取真实数据长度
# 问:我们以后是用char还是varchar?
	结合实际情况
    目前比较推荐使用varchar
    以前基本上使用的都是char

严格模式

我们应该做到数据如果不符合要求,不让存储直接报错
如果你的MySQL版本是5.6及以下需要你自己设置
如果你的MySQL版本是5.7及以上则不需要自己设置

# 如何查看SQL_MODEL
show variables like '%mode%';

# 修改严格模式
set global sql_mode='STRICT_TRANS_TABLES';
'''一定要退出客户端重新进入'''

时间类型

datetime	年月日时分秒
date		年月日
year		年
time		时分秒
create table t12(
    id int,
    username varchar(32),
    register_time datetime,
    birthday date,
    work_year year,
    study_time time
);
# 仅是模拟时间数据,以后都是用相应的模块获取真正的时间
insert into t12 values(
	1,'jason','2020-11-11 11:11:11','2000-1-21','2020','11:11:11'
);

枚举与集合类型

枚举	
	多选一
create table t13(
    id int,
    username varchar(32),
    gender enum('男','女','其他')
);
       
集合
	多选多(也支持多选一)
create table t14(
	id int,
    username varchar(32),
    hobby set('basketball','football','doublecolorball')
);

小补充

当一张表的字段特别多造成cmd窗口展示补全出现混乱的情况 
在查询语句的最后加上\G
select * from mysql.user\G;