深入浅出SQL(2)-数据和表

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baby_hua/article/details/81839554

该系列文章系个人读书笔记及总结性内容,任何组织和个人不得转载进行商业活动!

数据和表

理解数据库的一个典型场景就是通讯录,类似早期的电话本,每一页都按照相应的信息记录了联系人的情况,比如姓名,电话,住址等;

但如果需要管理大量的联系人信息,电话本就显得捉襟见肘了——所以,做个数据库吧;

我们需要使用数据库,但是在创建一个数据库前,我们还需要了解存储数据的类型以及把数据分类的方式;

“Greg“的电话本便签的一页信息记录了一个联系人的:

First Name:Hua;

Last Name:Qiang;

Birthday:1991-01-01;

Profession:Engineer;

Status:Single;

Location:China;

Email:[email protected];

Interests:pingpang;

Seeking:New Job;

从分类角度看数据:

将这些信息横向排列,看起来就行一个Excel;这些数据对应的就是 表table 中 列column 和 行row 应该呈现出来的信息;

什么是数据库:

首先需要知道的第一个SQL结构 其实是盛装所有表的数据库(database);

数据库是保存表和其他相关SQL结构的容器;

我们可以到数据库查询信息,这就是人称查询(query)的行为;

在流程图中,数据库都是以圆柱体表示的;

数据库剖析:

1.数据库是由表构成(还有一些其他的SQL结构),一个数据库可以有多张表;

2.表是在数据库中包含数据的结构,由列和行组成;

3.表的行 包含了表中某个对象的所有信息;

数据库内的信息组成了表;

所以构成一个数据库,我们需要:数据库名,数据库中各个表的名称,表中各个列的名称,表中各个行记录的信息;

值得注意的是:数据库和表的名称不一定要大写;

列:是存储在表中的一块数据;

行:是组成能够描述某个事物的列的集合;

表:列和行构成了表;

字段(field)也常用来代称列;

记录(record)与行也常交替使用;

一条记录包含了若干字段的值;把列和行组合起来就是你要的表;

对于之前的个人信息:每个信息种类变成类,每一张通讯录页签这是一条记录;

接下来,我们需要把上边理解的内容在数据库中进行实践;

接受命令:

首先我们需要启动我们安装的SQL关系型数据库管理系统(relational database management system,RDBMS)——我么使用MySQL;

使用前我们需要先进行安装:参考《深入浅出SQL(3)-在Mac OS X上安装MySQL》;

参照上述文章,通过终端连接MySQL;

mssql> 命令提示符之后可以输入SQL命令;

第一步:创建用来装表的数据库

1)创建一个名为grep_list的数据库;

2)使用命令:CREATE DATABASE grep_list;

3)SQL中的数据库和表的名称里不可出现空格,所以最好以下划线取代空格的方式进行命名;

4)现在需要告诉RDBMS使用刚刚创建的数据库;

5)使用命令:USE grep_list; 表示接下来我们做的每件事都是在grep_list数据库中进行的;

创建数据库:

使用数据库:

这里没有蠢问题:

1.SQL语言要求所有的表都需要放在数据库里;这样SQL能控制多位用户同时访问表的行为,能够授予或撤销对整个数据库的访问权;

2.SQL本身并不区分大小写,命令不大写也行,但命令大写是良好的SQL编程习惯;

3.每个命令的最后都有一个分号(;),用于表示命令的结束;

4.命令大写和下划线有助于编写SQL程序,虽然SQL不需要它们;

设定表:CREATE TABLE 语句

1)创建一个表来存储’甜甜圈’及其类型;

2)在命令行窗口中输入命令,之后按下enter让SQL RDBMS执行此命令;

表:甜甜圈 

doughnut_list

创建表命令:

在MySQL中,为了区分命令和普通字符,MySQL引入了反引号(注意不是单引号),用在名称的两侧;

不写的话 也可以执行,但这是一个好的习惯:

我们观察下这个命令:

1)在小括号中,指明了每一列的名称及 数据类型(datatype);

2)逗号用于区分新增的列;

3)这里我们需要知道的是:VARCHAR是可变动字符的意思,用于保存以文本格式存储的信息;

4)“(6)”是指这段文字的长度最多只能有6个字符;

所以,在设计创建表的时候,我们需要确定每列的正确数据类型和长度;

我们以通讯录的表来举例看看,有关数据类型的内容:

表:通讯录

my_contacts

在创建表的时候,我们可以一次输入一行,就像上面的格式,或写成非常长的一行;

值得注意的是:last_name VARCHAR(3)和last_name VARCHAR(30)是两个完全不同的列;

画外音:如何show指定语句是否成功?

SHOW还可以用于显示更多信息:

我们继续数据类型:我们已经看到了VARCHAR和DATE类型,事实上,其他类的数据,例如数字,还需要其他的数据类型;

认识一下其他数据类型:

我们着重列出一些最有用的数据类型,他们的工作就是存储你的数据但不会破坏数据;

CHAR:character,它很严谨,负责的数据必须是预先设定好的长度;

VARCHAR:存储文本数据,最大长度可达255个字符,他很灵活,可以配合我们的数据长度进行调整;

DEC:Decimal的缩写,他会提供数值空间,直到装满为止;

DATETIME/TIMESTAMP:负责记录日期和时间;

INT:整数,并且可以处理负数;

BLOB:存储大量文本数据;

DATE:记录日期,不插手Time的事情;

我们可以查看MySQL支持的数据类型 及 具体数据类型的详细信息:

数据类型举例:

price    5678.12    DEC(6,2)

这里的两个数字表示数据库希望的浮点数格式,前者代表总位数、后者是小数点的位数;

gender F/M    CHAR(1)

存储预设长度为1的字符;

这里没有蠢问题:

1.CHAR和VARCHAR只会占用特定空间爱你,不会多于256个字符;

BLOB则需要很大的空间,随着数据库的增长,占用存储空间就是冒着耗尽硬盘空间的风险;

另外,有些重要的字符串运算无法操作BLOB类型的数据,只能用于VARCHAR或CHAR;

2.为表的每列选择最合适的数据类型可以为表瘦身,还可以使数据库操作更为快捷;

3.TIMESTAMP通常用于记录“当下”这个时刻;DATETIME更适合存储将来的时间;

接下来回顾下,到目前为止我们做的:

1.在创建表前先把数据分类;

2.使用CREATE DATABASE语句来创建存储所有表的数据库;

3.使用USE database语句进入数据库,然后创建表;

4.所有表都以CREATE TABLE语句创建,句中包含列名及其数据类型;

5.一些常用的数据类型有CHAR  VARCHAR BLOB INT DEC DATE DATETIME,每种数据类型的存储规则都不一样;

检查刚刚创建的表:使用DESC命令

数据库中不可以重建已经存在的表或数据库;

频繁的写SQL语句,一个好的文本编辑软件会更合适,后续我们会介绍;

我们可以将写好的语句复制并粘贴到SQL控制台,进行执行;

有创建表的操作,我们也可以删除表,而且更简单;

使用命令:DROP TABLE table;

无论表里有无数据,DROP TABLE都会执行,务必小心使用;一旦删除表,里面的数据也就烟消云散了;

DROP TABLE会删除你的表和表里面的所有数据;

删除表及表中所有数据:

删除之后 还可以重新建:

已经创建好了表,我们需要把我们的通讯录数据添加进表了;

为了把数据添加进表里,你需要INSERT 语句:

INSERT语句格式:

INSERT INTO table ( columns, column1, … ) VALUES ( ‘values’,1,… );

我们分析下:

1)从关键字INSERT INTO开始;

2)包含列名的小括号中的列名,以逗号分隔;

3)另一个关键字VALUES开始,接下来是各列的值;

4)值得列表也是以逗号分隔;

5)输入的文本数据需要加上单引号;

6)第二组括号中的值必须和列名的顺序相同;

把数据添加进表中:

INSERT INTO my_contacts 

(last_name,first_name,emal,gender,birthdy,profession,location,status,seeking) 

VALUES 

('Anderson','Jilian','[email protected]','F','1991-01-01','Technical Writer','Palo Alto,CA','Single','Kayaking,Reptiles’);

注意列和values的序列需要一一对应;

接续》》》》》:

我们先回顾下当前的数据库中的表结构;然后继续开启今天的学习记录;

新建一张表 记录甜甜圈的订购记录:doughnut_purchases

SQL语句:

create table doughnut_purchases

(

donut_type varchar(20),

dozens int,

topping varchar(20),

price dec(4,2)

);

插入一条订购记录:

SQL语句:

insert into doughnut_purchases

(donut_type,dozens,topping,price)

values

('jelly',2,'sprinkles',33.50);

从上两条示例可以看出:

INSERT语句中的CHAR VARCHAR DATE BLOB的值需要加上单引号,DEC INT的数值则不需要;

INSERT语句的变形:

1)可以改变列的顺序:只要数据值的顺序也一起调整;

2)省略列名:INSERT INTO table VALUES (’values’, …);

列名可以省略,但数据值必须全部填入,而且必须与当初创建表时的列顺序完全相同;

3)省略部分列:需要明确指出数据值对应的列名;

向my_contacts表插入不完整值的记录:

INSERT INTO my_contacts 

(first_name,emal,profession,location) 

VALUES 

('Pat','[email protected]','Technical Writer','Palo Alto,CA');

以SELECT语句窥探表:

DESC只能查看表的结构,对于表中的数据,我们需要SELECT语句;

使用select *查看表中所有数据:

1)命令SELECT * FROM table;

2)*表示选择所有内容;

select* from my_contacts;

我们看到:NULL会出现在没有被赋值的列中;

NULL解读:

1)NULL不等于0,也不等于另外一个NULL,事实上,两个NULL根本不能放在一起比较;

2)值可以是NULL,但他不会等于NULL,因为NULL代表未定义的值;

3)在创建表的时候设置好不要NULL出现的列,就不会显示了;

 只需要在创建表的数据类型之后加上NOT NULL就可以了;

用DEFAULT填补空白:

1)如果某些列通常有某个特定值,我们就可以把特定值指派为DEFAULT默认值;

2)跟在DEFAULT关键字后的值会在每次新增记录的时候自动插入表中——只要没有另外指派其他值;

3)需要注意的是默认值的类型必须和类型相同;

新建表doughnut_list,进行not null 以及default设置;

此表之前已经存在,drop table doughnut_list;重新建:

create table doughnut_list

(

doughnut_name varchar(10) not null,

doughnut_type varchar(6) not null,

doughnut_cost dec(3,2) not null default 1.00

);

接下来可以插入若干条数据进行测试:

insert into doughnut_list 

(doughnut_name,doughnut_type,doughnut_cost)

values

('Blooberry','filled',2.00);

insert into doughnut_list 

(doughnut_name,doughnut_type)

values

('Cinnamondo','ring');

总结:

本章介绍了 如何创建数据库和表;如何在表中插入最常见的数据类型,同时保证需要值的列有值;

1.CREATE DATABASE database;设置装表的数据库;

2.USE database;进入数据库;

3.CREATE TABLE table (column names, …);其中列名和列的数据类型通过分析得出;

4.NULL和NOT NULL:知道哪些列不应该接收NULL值,才能帮助你搜索和整理数据;

5.DEFAULT用于指定某列的默认值,在输入一条记录但没有为某列赋值的时候;

6.使用DESC语句查看表结构;

7.DROP TABLE语句 用于丢弃表;

8.为表插入数据时,可以使用任何一种INSERT语句;

9.NULL是未定义的值,不等于零,也不等于空值;值可以是NULL,但绝非等于NULL;

10.可以修改列为不接受NULL值,在创建表的时候使用关键字NOT NULL;

11.创建表时使用DEFAULT,可于日后输入缺乏部分数据的记录时自动填入默认值;

猜你喜欢

转载自blog.csdn.net/baby_hua/article/details/81839554