开发者社区> 科技小能手> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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.常见的数据库

Oracle:甲骨文;

DB2IBM

SQL Server:微软;

Sybase:赛尔斯;

MySQL:甲骨文;

 

Sql分类

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

    create database | drop database

    create table | alter table | rename table | drop table

    create index | drop index

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

    insert 、update 、delete

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

    grant 、remoke

DQLData 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 <old_Index_name> rename to <new_Index_name>;

03.删除索引

Drop index <index_name>;

 

mysql的数值类型


wKioL1l96bnwhUwiAAIWHra8ch0788.png-wh_50

整数型

wKiom1l96buygVLlAAVZSuBk21k821.png-wh_50 

例: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)的别名

 

小数型

wKioL1l96b2CLY9JAASXTvnLJUg722.png-wh_50 

浮点数:

小数位可以移动,分为floatdouble

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

 

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

 

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

定点数

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

 

日期时间型

wKiom1l96b-h3TLiAARxUzoSe9M428.png-wh_50 

注意:

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

 

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

 

03)支持2位的年份

70-691970-2069

70-991970-1999

0-692000-2069

 

04MySQL支持0值,比如00000000日 000000

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

 

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

 

字符串类型

wKiom1l96cLDD4g5AAUqDBDp5iQ965.png-wh_50 

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

01.charvarchar

wKioL1l96cLCQKbqAAEoqZrkr38607.png-wh_50wKiom1l96cPC5gHZAADNXWBgl1g720.png-wh_50 

02.字段的长度(655356553365532

wKiom1l96cTAyakbAAFdEWWT5n8613.png-wh_50 

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

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

wKioL1l96cXBov8WAAOGArRzqfg329.png-wh_50 

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

wKioL1l96cXQYJ8YAABVJc5k324726.png-wh_50 

 

原因是:

wKiom1l96cbC-uOuAAHFfiyg_0g557.png-wh_50 

 

wKioL1l96ceRg0r7AAC_k7pzS8A062.png-wh_50 

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

 

03.text

wKiom1l96cjCqHLrAAF1SFn4pRs117.png-wh_50 

 

类型选择原则

wKioL1l96cjg-GRmAAHGqaZwR3Q368.png-wh_50 

 

MySQL的列属性

wKiom1l96cmQ7vItAAI3Q2DFh-w331.png-wh_50 

 

01.是否为空

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

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

 

02.默认值属性

Default value来声明

wKiom1l96cnj7kIIAADKQB3Lf1M503.png-wh_50 

 

03.主键|唯一索引

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

 

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

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

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

 

常见的设计:

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

wKioL1l96crwTtdqAAETbk-4dfk784.png-wh_50 

04.自动增长

wKiom1l965jydLqOAAJlvZr4Gmc510.png-wh_50 

补:实体

01.一对一

wKiom1l96czS2JyzAALLajZEE5s178.png-wh_50 

 

02.一对多

wKiom1l96c7xkGzPAAUE0L_OoNc992.png-wh_50 

03.多对多

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

wKioL1l96c7CeOHFAACaGlGdEOU790.png-wh_50wKioL1l96c_jk8ESAAC625V0FXs042.png-wh_50 

05.外键

概念:

如果一个实体(student)的某个字段(studentclass_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;

 

储存引擎

wKioL1mDCPbSKmd4AAFaUhNFVI8464.png-wh_50

wKiom1mDCPWQS9SdAABWkWVzx5k696.png-wh_50


 

 

 

本文转自 叫我北北 51CTO博客,原文链接:http://blog.51cto.com/qinbin/1952168



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Sql 基础问题
Ref Projection and Selection联结查询的原理(笛卡尔积)设计 MySQL 数据表的时候一般都有一列为自增 ID,这样设计原因是什么,有什么好处?
665 0
SQL Server 执行计划利用统计信息对数据行的预估原理二(为什么复合索引列顺序会影响到执行计划对数据行的预估)
原文:SQL Server 执行计划利用统计信息对数据行的预估原理二(为什么复合索引列顺序会影响到执行计划对数据行的预估)   本文出处:http://www.cnblogs.com/wy123/p/6008477.html    关于统计信息对数据行数做预估,之前写过对非相关列(单独或者单独的索引列)进行预估时候的算法,参考这里。
880 0
SQL Server中公用表表达式 CTE 递归的生成帮助数据,以及递归的典型应用
原文:SQL Server中公用表表达式 CTE 递归的生成帮助数据,以及递归的典型应用   本文出处:http://www.cnblogs.com/wy123/p/5960825.html   我们在做开发的时候,有时候会需要一些帮助数据,必须需要连续的数字,连续间隔的时间点,连续的季度日期...
995 0
sqlServer存储过程
1、创建存储过程报错:     'CREATE/ALTER PROCEDURE' 必须是查询批次中的第一个语句。 解决方法: use databaseName 后面要加上一句: GO ...
832 0
SQL Server基础之<存储过程>
原文:SQL Server基础之   简单来说,存储过程就是一条或者多条sql语句的集合,可视为批处理文件,但是其作用不仅限于批处理。本篇主要介绍变量的使用,存储过程和存储函数的创建,调用,查看,修改以及删除操作。
1480 0
SQLSERVER存储过程语法详解
SQL SERVER存储过程语法: Create PROC [ EDURE ] procedure_name [ ; number ]     [ { @parameter data_type }         [ VARYING ] [ = default ] [ OUTPUT ]     ] [ ,...n ]   [ WITH     { RECOMPILE | ENCRY
1662 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
MySQL 5.7让优化更轻松
立即下载
SQL Sever迁移PG经验
立即下载
PostgresChina2018_张启程_为什么我们抛弃MongoDB和MySQL,选择PgSQL
立即下载