昨日内容回顾
-
存取数据演变史
1.文本文件 2.目录规范 3.数据库 ps:数据处理统一
-
数据库应用史
1.本地存储 2.网络存储 ps:数据库集群
-
数据库本质
数据库在不同的场景下可能表达的意思不一样 一般情况下指代的是数据库软件 数据库软件的本质其实就是CS架构的应用程序
-
数据库的分类
1.关系型数据库 固定的表结构、数据可以建立数据库层面的关系 MySQL、Oracle、PostgreSQL、MariaDB、sqlite、sql server 2.非关系型数据库 没有固定的表结构、数据无法建立数据库层面的关系 redis、mongoDB、memcache
-
MySQL简介
1.版本问题 2.下载与安装 3.目录介绍
-
MySQL基本使用
1.先启动服务端 2.再启动客户端 ps:启动过程中可能会报错
-
系统服务制作
1.bin目录添加环境变量
2.执行添加系统服务的命令
mysqld --install
3.首次需要人为启动
net start mysql
"""
net stop mysql
mysqld --remove
"""
-
密码相关操作
1.修改密码 mysqladmin -u用户名 -p旧密码 password 新密码 set password=password('新密码') 2.忘记密码 net stop mysql mysqld --skip-grant-table mysql -uroot -p update mysql.user set password=password('新密码') where Hots='localhost' and User='root'; exit net start mysql
-
SQL与NoSQL
SQL语句 统一操作 NoSQL语句 统一操作
-
数据库重要概念
库、表、记录
-
基本SQL语句
1.SQL语句以分号结束
2.数据展示错乱可以在SQL语句结尾加\G
-----------------------------------------
show databases;
create database db1;
show create database db1;
alter database db1 charset='gbk';
drop database db1;
-----------------------------------------
use db1;
show tables;
create table t1(id int);
show create table t1;
desc t1;
describe t1;
alter table t1 rename userinfo;
-----------------------------------------
select * from userinfo;
select id,name from userinfo;
insert into userinfo values(1,'jason');
insert into userinfo values(1,'jason'),(2,'kevin'),(3,'tony');
update userinfo set name='jason666' where id=1;
delete from userinfo;
delete from userinfo where id > 3;
.
.
今日内容概要
- 字符编码与配置文件
- 数据库存储引擎
- 创建表的完整语法
- MySQL字段基本数据类型
- MySQL字段常见约束条件
补充:windows cmd 窗口中
cls命令是清屏命令,一般是在屏幕窗口中的内容较多的时候使用。
执行该命令后,屏幕上的所有信息都被清除,光标重新定位至屏幕左上角。
今日内容详细
字符编码与配置文件
1.\s查看MySQL相关信息
当前用户、版本、编码、端口号
MySQL5.6及之前的版本编码需要人为统一,之后的版本已经全部默认统一
-------------------------------------------
如果想要永久修改编码配置 需要操作配置文件
2.默认的配置文件是 my-default.ini
拷贝上述文件必须并重命名为 my.ini
-------------------------------------------
直接拷贝字符编码相关配置即可无需记忆
[mysqld] # 表示服务端的配置
character-set-server=utf8mb4 # 服务端将来采用utf8的编码方式
collation-server=utf8mb4_general_ci
[client] # 表示第三方的客户端
default-character-set=utf8mb4 # 客户端将来采用utf8的编码方式
[mysql] # mysql自己的客户端
default-character-set=utf8mb4 # 客户端将来采用utf8的编码方式
补充:
1.utf8mb4能够存储表情 功能更强大
2.utf8与utf-8是有区别的 MySQL中只有utf8
-------------------------------------------
修改了配置文件中关于[mysqld]的配置,需要重启服务端!!!
管理员模式重新打开cmd, net stop mysql 先停止服务端的运行
再启动服务端 net start mysql
再重新登录客户端,就能看成编码被改掉了
---------
修改了配置文件中关于[client]的配置或者[mysql]的配置,就不需要重启服务端
-------------------------------------------
.
mysql 5.6 版本内部默认编码就是混乱的,既有拉丁编码又有gbk编码,会可能产生乱码
.修改配置文件,先停止mysql的系统服务,再启动mysql的系统服务。再登录客户端,\s查看信息时就能看到编码被改掉了!!!就不会出现乱码的情况了!!!
.
在服务端的配置文件里面加一行 print('hello world'),退出服务端,在进入服务端
.
注意在配置文件中[mysql]下面,针对mysql的配置,每一次输入mysql客户端相关的命令时,都会加载配置文件中[mysql]下面的配置,所以一旦加载到不认识的命令时,就会报错!!导致登录不进去了
.
.
利用配置文件我们可以偷懒!!!!!!
将管理员登录的账号密码直接写在配置文件中,这样使用mysql登录就直接变成管理员登录了,而不是游客模式登录了!!!
[mysql]
default-character-set=utf8mb4
user='root'
password=222
.
.
.
数据库存储引擎
补充:MySQL默认忽略英文的大小写,也可以改,但不推荐改!
存储引擎: 数据库针对数据采取的多种存取方式
-----------------------------
查看mysql能够切换的引擎名称 的命令 show engines;
-----------------------------
需要了解的四个存储引擎
MyISAM
MySQL5.5之前默认的存储引擎!!!!!!
存取数据的速度快 但是功能较少 安全性较低!!!!!!
-------------------------------------------
InnoDB
MySQL5.5之后默认的存储引擎!!!!!!
支持事务、行锁、外键等操作 存取速度没有MyISAM快 但是安全性更高!!!
--------------------------------------------
Memory
基于内存存取数据 仅用于临时表数据存取!!!!!!
--------------------------------------------
BlackHole
任何写入进去的数据都会立刻丢失!!!!!!
主要做一些集群备份的时候数据的处理(了解即可)
--------------------------------------------
查看mysql能够切换的引擎名称!!!
.
了解不同存储引擎底层对应的文件个数
create database helloworld;
use helloworld;
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;
-------------------------------------------------------
1.innodb引擎 对应两个文件
.frm 表结构
.ibd 表数据与表索引(加快数据查询的)
------
2.myisam引擎 对应三个文件 由于分工分的更细,所以速度比innodb快点
.frm 表结构
.MYD 表数据
.MYI 表索引
------
3.memory引擎 对应一个文件 由于是基于内存存储数据的,所以不需要有表数据文件,有一个表结构文件就行了
.frm 表结构
------
4.blackhole引擎 对应一个文件
.frm 表结构
-------------------------------------------------------
insert into t1 values(1);
insert into t2 values(1);
insert into t3 values(1); # 内存清掉,插入的数据就没了
insert into t4 values(1); # 往里面插入任何数据,数据都会丢!!!
.
.
.表t3由于用的引擎是memory,该引擎是基于内存的,所以把服务端关掉内存就清掉了,再重新登录一下,t3里面刚刚插入的数据就没了!!!
.
.
文件:是操作系统暴露给用户操作硬盘的快捷方式!!!
.
.
.
创建表的完整语法
create table 表名(
字段名 字段类型(数字) 约束条件,
字段名 字段类型(数字) 约束条件,
字段名 字段类型(数字) 约束条件
);
-------------------------------
字段比较多可以换行编写!!!
注意事项:
1.字段名和字段类型是必须的!!!
2.数字和约束条件是可选的!!!
3.约束条件也可以写多个,空格隔开即可!!!
4.最后一行结尾不能加逗号!!!
--------------------------------
ps:编写SQL语句报错之后不要慌 仔细查看提示 会很快解决
near ')' at line 7
。
。
。
。
。。
。
。
字段类型之整型
tinyint 1bytes 正负号(占1bit)
smallint 2bytes 正负号(占1bit)
int 4bytes 正负号(占1bit)
bigint 8bytes 正负号(占1bit)
验证整型默认是否携带正负号
create table t5(id tinyint);
insert into t5 values(-129),(128);
结果是-128和127 也就意味着默认自带正负号
我们也可以取消正负号
create table t6(id tinyint unsigned);
insert into t6 values(-129),(128),(1000);
严格模式
当我们在使用数据库存储数据的时候 如果数据不符合规范 应该直接报错而不是擅自修改数据 这样会导致数据的失真(没有实际意义)
正常都应该报错 但是我们之前不小心改了配置文件
show variables like '%mode%';
1.临时修改
set session sql_mode='strict_trans_tables';
在当前客户端有效
set global sql_mode='strict_trans_tables';
在当前服务端有效
2.永久修改
直接修改配置文件
字段类型之浮点型
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
字段类型之字符类型
char
定长
char(4) 最多存储四个字符 超出就报错 不够四个空格填充至四个
varchar
变长
varchar(4) 最多存储四个字符 超出就报错 不够则有几位存几位
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的存储会自动填充空格和删除空格
set global sql_mode='strict_trans_tables,pad_char_to_full_length';
char VS varchar
char
优势:整存整取 速度快
劣势:浪费存储空间
varchar
优势:节省存储空间
劣势:存取数据的速度较char慢
jacktonyjasonkevintomjerry
1bytes+jack1bytes+tony1bytes+jason1bytes+kevin1bytes+tom1bytes+jerry
"""
char与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:以后涉及到日期相关字段一般都是系统自动回去 无需我们可以操作
标签:insert,python,create,--,values,mysql,table,into
From: https://www.cnblogs.com/tengyifan888/p/16919148.html