mysql设计段值_MySQL阶段二——sql语句基础(1)

基础学习达到的目标

01.如何使用MySQL数据库

02.如何设计数据库

数据库概述

01.什么是数据库

02.关系型数据库和非关系型数据库

03.常见的数据库

Sql分类

数据库操作

01.创建数据库

02.查看数据库

03.查看数据库创建语句

04.删除数据库

05.修改数据库信息

06.修改数据库名称

表操作

01.创建表

02.查看数据表

03.删除数据库

04.修改表

crud操作

01.插入数据

02.获取数据

03.删除数据

04.修改数据

索引操作

01.创建索引

02.修改索引

03.删除索引

mysql的数值类型

整数型

小数型

日期时间型

字符串类型

类型选择原则

MySQL的列属性

01.是否为空

02.默认值属性

03.主键|唯一索引

04.自动增长

补:实体

05.外键

储存引擎

数据库基础总结

基础学习达到的目标

01.如何使用MySQL数据库

02.如何设计数据库

数据库概述

01.什么是数据库

数据库就是用来存储和管理数据的仓库!

数据库存储数据的优先:

02.关系型数据库和非关系型数据库

03.常见的数据库

lOracle:甲骨文;

lDB2:IBM;

lSQL Server:微软;

lSybase:赛尔斯;

lMySQL:甲骨文;

Sql分类

lDDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;

create database | drop database

create table | alter table | rename table | drop table

create index | drop index

lDML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据);

insert 、update 、delete

lDCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;

grant 、remoke

lDQL(Data Query Language):数据查询语言,用来查询记录(数据)。

select

数据库操作

01.创建数据库

Create database db_name;

02.查看数据库

Show databases;

03.查看数据库创建语句

Show create database db_name;

04.删除数据库

Drop database db_name;

05.修改数据库信息

Alter database db_name [修改指令]:修改指令一般是数据库属性的修改(比如字符集)

Alter database db_name character set utf-8;

06.修改数据库名称

将当前数据库进行备份,删除之前的数据库,并创建新的数据库,恢复原来数据库的数据。

表操作

01.创建表

CREATE TABLE 表名(

列名 列类型,

列名 列类型,

......

);

02.查看数据表

Show tables;

Show tables like‘xxx_%’;

Show create table tb_name;

Show create table tb_name\G

Desc tb_name;

03.删除数据库

Drop table if exists tb_name;

04.修改表

01)重命名

Rename table old_tb to new_tb;

02)修改列定义

增加一个新列:alter table tb_name add 列定义(name int);

删除一个列:alter table tb_name drop 列名;

修改一个列定义:alter table tb_name modify 列名varchar(40);

重命名一个列:alter table tb_name change 旧列名 新列定义;

修改表选项:alter table tb_name character set utf-8;

crud操作

01.插入数据

INSERT INTO 表名(列名1,列名2,…) VALUES(值1,值2)

语法:

INSERT INTO 表名VALUES(值1,值2,…)

因为没有指定要插入的列,表示按创建表时列的顺序插入所有列的值:

02.获取数据

Select * from 表名[查询条件];

Select 字段名列表from表名[查询条件];

03.删除数据

语法:

DELETE FROM 表名[WHERE条件]

04.修改数据

语法:

UPDATE 表名SET列名1=值1,…列名n=值n [WHERE条件]

索引操作

01.创建索引

Create unique index Stusno on student(Sno);

Create unique index SCno on Sc(sno ASC,Cno DESC);

Unique:表示每个索引值只对应唯一的数据记录

Cluster:表示简历聚簇索引。

02.修改索引

Alter index rename to ;

03.删除索引

Drop index ;

mysql的数值类型

df2ee7efa202c675f333b4f3524177b9.png

整数型

193e74e4bad110f126adbcad84a6bbf2.png

例:tinyint:一个字节(8位)

有符号(-128——127)  无符号(0——255)

其他整型类似

01.符号问题

可以在定义时,使用unsigned标识没有符号,如果不写,则有符号。

02.定义当前的显示宽度

Alter table tb_name add c tinyint(2):

2表示显示的最小宽度,当宽度不够,需要使用前导0填充,在数据库中叫做zerofill

03.MySQL中没有bool

bool,其实就是tinyint(1)的别名

小数型

736d4bcfa020f03f3935f20cdfcf97a4.png

浮点数:

小数位可以移动,分为float和double

对于123.456,存储的时候存的是123456和3(因为0.123456*10^3)

对于float,默认情况下,有效数位是6-7位,double的默认有效数位是16位左右,比如:同样存储123456789.10283637,float表示出来可能就是123456700,double表示出来可能就是123456789.102836

同样浮点数也支持控制数值范围,Type(M,D):M表示所有数值位数(不包括小数点和符号位),D:表示有效的小数位数。

定点数

不管怎样浮点数肯定有精度丢失的 问题,如果必须要求精度,可以采用定点数DECIMAL,在存储的时候采用小数整数分开,每9位为一组采用4字节存储(同样也做了优化,当不足9位的时候,适当采用合适的字节存储)

日期时间型

a71cd56ea017864245a0b19adc78ef48.png

注意:

01)datetime(年月日时分秒)、timestamp(时间戳),这两个表现形式一样,但是存储格式不同(timestamp储存的时候是整型),因为储存的格式不同,所以表示的范围也就不相同。

02)支持任意分隔符的日期,但是容易出现歧义。

03)支持2位的年份

70-69(1970-2069)

70-99(1970-1999)

0-69(2000-2069)

04)MySQL支持0值,比如0000年00月00日00:00:00

2004-04-00:表示4月份整个月

05)time可以表示一天中的时间,也可以表示时间间隔(两个时间点相差了多少小时)。

字符串类型

7fd5af8f44a7feea7b5af8b50bdfc5fb.png

这里的最大长度是物理最大长度

01.char和varchar

46a3ea99aa1120446ff2922b7e9e243f.pngd9534c828c765668ba87945057a11d39.png

02.字段的长度(65535,65533,65532)

9a69046692ee1406aad17f6cffb2a484.png

可以看出不一样的编码,字段长度是不一样的(Latin一个字符等于一个字节)

注意:字段的最大长度,除了类型本身限制之外,记录的总长度也有限制

300cc726587a564d1d34e6c4a917bec0.png

这个图可以看出,65532可以创建成功,65533创建不成功;但是当65533加上not null之后,可以创建成功,如下图:

a81ad3db0cfb614107aca361b5525f57.png

原因是:

306eb7f32846c453ff6d71d83bf7a494.png

14f909e45eddcbed67bed56ec51ef711.png

这个sql也创建不成功,因为a,b都有可能为null,varchar不够存储,所以会报错。

03.text

58f9d1768802bde9603cded7ad929e93.png

类型选择原则

f31ea335f3ddf54213e76ea14f119c7e.png

MySQL的列属性

267fdeb4cff87721d1332cf41a73ab1e.png

01.是否为空

规定一个字段是否为空:null|not null

(空值和空字符串不一样,null的话一定有一个表示空间,在整个记录上某个地方记录null,所有会有一定的储存空间)

02.默认值属性

Default value来声明

087004dad60f800eb2852b01784e405a.png

03.主键|唯一索引

关系模型的实体完整性在create table中用primary key定义。对单属性构成的码有两种说明方法,一种是定义为表级约束条件,另一种是列级约束条件。对于多个属性构成的码只有一种说明方法,即定义为表级约束条件。

实体完整性检查和违约处理

01)检查主码值是否唯一,如果不唯一则拒绝插入或者修改数据。

02)检查主码的各个属性是否为空,只要有一个为空就拒绝插入或者修改。

常见的设计:

每个表都应该存在一个可以唯一标识的主键字段,最好与实体没有关系,不是实体属性字段。

21e93fd032c5d81239415dc2520fa772.png

04.自动增长

c225bf18d19c1963c78edf4d8514bd13.png

补:实体

01.一对一

e6a5b371f36de730cba3e6d59d288430.png

02.一对多

6e9c152657ff5e747ad46108060f6d02.png

03.多对多

利用一个中间表,表示实体之间的对应关系,即两个一对多

a27753c4deacabcb142cad9a3d6d5c87.png4f38bc71c97add0e1074fd23258ed54b.png

05.外键

概念:

如果一个实体(student)的某个字段(student:class_id),指向(引用)另外一个实体(class)的主键(class:class_id),就称student实体的class_id是外键。

定义外键:

关系模型的参照完整性在create table中用foreign key短语定义哪些列为外键,用references短语指明这些外码参照哪些表的主码。

例:

Create table SC(

Sno char(9) not null,

Cno char(4) not null,

Grade smallint,

Primary key(Sno,Cno),

Foreign key(Sno) references Student(Sno),

Foreign key(Cno) references Course(Cno)

);

当发生参照完整性不一致时,系统可以采用以下策略加以处理:

01)拒绝(NO ACTION)执行restrict

默认策略

02)级联(CASCADE)操作

03)设为空值,set null

对于参照完整性,除了应该定义外码,还应该定义外码列是否允许空值。

一般的,当对参照完整性和被参照表的操作违反了参照完整性时,系统允许选用默认策略,即拒绝执行。如果让系统采用其他策略则必须在创建参照表时显示的加以说明。

例:

Create table SC(

Sno char(9) not null,

Cno char(4) not null,

Grade smallint,

Primary key(Sno,Cno),

Foreign key(Sno) references Student(Sno)

On delete acscade

On update cascade,

Foreign key(Cno) references Course(Cno)

On delete no action/*当删除Course表中的元组造成与sc不一致时,拒绝删除*/

On uodate cascade/*当更新course表中的cno时,级联更新sc表中的元组*/

);

修改外键:

先删除,再新建,通过修改表完成。

Alter table tb_name drop foreign key (class_id);

删除外键需要通过指定外键名称达到目的:

可以通过在创建外键时,制定名称,或者使用MySQL默认生成的名称

Alter table tb_name add foreign key (class_id) references it_class

On delete set null;

储存引擎

cdd76b7ccb9109baeaf772dc081a4c53.png

9eb4331fc7e34c98a43fea12675a26bc.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值