My SQL学习笔记:
一、认识关系型数据库
1.数据库实际上就是管理数据的仓库,平常我们使用的一般是利用文件对数据进行保存和
管理,doc, xls, jpg等等,只要我们知道的一切能够保存数据的文件,我们都可以认为是一种保存和管理数据的方式。
2.但是对于大批量数据和便于网络操作而言,使用特定的数据库是很有必要的。
3.数据库系统(D atabase Sy stem)=数据(D ata)+数据管理系统(Database Managemen t
System)
4.通常意义的数据库:至少包含数据和管理数据的工具,我们知道,数据库还需要对外提
供接口让其他程序对数据库进行操作。
二、启动My SQL
1.启动数据库分为两部分,一部分是服务器,第二部分是客户端连接到服务器。
2.启动服务器:在Win dows上安装MySQL后会在Wind ows服务管理中增加一条记录,可
以通过启动services.msc到MySQL56进行启动。也可以使用net star t <server-name>。
三、MySQL操作
分类:针对的操作对象不同,分成不同的语言:
1.数据操作(管理)语言DM L
2.数据定义语言(对保存数据的格式进行定义)DDL
3.数据库控制语言(针对数据库软件服务进行操作)DC L
DCL控制DDL,DDL限制DML,即对数据库的操作、对表的操作、对数据的操作
DML又分为DQ L和DML
四、数据库操作DCL
1.创建数据库:create da tabase <db_name> [op tions]; (o ptions:字符集、校对规则)
2.查询数据库:show da tabases;
3.查看数据库的创建语句:show creat e database <db_name>;
4.删除数据库:dr op databas e <db_name>;
5.修改数据库信息:alter dat abase <db_name><opti ons>;(opti ons:字符集、校对规则),
对于数据库的名字,一般不进行修改,可以通过修改数据库文件夹的名字进行修改,也可以新建一个数据库,将数据库内容保存新数据库中
五、表操作
1.创建表:create table <tb_name>(<co l_definiti on>,…) *op tions];
1)先分析,需要保存的实体数据,拥有哪些属性,需要怎样保存
2)列结构:列名、列的数据类型、列的约束
2.查看表:
1)有那些表:show tables [l ike ‘patte rn’+;例如sho w tables l ike ‘city_%’;(表示已cit y_开头的
所有表)
2)某个表的创建信息:s how create table <tb_name>;
3)查看表结构:desc(d escribe) <tb_name>;
3.删除表:
droptable [ifexists]<tb_name>;
4.修改表:
1)修改表名:re name table<tb_name>t o <new_tb_name>;
ren ame tablestudent to info_stud ent, teach er to info_teacher;
2)修改字段(列)定义:
对列的操作都属于a lter操作,不过对于增、删、改、重命名来说还有子操作。
增加列:alter t able <tb_n ame>add<co l_definati on>;例:alte r table st u add stu_score int;
删除列:alter table <tb_name> dro p <col_nam e>;例:alter table stu drop stu_score;
修改列:alter tab le <tb_nam e> modify<col_name><col_defin ation>;例:a lter table stu modif y stu_scor e int(12);
重命名列:alte r table <t b_name>cha nge <col_n ame><col_d efination>;例:alter t able stu c hange stu_score stu_fenshu int;
3)修改表选项:
a lter table <tb_name><options>;例:alter t able stu c haracter s et utf-8;
六、数据操作
1.创建数据:
insert in to <tb_nam e>(<col_li st>) value s (<value_list>);
其中col_list表示要插入的字段列表,v alue_list表示要插入的相应字段的值,如果没有字段列表,则表示要插入所有的字段。即:inser t into <tb_name> val ues(value_list);
2.查询数据:
selectcol_list f rom <tb_na me>[option s];
select * from <t b_name> [o ptions];
*表示查询所有的字段。
关于options会有很多的操作,是对查询数据的筛选,以后会仔细讨论。
3.删除数据:
deletefrom <tb_n ame> [opti ons];
例:de lete fromstudent wh ere score<60;
注:虽然语法上可以不使用wher e进行过滤,不过在删除时需要在逻辑上严格给出条件,否则容易造成数据误操作,导致损失。如果需要删除所有数据,建议使用whe re 1
4.修改数据:
update <t b_name> se t <col>=<v alue>,… *o ptions];
例:update st udent setscore=88 w here score>72;
和删除数据一样,修改数据也要严格给出条件。
七、校对规则
这一点没有认真学习,以后要回来重新看
八、数据类型
在MySQL中分为三种类型:数值类型、时间日期类型、字符串类型。
1.数值类型:
数值类型分为整型和浮点型,另外还有一种特殊的类型,定点数。
1)整型:t inyint, sm allint, me diumint, i nt, bigint, 分别占用1,2,3,4,8个字节。
可以使用unsign ed控制是否有符号,例:age smal lint unsig ned
可以在定义数值类型中限制最小的显示长度,即前导零填充(zerofill),例:_id int(5) zerofi ll 在My SQL中没有bool类型,语法上不支持,但是实际我们可以使用tin yint(1)来表示
2)浮点型:float, double,分别占用4,8个字节。
实际上,floa t的有效精度只有6位左右,double的有效精度只有16位左右。
支持控制数值的范围:<type>(M, D)
M表示最大的位数,D表示小数点后的位数。即表示整数位最多为M-D。
例:a float(5, 2) 表示a的范围为-999.99~999.99。
支持科学计数法:例:i nsert into <tb_name> values(1.66E8);
3)定点数:定点数是为了解决浮点数的精度问题,不存在精度缺失的问题,不过在性能上
会低于浮点数。
decimal(M, D)
M表示最大长度,D表示小数点后位数,如果超出设定的范围,在整数上超出范围,则不能插入,在小数上超出范围,则进行四舍五入插入。
例:一个decima l(5, 2)的数,插入123.456保存的则是123.46,而插入1234.5时,则会报错。定点数也支持前导零填充、无符号。
2.时间日期类型
时间日期类型分为:datetime, timestamp, date, ti me, year
在表现上,dateti me和timesta mp是一样的,不同的是,datetime存储是使用字符串存储,而timestam p是使用4个字节的整型存储,在范围上,d atetime是’1000-01-0100:00:00’到’9999-12-31 23:59:59’,而timesta mp是’1970-01-01 00:00:00’到’2038-01-19 11:14:07’。
da tetime和tim estamp的标准形式为’YYYY-MM-DD HH:MM:SS’,虽然还可以使用其他方式,但是一律不推荐,虽然在实际上没有’0000-00-00 00:00:00’,但是在MySQL中提供这个值来代替没有值。
dat e: 可以看成是da tetime的一部分,占用3个字节。范围:’1000-01-01’~’9999-12-31’
tim e:可以表示的意义:一天中的时间、时间间隔。范围:’-838:59:59’~’838:59:59’
year: 占用一个字节。范围:1901-2155
虽然数据库提供了良好的日期时间类型,但是我们时常是站在java程序员的角度,所以经常是使用int类型保存数据。
3.字符串类型
My SQL提供的字符串类型很多,但是我们经常会使用char,varchar, t ext。
char(M):M表示字符串的长度(不可变)。
v archar(M): M表示字符串允许的最大长度。实际上va rchar会额外使用字节来保存字符串的长度,而且M表示的自己的长度,所以在存储u tf-8的时候,实际上只能存储一半左右的字符。
text:text是用于字符特别多的情况,具体细节需要查阅文献。
en um:和Java一样,enum提供了多种选项,而字段的值只能是其中的某一个选项,允许为null,实际应该是使用整数类型保存的。
set:和e num不同的是,se t可以允许有多个选项,也允许为null。
定义enum, s et例:hobbyenum(‘foot ball’, ‘ba sketball’) not null
4.类型的选择
虽然My SQL提供了二进制存储图片、视频都二进制文件,但是我们一般不直接使用数据库存储这些资源,而是存储这些资源的url。
在使用数据库的时候,我们需要考虑表的设计,下面给出了一些在设计表的时候需要考虑的问题:
1)尽量精确
2)考虑开发语言
3)考虑兼容性
九、列属性(约束)
1.是否为空
规定一个字段的值是否可以为nul l, 默认情况下可以为null。
2.默认值
default表示在我们插入数据的时候并没有指定该字段的数据时,该字段就为默认值。
3.主键约束
主键(primary k ey):能够唯一标识记录的字段(或是字段的集合)。
虽然可以使用字段的集合作为主键,但是我们通常是建立一行并不是记录的属性的一个字段作为主键,这个字段通常是个i nt值。
主键与业务逻辑没有直接关系,只是用来标识记录。
在My SQL主键不能为null。
1)自动增长:每次自动为记录提供一个唯一的标识,不需要用户来指定。
要求:整型、字段有索引
自动增长的初始值是可以设置的,默认是1。
通过表的选项,例:alter tab le<tb_name> auto_inc rement 10;
自动增长的字段可以手动插入值。
自动增长的主键字段可以手动更改,即更改主键值。
4.外键约束
4.1概念:如果一个实体的的某个字段指向(引用自)另一个实体的主键,就称该实体的那个字段为外键。
被指向(引用)对的实体,称之为主实体(主表),也叫父实体(父表)。
负责指向的实体,称之为从实体(从表),也叫子实体(子表)。
4.2 作用:
1)用于约束关系体内的实体
2)增加子表记录时,是否有与之对应的父表记录
3)在删除或更新主表记录时,从表应该如何处理相关的记录
4.3语法:
1)在创建表的最后定义:forei gn key <co l_name> re ferences <tb_name><c ol_name> [options];
2)在定义字段的时候定义: referenc es <tb_nam e><col_nam e>
4.4设置级联(ca scade)操作:
在主表数据更新时,与之关联的从表数据应该如何处理。
4.4.1允许的级联操作:
1)casca de关联操作:如果主表被更新或删除,那么从表也会执行相应的操作。
2)set nul l: 设置为null, 表示从表不指向任何主表记录。
3)res trict: 拒绝主表操作。
4.5修改外键:
先删除,再新建。通过修改表完成。
al ter table<tb_name>drop forei gn key <fk_symbol>;例:alter tab le student foreign k ey fk_cls_id; altertable <tb_name> addforeign ke y <col_nam e> referen ces <tb_na me> (<col_name>) [op tions];例:a lter table student a dd foreign key (cls_id) refere nces class(cls_id) o n delete s et null;
a lter table student a dd foreign key (cls_id) refere nces class(cls_id) o n delete c ascade;
al ter tablestudent ad d foreignkey (cls_i d) referen ces class(cls_id) on delete re strict;
4.6伪外键
站在java或者php程序员的角度,我们通常是在逻辑上认为实体与实体之间存在关系,但是对于操作数据库而言,我们通常可以不设置外键,而是仅仅地使用逻辑上的外键(实体与实体的关联)。
例如:当我们删除主表时,如果希望删除从表上的数据,那么,即使数据库提供了相应的语法,但是我们可以使用两部操作完成这个逻辑。
十、实体关系
1.一对一的关系
2.一对多的关系
3.多对多的关系
对于多对多关系的表的设计,是通过一个中间表来实现的。即通过中间表实现:1) 任何一个表和中间表的关系都是一对多的关系,中间表的数据都是来自于其他两个表的数据。
实际上:可以将所有的关系都看成是一对多的关系,一对一的关系是一对多的关系的一种特例。
十一、存储引擎(Storage E ngine)
不同的文件有不同的存储结构,例如txt文件和r tf文件虽然都适合对文本进行存储,但是我们知道其中对于文本的存储方式是不一样的,所以文件内部的结构是不一样的。对于文件不同的存储结构,我们就叫做存储引擎。
在M y SQL5.5版本之后都使用INNOD B作为默认的存储引擎,可以再my.ini中进行配置。修改表的存储引擎:alte r table <t b_name> en gine myisa m;
创建表时指定存储引擎:
creat e table ro om (
room_id int pr imary keyauto_incre ment,
roo m_no char(3)sql容易学吗
) engin e myisam;
在My SQL中最常用的存储引擎:myi sam, innod b。
Myisam和innodb的区别:
1.保存的文件方式不同
1)innodb包括一个<tb_name>.frm保存文件结构,通用一个ibdat a1保存所有的inn odb数
据和索引
2)m yisam包括一个<tb_name>fr am保存文件结构,<tb_name>.m yd保存数据,
<tb_name>.myi保存索引文件
2.外键支持
只有innodb支持外键。
选择存储引擎的依据:性能、功能。
myisam擅长查询和插入数据,i nnodb擅长更新和删除数据,innod b并发性更好。
十二、查询
1.排序
排序是按照某个条件进行排序。
语法:order by <col_n ame> [opti on];
允许多字段排序:先按照第一个字段排序,如果第一个字段相同,那么根据第二个字段进行排序,依次类推。
子语句的结果排序:
1)将子语句包裹在子括号内
2)自语句的order by只有在配合limit时才生效。原因是unio n在执行子语句时,会对没有
limit子句的order by优化(即忽略排序)。
2.limit
在所有的过滤条件之后再选取一部分显示。
语法:l imit offse t, row_cou nt; offset表示偏移量,即其实显示的记录位置,可以省略,默认为0,row_count表示显示的记录数。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论