day54

内容回顾:
一.MySql是基于C/S端的一个软件
1.安装
2.初始化 mysqld --initialize -insecure
3.mysqld -install 安装windows服务 mysqld -remove 卸载服务
4.net start mysql 开启服务 net stop mysql 关闭服务
5.mysql -uroot -p 登陆

二.破解密码
跳过授权表破解密码 mysqld -skip -grant -tables

三.同一字符串编码
my.ini
一定要重启MySQL服务器

host localhost 或者127.0.0.1
port 3306
四.常用的sql语句

查看所有的数据库
show databases;

创建数据库
create database db1;

使用数据库
use db1;

创建表
create table s1(id int,name char(20));

插入数据
insert into s1 values(1,"娜扎"),(2,'alxe');

查看表的结构
desc s1;

数据驱动视图

今日内容:
1.数据类型
数值类型 tinyint int bigint
小整数 整数 大整数
一个字节 四个字节 八个字节
默认是有符号的(-128,127)

无符号的(0,255)
unsigned:给当前的字段设置约束
create table t2(x tinyint unsigned);

int类型后面的存储时显示宽度,而不是粗存宽度

zerofill用0填充
create table t4 (id int(5) unsigned zerofill);

浮点型:
float 单精度 随着小数的增多,精度变得不准确
double 双精度 同上但是要比float精度要高
decimal 精准 内部原理是以字符串形式去存
(m,d) 准确的小数值,m时整数部分总个数(符号不算),d时小数点后个数 m的最大值为65,d最大值为30.
随着小数的增多,精度始终精确
对于精确数值计算时需要用此类型
decimal能够存储精确值的原因在其内部按照字符串储存
字符串:
char(10):简单粗暴,浪费空间,存储速度快(长度范围0-255)一个中文是一个字符,是utf-8编码的三个字节
储存:
储存char类型的值时,会往右填充空格来满足长度
root存成root00000
检索:
在检索或者说查询的时,查出的结果会自动删除尾部的空格,除非我们打开
pad_char_to_full_length
SQL模式
(设置SQL模式:SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';查询sql的默认模式:select @@sql_mode;)
varchar:精准,节省空间,存取速度慢
储存:
varchar类型储存数据的真实内容,不会用空格填充
强调:varchar类型会在真实数据前加1-2Bytes的前缀,该前缀用来表示真实数据的bytes字节数
(1-2Bytes最大表示65535个数字,正好符合mysql对row的最大字节限制,即已经足够使用)
如果真实的数据<255bytes则需要1Bytes的前缀(1Bytes=8bit 2**8最大表示的数字为255)
如果真实的数据>255bytes则需要2Bytes的前缀(2Bytes=16bit 2**16最大表示的数字为65535)
检索:
尾部有空格会保存下来,在检索或者查询时,也会正常显示包含空格在内的内容

sql优化:创建表时,定长的类型往前放,变长的往后放
比如性别 比如地址

>255个字符,超了就把文件路径存放到数据库中.
比如视频,图片等找一个文件服务器,数据库中只存路径或url

length();查看字节数
char_length();查看字符数

时间类型:

YEAR
YYYY(1901/2155)

DATE
YYYY-MM-DD(1000-01-01/9999-12-31)

TIME
HH:MM:SS('-838:59:59'/'838:59:59')

DATETIME

YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59 Y)

TIMESTAMP

YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某时)

调用mysql自带的now()函数,获取当前类型指定的时间

枚举类型与集合类型
mysql> create table consumer(
id int,
name varchar(50),
sex enum('male','female','other'),
level enum('vip1','vip2','vip3','vip4'),#在指定范围内,多选一
fav set('play','music','read','study') #在指定范围内,多选多
);

2.表的约束

作用:保证数据的完整性和一致性
-not null 和 default
create table tb2(
#如果插入空值,默认是2
id int not null default 2,
num int not null
);
insert into tb1(num) values(3);

-unique
不用的唯一的
单列唯一
只有一列是唯一

create table department(
id int,
name char(10) unique
);
insert into department values(1,2),(2,2);

多列唯一
每个字段都设置unique
create table department2(
id int unique,
name char(10) unique,
);

create table department2(
id int,
name char(10),
unique(id),
unique(name)
);
#每个字段插入的值都是不同的才能插入
insert into department2 values(1,'it'),(2,'it2');

组合唯一
create table department3(
id int,
name char(10),
unique(id,name)
);
insert into department3 values(1,'it'),(2,'it');

primary key
主键 在现在sql版本中 只允许 表中有一个主键,通常是id

not null + unique

create table s2(
id int primary key,
name char(10) not null
);
create table s3(
id int not null unique,
name char(10) not null
);

auto_increment 自增长

create table student2(
id int primary key auto_increment,
name char(20) not null
);
insert into student2(name) values('nazha');
原文地址:https://www.cnblogs.com/jerry-hou/p/12332272.html