sql格式介绍
字符集
- 字符编码:计算机针对各种符号,在计算机中的一种二进制存储代号。
- 字符集:多个字符的集合
ASCII GB2312 BIG5 B18030 UNICODE
如果直接通过CMD直接插入中文会出错
1、用户是通过mysql.exe 里啊操作 mysqld.exe
2、真正的SQL执行时是Mysqld.exe来执行
3、mysql.exe将数据传入mysqld.exes的时候,没有告知其对应的符号规则(字符集),而mysqld也没有能力自己判断,机会hi 用自己默认的(字符集)
解决方案:mysql.exe客户端在进行数据操作之前将自己所使用的字符集告诉mysqld
cmd下的mysql.exe默认只有一个字符集 GBK
MYsql.exe如果告知mysqld对应的字符类型为gbk
快捷方式:set names gbk;
深层原理:客户端,服务端,连接层(show variables like ‘character_set%’)
Mysql.exe 与 Mysqld.exe 之间的处理关系一共分为三层
客户端传入数据给服务端:client
服务端返回数据给客服端:server
客户端与腹短之间的连接:collection
Set names 字符集的本质:一次性打通三层字符集,达成一致
系统中由三个变量来记录这三个关系对应的字符集:show variables like ‘character_set%’
修改服务端变量的值
– 插入中文
Insert into my_teacher values(‘张三’,12);
– mysql.exe告知mysqld.exe自己的字符集规则
set names gbk;(直接这样)
– 查看系统保存的三种关系处理字符集
show variables like ‘character_set%’;
– 修改变量
set character_set_client = gbk;
列类型(字段类型)
整数类型
Tinyint
迷你整型,系统采用一个字节来保存的整形,最大表示0~255;Smallint
小整型,系统采用两个字节来保存的整形,0~65535之间Mediumint
中整形,采用三个字节来保存数据。Int
整形(标准整型),采用四个字节来保存数据。Bigint
大整形,采用8个字节来保存数据
Tiniyint 和 Int使用比较普遍
无符号设定
无符号:表示存储的数据在当前字段中,没有负数(只有整数达到0~255)
基本语法;alter table my_int add 字段名 tinyint unsigned first;
插入最大数字会报错,是因为mysql默认的整形增加附属,实际表示的区间为-127~128;
– 创建数据表
create table my_int(
int_1 tinyint,
int_2 smallint,
int_3 mediumint,
int_4 int,
int_5 bigint
)charset utf8;
– 插入数据
Insert into my_int values(10,10000,100000,10000000,100000000000);
Insert into my_int values(255,255,255,255,255);
Insert into my_int values(-128,255,255,255,255);
alter table my_int add int_6 tinyint unsigned first;
列类型___显示长度
显示长度:指数据在数据显示的时候,到底可以显示多少位。
Tinyint(3);表示最长可以显示3位 ,unsigned 说明只能是整数,0-255用用不会超过三个长度
Tinyint(4):表示最长可以显示4位,-128-127.
显示长度只是嗲表了数据是否可以达到指定的长度,但是不会自动满足到指定长度,如果像要数据显示的时候,保持最高位(显示长度),那么还需要增加一个zerofill属性才可以
zerofill:从左侧开始填充0(左侧不会改变数值大小),所以负数的时候不能时候zerofill。
数据显示的时候,zerofill会在左侧填充0到指定位,如果不足三位,填充到三位。本身已经够了或者超出,那么就不再填充。
显示长度可以自己设定,超出长度(但是不超出范围)不会影响,只会对不够长度的进行补充。
列类型————小数型
专门用来存储鸮属的
在Mysql中将小数分为两类:浮点型和定点型。
存储较大的值,利用存储数据的位来存储指数
浮点型
精度类型,有可能丢失精度类型的数据类型,数据可能不准确(尤其在超出精度长度范围)Float
Float称为单精度类型,系统提供4个字节来存储数据,但是能表示的数据范围比整型大的多,约为10^38次方,只能保证大概7个左右的精度
基本语法:Float:指定不现实小数位的浮点数 Float(M,D):表示一共存储M个有效数字,其中效数部分占D位 Float(10,2):整数8位,效数2位。
1、创建一个数据表保存浮点数
2、存入数据
浮点数的英语:用处是用来保存一些数量特别大,达到可以不用那么精确的数据。Double
Double又称之为双精度,系统用8个字节来存储数据,10^308次方,精度15位左右定点数
定点数:能够保证数据精确的小数(效数部分可能不精确,超出长度会四舍五入),整数不放呢一定精确
Decimal
Decimal定点数:系统自动根据存储的数据来分配存储空间,每大概九个数就会分配四个字节来存储,同时效数和整数部分是分开的。decimal(M,D):M表示总长度,最大值不能超过65,D代表小数部分的长度,最长不能超过30位。
1、创建表:与浮点数对比
——————————————————————————————————————————————————————————————————————————————————————
create table my_float(
f1 float,
f2 float(10,2)
)charset utf8;
insert into my_float values(123.123,12345678.90);
//数据精度丢失,浮点型按四舍五入的方式进行
insert into my_float values(123.1234567,123456789.00);
insert into my_float values(13.1234567,99999999.99);
//插入数据超过指定整数部分长度,但是如果是系统自动进位导致的
insert into my_float values(123.123,10e5);
//浮点数可采用课采用科学计数法来存储数据
create table my_decimal(
f1 float(10,2),
d1 decimal(10,2)
)charset utf8;
insert into my_decimal values(99999999.99,99999999.99);
insert into my_decimal values(99999999.99,99999999.999);//定点数四舍五入
时间日期类型
Date
日期类型:系统使用三个字节来存储数据,对应的格式位:YYYY-mm-dd,能表示的范围从
1000-01-01到9999-12-12,初始值为0000-00-00Time
时间类型:能够表示某个指定的时间,但是系统统一是提供3个字节来存储,对应的格式为
HH:ii:ss,但是Time类型能够表示的时间范围要大的多Datetime
日期时间类型:就是将前面的date和time合并起来,表示的时间,使用8个字节存储
格式为:YYYY-mm-dd HH:ii:ss,能表示的区间1000-01-01 00:00:00 到9999-12-31 23:59:59Timestamp
时间戳类型:mysql中的时间戳只是表示从格林威治依然和datetime.Year
年类型:占用一个字节来保存,能表示1900年到2155年,但是year两种数据插入方式:
0~99和四位数的具体年year进行两位数插入的时候,有一个区间划分,69和70划分界限。
timestamp当对应的数据被修改的阿时候,会自动更新(这个被修改的数据以是自己)
字符串类型
- char
基本类型:char(L),L代表字符数(中文与英文字母一致),L长度为0~255. - Varchar
边长字符:指定长度之后,系统会更具实际存储的数据来来计算长度,分配合适的长度(数据没有超出长度)。
基本语法:varchar(L),L代表字符数,L的长度理论值0~65535
Varchar要记录数据长度(数据根据数据长度自动分配空间)
___fenge
-- 创建对应的数据表
create table my_date(
d1 date,
d2 time,
d3 datetime,
d4 timestamp,
d5 year
)charset utf8;
insert into my_date values(
‘1900-01-01’,’12:12:12’,’1900-01-01 12:12:12’,’1999-01-01 12:12:12’
,69
);
列属性
NULL,默认值,列描叙,主键,唯一键和自动增长。
注意
- 在设计表的时候,尽量不要让数据为空
- 记录长度为65535个字节
- 默认值
defaul:默认值,不进行数据插入会为其填充为null - 列描述
comment 专门为开发人员进行维护的一个注释说明
基本语法:comment ‘字段描述’;
查看comment:查看表创建语句
– 创建数据表
create table my_default(
name varchar(10) NOT NULL,
age int default 18
)charset utf8;
– 创建表,增加字段描述
create table my_comment(
name varchar(10) not null comment ‘当前是用户名,不能为空’,
pass varchar(50) not null comment ‘密码不能为空’
)charset utf8;
————————————————————————————————————————————
主键
主要的键,primary key 有且只有一个字段,里面的值唯一性。
创建主键
随表创建
系统提供两种增加主键的方式
- 方案1:直接在需要当作主键的字段之后,增加primary key确定主键
- 方案2:在所有字段之后增加主键选项,primary key(字段信息)
表后增加
基本语法:alter table 表名 add primary key(字段);查看主键
方案1: 查看表结构
方案2:查看表的创建语句删除主键
基本语法:alter table 表名 drop primary key;
– 在字段后增加主键属性
复合主键
案例:有一张学生选修课表,学生可以选秀多个选修课,一个选修课可以由多个学生来选,但是一个学生在一个选修课中只有一个选修课成绩。主键约束
主键一旦增加,那么对对应的字段有数据要求
- 当前字段对应的数据不能为空。
- 当前字段对应的数据不能有任何重复
create table my_pri1(
username varchar(10) primary key
)charset utf8;
create table my_pri2
(
username varchar(10),
primary key(username)
)
create table my_pri3
(
username varchar(10)
);
alter table my_pri3 add primary key(username);
aliter table my_pri3 drop primary key;
create table my_score(
student_no char(10),
course_no char(10),
score tinyint not null,
primary key(student_no,course_no)
)charset utf8;
insert into my_score values (‘00000001’,’course01’,100);
insert into my_score values (‘00000002’,’course02’,90);
insert into my_score values (‘00000001’,’course03’,95);
自动增长
自动增长:auto_increment根据以前存在的数据进行自动增加
自动增长用于逻辑主键
原理:
- 系统维护一组数据,用来保存当前使用了自动增长属性的字段,记住当前对应的数据值,在给定一个指定的步长。
- 当用户进行数据插入的时候,如果没有给定值,系统在原始值上再加上新的步长新的数据
- 自动增长的出发,给定属性的字段没有提供值
- 自动增长只适用于数值
- 使用自动增长
基本语法:在字段之后增加一个属性auto_increment.
插入数据:出发自动增长,不能给定一个值 - 修改自动增长
- 查看自增长,自增长一旦触发使用,会自动在表选项增加一个选项(一张表最多只能拥有一个自增长)
- 删除自动增长
删除自增长:就是在字段属性之后不再暴力auto_increment,当用户修改自增长所在的字段,如果没有看到auto_increment属性,系统会自动清楚该自增长 - 初始设置
在系统中,有一组变量用来维护自增长
show variables like ‘auto_increment%’; - 细节问题
- 一张表只有一个自增长,自增长会上升到表选项中
- 如果数据插入中没有出发自增长(给定了数据),那么自增长不会表现
- 自增长修改的时候,值可以较大,但是不能比他小
create table my_auto(
id int primary key auto_increment,
name varchar(10) not null comment ‘用户名’,
pass varchar(50) not null comment ‘密码’
);
insert into my_auto values(null,’Tom’,’123456’);
– 修改auto_incrememnt
alter table my_auto auto_increment = 10;
– 删除自增长
alter table my_auto modify id int;
– 切记不要在再次增加primary key
– 查看自增长初始变量
show variables like ‘auto_increment%’;
– 增加自增长
alter table my_auto modify id int auto_increment;
insert into my_auto values(3,’Jack’,’123456’);
——————————————————————————————————————————————————————————————
唯一键
unique key,用来保证䫕的字段中的数据唯一
主键也而可以用来保证数据的唯一性,但是一张表只有一个主键。
- 为一间在一张表中可以有多个
- 唯一键允许字段数据为NULL NULL可以有多个(NULL不参与比较)
- 创建唯一键
表字段之后鞥家唯一键标识符,unique[key]
2、 在所有的字段之后使用unique key[字段列表]
- 在创建表之后也可以增加唯一键
alter table 表名 add unique key[字段列表]
create table my_unique1(
id int primary key auto_increment,
username varchar(10) unique
);
create table my_unique2(
id int primary key auto_increment,
username varchar(10),
unique key(username)
);
create table my_unique3(
id int primary key auto_increment,
username varchar(10)
);
alter table my_unique3 add unique key(username);
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!