python入门基础之数据库

字符编码与配置文件

  • 在mysql中,有时候我们在输入中文时会出现乱码的现象,这是因为编码的问题。img
  • 我们输入\s先查看数据库的基本信息(用户、字符编码),可以发现有拉丁编码和GBK编码,由于5.6版本编码不统一会造成乱码,我们需要统一修改为utf8

img

my-default.ini  #windows下mysql默认的配置文件
在此之前我们要先创建一个.ini文件,在里面添加下面的代码保存即可。

#添加字符编码相关的配置
[mysqld]
    character-set-server=utf8mb4
    collation-server=utf8mb4_general_ci
[client]
    default-character-set=utf8mb4
[mysql]
    default-character-set=utf8mb4

img

  • 重启完服务端我们再次运行\s查看编码,会发现编码已经被我们改成了utf8

img

  • 偷懒操作,在配置文件中的mysql下提前写好用户名和密码之后直接mysql登录(在my.ini中)

img

存储引擎

简单理解就是存储引擎针对相同的数据采用不同的存储策略
show engine;#查看所有的存储引擎

img

主要的四个存储引擎

MyISAM
    MySQL5.5之前默认的存储引擎
    存取数据的速度快 但是功能较少 安全性较低
InnoDB
    MySQL5.5之后默认的存储引擎
    支持事务、行锁、外键等操作 存取速度没有MyISAM快 但是安全性更高
Memory
	基于内存存取数据 仅用于临时表数据存取
BlackHole
	任何写入进去的数据都会立刻丢失

#了解不同存储引擎底层文件个数
"""ps:MySQL中默认是大小写不敏感的(忽略大小写)"""
create database db2;
use db2;
create table t1(id int) engine=innodb;
create table t2(id int) engine=myisam;
create table t3(id int) engine=memory;
create table t4(id int) engine=blackhole;
ps:windows cmd终端鼠标右键的意思就是粘贴

insert into t1 values(1);
insert into t2 values(1);
insert into t3 values(1);
insert into t4 values(1);
#t1,t2中的内容是可以永久保存的,而t3的内容是临时保存的,t4根本就不保存。

运行结束查看文件夹可以看到有这些文件:

img

InnoDB
     .frm    表结构
     .ibd    表数据、表索引(加快数据查询)
MyISAM
     .frm    表结构
     .MYD    表数据
     .MYI    表索引(加快数据查询)
Memory
      .frm    表结构
BlackHole
      .frm    表结构

创建表的完整语法

create table 表名(
	字段名 字段类型(数字) 约束条件,
	字段名 字段类型(数字) 约束条件,
 	字段名 字段类型(数字) 约束条件
);
1.字段名和字段类型是必须的
2.数字和约束条件是可选的
3.约束条件也可以写多个 空格隔开即可
4.最后一行结尾不能加逗号
ps:编写SQL语句报错之后不要慌 仔细查看提示 会很快解决 

字段类型之整型

img

验证整型默认是否携带正负号
	create table t5(id tinyint);
    insert into t5 values(-129),(128);
结果是-128和127,也就意味着默认自带正负号

自定义移除负号
  '''unsigned 约束条件之一 意思是不需要负号'''
	create table t6(id tinyint unsigned);
    insert into t6 values (-129),(128),(1000);

严格模式

当我们在使用数据库存储数据的时候,如果数据不符合规范,应该直接报错而不是擅自修改数据,这样会导致数据的失真(没有实际意义)

方式1:命令临时修改
	set session sql_mode='strict_trans_tables'
    #当前客户端操作界面有效
	set global sql_mode='STRICT_TRANS_TABLES'
    #服务端不重启永久有效

方式2:配置文件永久修改
	[mysqld]
		sql_mode='STRICT_TRANS_TABLES'

字段类型之浮点型

img

主要认识有float、double、decimal三种浮点型,三者都可以存储浮点型数据,但是各自的精确度不一致。
float(20,10)
	总共存储20位数 小数点后面占10
double(20,10)
	总共存储20位数 小数点后面占10
decimal(20,10)
	总共存储20位数 小数点后面占10
# 第一个数表示总共多少位 第二个数表示小数占多少位

验证精确度问题
create table t7(id float(60,20));
create table t8(id double(60,20));
create table t9(id decimal(60,20));
insert into t7 values(1.11111111111111111111);
insert into t8 values(1.11111111111111111111);
insert into t9 values(1.11111111111111111111);

精确度排序:  float < double < decimal
ps:
  一般情况下float足够使用了
  如果想追求非常完美的精确度,可以使用字符串来代替

字段类型之字符类型

char 定长
	char(4)  最多存储四个字符 超出就报错 不够四个空格填充至四个
varchar 变长
	varchar(4) 最多存储四个字符 超出就报错 不够则有几位存几位
#sql_mode='strict_trans_tables'  要写在配置文件中

create table t10(id int, name char(4));
create table t11(id int, name varchar(4));
insert into t10 values(1, 'jason1');
insert into t11 values(1, 'jason2');
ps:
    char_length()获取字段存储的数据长度
    默认情况下mysql针对char的存储会自动填充空格和删除空格
    如果想取消该机制需要sql_mode set global
set global sql_mode='strict_trans_tables,pad_char_to_full_length';
上述目录是替换 不是新增 所以之前的配置也要写上

char VS varchar
    char
        优势:整存整取 速度快
        劣势:浪费存储空间
	 varchar
		优势:节省存储空间 
		劣势:存取数据的速度较char慢
"""
     char(4)
         a son jacktom lili
     varchar(4)
         1bytes+a1bytes+son1bytes+jack1bytes+tom1bytes+lili
         存取数据都需要操作报头(耗时)
     
     存储人的姓名>>>:varchar
     """
# char与varchar的使用需要结合具体应用场景,两者使用频率都很高,现在默认很多时候是varchar

数字的含义

数字在很多地方都是用来表示限制存储数据的长度 
	但是在整型中数字却不是用来限制存储长度
create table t12(id int(3)); 不是用来限制长度
insert into t12 values(12345);

create table t13(id int(5) zerofill);  而是用来控制展示的长度
insert into t13 values(123),(123456789);

create table t14(id int);

"""以后写整型无需添加数字"""

字段类型之枚举与集合

枚举
	多选一
	create table t15(
    	id int,
      	name varchar(32),
       gender enum('male','female','others')
    );
 	insert into t15 values(1,'tony','猛男');
  	insert into t15 values(2,'jason','male');
 	insert into t15 values(3,'kevin','others');

集合
	多选多(多选一)
	create table t16(
    	id int,
      	name varchar(16),
       hobbies set('basketabll','football','doublecolorball')
    );
 	insert into t16 values(1,'jason','study');
 	insert into t16 values(2,'tony','doublecolorball');
	insert into t16 values(3,'kevin','doublecolorball,football');

字段类型之日期类型

datetime		年月日时分秒
date			年月日
time			时分秒
year			年

create table t17(
	id int,
  	name varchar(32),
 	register_time datetime,
 	birthday date,
 	study_time time,
 	work_time year
);
insert into t17 values(1,'jason','2000-11-11 11:11:11','1998-01-21','11:11:11','2000');
ps:以后涉及到日期相关字段一般都是系统自动回去 无需我们可以操作

原文地址:http://www.cnblogs.com/zhiliaowang/p/16919769.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性