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-00

  • Time
    时间类型:能够表示某个指定的时间,但是系统统一是提供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:59

  • Timestamp
    时间戳类型: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,默认值,列描叙,主键,唯一键和自动增长。
注意

  1. 在设计表的时候,尽量不要让数据为空
  2. 记录长度为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. 方案1:直接在需要当作主键的字段之后,增加primary key确定主键
  2. 方案2:在所有字段之后增加主键选项,primary key(字段信息)
  • 表后增加
    基本语法:alter table 表名 add primary key(字段);

  • 查看主键
    方案1: 查看表结构
    方案2:查看表的创建语句

  • 删除主键
    基本语法:alter table 表名 drop primary key;

– 在字段后增加主键属性

  • 复合主键
    案例:有一张学生选修课表,学生可以选秀多个选修课,一个选修课可以由多个学生来选,但是一个学生在一个选修课中只有一个选修课成绩。

  • 主键约束
    主键一旦增加,那么对对应的字段有数据要求

  1. 当前字段对应的数据不能为空。
  2. 当前字段对应的数据不能有任何重复

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根据以前存在的数据进行自动增加
自动增长用于逻辑主键
原理:

  1. 系统维护一组数据,用来保存当前使用了自动增长属性的字段,记住当前对应的数据值,在给定一个指定的步长。
  2. 当用户进行数据插入的时候,如果没有给定值,系统在原始值上再加上新的步长新的数据
  3. 自动增长的出发,给定属性的字段没有提供值
  4. 自动增长只适用于数值
  • 使用自动增长
    基本语法:在字段之后增加一个属性auto_increment.
    插入数据:出发自动增长,不能给定一个值
  • 修改自动增长
  1. 查看自增长,自增长一旦触发使用,会自动在表选项增加一个选项(一张表最多只能拥有一个自增长)
  • 删除自动增长
    删除自增长:就是在字段属性之后不再暴力auto_increment,当用户修改自增长所在的字段,如果没有看到auto_increment属性,系统会自动清楚该自增长
  • 初始设置
    在系统中,有一组变量用来维护自增长
    show variables like ‘auto_increment%’;
  • 细节问题
  1. 一张表只有一个自增长,自增长会上升到表选项中
  2. 如果数据插入中没有出发自增长(给定了数据),那么自增长不会表现
  3. 自增长修改的时候,值可以较大,但是不能比他小

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,用来保证䫕的字段中的数据唯一
主键也而可以用来保证数据的唯一性,但是一张表只有一个主键。

  1. 为一间在一张表中可以有多个
  2. 唯一键允许字段数据为NULL NULL可以有多个(NULL不参与比较)
  • 创建唯一键
    表字段之后鞥家唯一键标识符,unique[key]
    2、 在所有的字段之后使用unique key[字段列表]
  1. 在创建表之后也可以增加唯一键
    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 协议 ,转载请注明出处!