MySQL学习笔记

继上一篇分享了Oracle学习笔记,现在继续分享MySQL学习笔记,希望对你有所帮助。


数据库系统
DataBase System = 数据库管理系统(DBMS , DataBase Management System) + 数据库(DataBase) + 管理员
DBS = DBMS + DB
定义:对大量信息进行管理的高效解决方案,按照数据结构来组织,存储和管理数据的库。
关系型数据库系统:建立在关系模型上的数据库系统。
关系模型:
当将日常生活中的实体(学生),和实体的属性(学号,姓名)保存到数据中时,应该如何处理该实体结构。
1.数据结构可以规定,同类数据,结构一致。就是一个二维的表格。
2.数据之间的关系可以设置。

Nosql
Not only sql
非关系型数据库系统

关系型数据库的典型概念:
数据库DataBase:存储数据的仓库
表table:数据是保存在表内,保存在一个表内的数据,应该具有相同的数据格式
行&列:行用于记录数据,列用于规定数据格式
记录:行内的数据
字段:数据的某个列

SQL(结构化查询语言 Structured Query Language):数据库管理系统,用来管理数据的语言。
MySQL
数据库(数据+管理)+谁能向数据库系统发出如何管理的命令。
MySQL是基于C/S(客户端/服务端 client/server)架构
管理MySQL服务端程序
1.通过windows提供的服务管理完成
命令行形式管理windows的MySQL服务:
Net start 服务名
Net stop 服务名
windows下,我们在 cmd 中重启 MySQL 时,出现了“发生系统错误 5,拒绝访问”的错误提示,
这个错误是由于我们操作 cmd 的权限不足造成的,解决问题方法如下:
在开始菜单的搜索栏输入cmd,然后右键单击搜索结果,选择以管理员身份运行即可!
2.直接使用mysqld来运行服务
mysqld可以正常运行,就可以使用客户端来访问操作了。
利用mysql.exe来操作
先连接认证:mysql -hlocalhost -P3306 -uroot -p -h 地址 -P端口 -u 用户名 -p 密码

数据库操作:create database db_name [数据库选项];
标识符(数据库名)命名规则:
大小写取决于当前操作系统。(认为是区分的)
见名知意。推荐使用下划线方式。
标识符的字符:使用任意字符,数字,符号,甚至中文。但是一些特殊的组合,例如纯数字组合,特殊符号,包括mysql的内部关键字,应该使用标识符限定符
来包裹。
限定符:反引号
数据查询:
查看当前存在的数据库:show databases;
注意:并不是只有用户可以创建数据库,mysql内部维护自己数据库。
查看数据的创建语句:show create database db_name;
数据库删除:drop database db_name; 不可逆的,慎用
修改数据库信息:alter database db_name [修改指令]
指令:数据库属性的修改

数据库是表的容器,表,必须属于某个数据库,可以通过.语法(库.表 database.table),指明数据表所属的数据库,
进行表操作时,都会指定当前的默认数据库 use db_name;只是设定了默认数据库,不会影响操作其他数据库。
创建表:create table tbl_name(列结构) [表选项];
先分析,需要保存的实体数据,拥有哪些属性,这些属性应该如何保存。
例如:班级的信息
班级班号,班级开班日期
列定义:
列名 列的数据类型 [列的属性(约束)]

create table jdbc.sck_class (
class_no varchar(20),
date_start date
);

查看:
有哪些表 show tables [like 'pattern'];
表创建信息 show create table tbl_name;
表结构(描述表结构) describe tbl_name;
删除表 drop table [if exists] tbl_name;
修改表:
修改表名 rename table old_tbl_name to new_table_name; 支持同时修改多个表,
支持跨数据库重命名。 rename table old_tbl_name to database.new_table_name;
修改列定义
增加一个新列 add新列的定义

alter table td_s_param add  param3  varchar(6);

修改一个列的定义 modify

删除一个列 drop

 alter table td_s_param drop param3;

重命名一个列 change

 alter table td_s_param change param3 tag int;

修改表结构,上面的是子命令,上级是,

alter table tbl_name [add|modify|drop|change]

修改表选项 alter table tbl_name 新的表选项;

 alter table td_s_param character set gbk;

数据操作
创建数据(插入数据) 获得数据(查询数据) 删除数据 修改数据
创建数据:insert into tbl_name(字段列表) values(值列表);
获得数据:select 字段列表 from 表名 where 条件;
删除数据:delete from 表名 where 条件;
删除需要在逻辑上严格给条件,否则容易造成数据误操作,导致损失。语法上可以没有where。可以:如果删除所有数据,使用where 1。
修改数据:update 表名 set 字段=新值,... where 条件;

校对规则:每一套编码字符集都有与之对应的校对规则。
什么是校对规则?在当前编码下,字符直接的比较顺序是什么。
每个字符集都支持不定数量的校对规则,可以通过如下指令:show collation like[pattern];
可以看到:字符集地区名比较规则(ci,cs,bin)不区分大小写,区分大小写,字节比较
在设置字符集时,可以设置当前字符集所采用的校对规则。如果不设置校对规则,那么每个字符集都有一个默认的校对规则。

数值型-整数类型

类型      字节  最小值(有符号/无符号)                   最大值(有符号/无符号)
TINYINT   1          -128/0                                                 127/255
SMALLINT    2             -32768/0                                       32767/65535
MEDIUMINT   3           -8388608/0                                8388607/16777215
INT/INTEGE  4         -2147483648/0                               2147483647/4294967295
BIGINT    8     -9223372036854775808/0         9223372036854775807/18446744073709551615
create table tbl_int(
a tinyint unsigned,
b tinyint
);

是否有符号:
可在定义时,使用unsigned标识,没有符号,不写就认为有符号。
定义显示宽度:通过规定数据的显示宽度,达到统一显示的目的。类型(M)M表示显示的最小宽度是多少(不规定存储)。
需要使用前导零填充达到目的。称之为zerofill
alter table tbl_int add c tinyint(2) zerofill;

数值型-小数类型
浮点:小数位数可以变化。

类型     存储空间(字节)                            最小值(理论)                                             最大值(理论)
FLOAT         4                       -3.402823466E+38  3.402823466E+38                            默认精度位数为6位左右
DOUBLE        8          -1.7976931348623157E+308   1.7976931348623157E+308           默认为16左右
DECIMAL    变长,大致是每9个数字,采用4个字节存储。整数和分数分开计算   M,最大是65    D,最大是30    默认是
10,2        -(65个9) (+65个9)
create table num_2(
a float(5,2),
b double(8,3)
);

支持,控制数值的范围。
type(M,D) M表示所有的数值位数(不包括小数点和符号),D表示允许的小数位数。
定点数:decimal(M,D)

日期时间类型

类型                   显示格式                        取值                       存储空间            零值
DATETIME    YYYY-MM-DD HH:MM:SS     '1000-01-01 00:00:00'到'9999-12-31 23:59:59'      8     0000-00-00 00:00:00
TIMESTAMP   YYYY-MM-DD HH:MM:SS     '1970-01-01 00:00:00'到'2038-01-19 03:14:07'      4    0000-00-00 00:00:00            
DATE             YYYY-MM-DD                       '1000-01-01'到'9999-12-31'      3                 0000-00-00
TIME              HH:MM:SS                          ' -838:59:59'到'838:59:59'        3                   00:00:00
YEAR              YYYY                                  '1901'到'2155'             1                    0000

字符串类型
char(M) 固定长度
varchar(M) 可变长度
M表示允许的字符串长度,M在varchar的表示,是允许的最大长度。char内M表示严格限定的长度。
M表示的是字符数,而不是字节数。但是,总的长度的使用是按照字节计算的。
注意:字段的最大长度,除了类型本身限制之外,记录的总长度也有限制。
真实的varchar长度:总长度65535
varchar特点,当类型数据超过255时,采用2个字节表示长度,整条记录,需要额外的一个字节,用于保存当前字段的null值。除非所有的字段都不为null,
这个字节才可以忽略。一个记录,无论有多少个字段存在null,都是使用统一的一个字节来表示,而不是每一个字段一个字节。

列属性
是否为空:规定一个字段的值,是否可以是null。 null | not null
默认值属性:default value来声明。默认值,在没有为该字段设置值时启用,而且默认值的设置需要使用固定值。
主键:PK,primary key。可以唯一标识某条记录的字段或者是字段的集合,就是主键。
主键可以是真实实体的属性,但是,常用的好的解决方案:利用一个与实体不相关的属性,作为唯一标识。
主键与业务逻辑没有任何关系,只用来标识记录。
设置主键的语法:primary key完成
两种方案:
1.字段上设置,主键字段在插入时不能为空,或者冲突。
2.在定义完字段后,可以定义。可以定义多列主键(组合主键)。一个主键包含多个字段
mysql规定只能存在一个主键
自动增长:为每条记录提供一个唯一的标识,每次插入记录时,将某个字段的值自动加1,使用auto_increment标识。
需要整型,还需要索引。在插入数据时,可以选择性插入null,或者不插入。
自动增长的初始值,是可以设置的,默认为1。通过修改标的选项:auto_increment n
是否可以手动插入该列的值?可以,但是如果是主键的话,不能重复。
该列是否可以更新?可以。

实体
1:1
设计:
两个实体表内,存在相同的主键字码。
如果记录的主键值等于另一个关系表内记录的主键值,则两条记录1:1对应。
1:n 一对多
一个实体,对应多个其他实体。例如:一个班级对应多个学生
设计:
在多的那端,增加一个字段,用于指向该实体所属的另外实体的标识。
m:n多对多
设计:
典型的:利用一个中间表,表示实体之间的对应关系。中间表的每个记录,表示一个关系。

外键
概念:如果某个实体(student)的某个字段(student:class_id),指向(引用)另一个实体(class)的主键(class:class_id),就称student实体的class_id
是外键。
被指向的实体,称之为主实体(主表),也叫父实体(父表)。
负责指向的实体,称之为从实体(从表),也叫子实体(字表)。
作用:用于约束处于关系内的实体。
增加子表记录时,是否有与之对应的父表记录。
在删除或者更新主表记录时,从表应该如何处理相关的记录。
定义一个外键:在从表上增加一个字段,指向主表的主键,使用关键字foreign key
foreign key (外键字段) references 主表名 (关联字段) [主表记录删除时的动作][主表记录更新时的动作]
设置级联操作:在主表数据发生改变时,与之关联的从表数据应该如何处理
主表更新:
主表删除:
使用关键字:
on update
on delete来标识。
允许的级联操作:
cascade:关联操作,如果主表被更新或删除,从表也会至执行相应的操作。
set null:设置为null,表示从表不指向任何主表记录。
restrict:拒绝主表的相关操作。

存储引擎
子查询

1.比较大小函数SIGN
sign(x)或者Sign(x)叫做符号函数,其功能是取某个数的符号(正或负):
当x>0,sign(x)=1;
当x=0,sign(x)=0;
当x<0, sign(x)=-1;
x可以是函数或计算表达式

2.流程控制函数DECODE
在逻辑编程中,经常用到If – Then –Else 进行逻辑判断。在DECODE的语法中,实际上就是这样的逻辑处理过程。它的语法如下:
DECODE(value, if1, then1, if2,then2, if3,then3, . . . else )
Value 代表某个表的任何类型的任意列或一个通过计算所得的任何结果。当每个value值被测试,如果value的值为if1,Decode 函数的结果是then1;如果value等于if2,Decode函数结果是then2;等等。事实上,可以给出多个if/then 配对。如果value结果不等于给出的任何配对时,Decode 结果就返回else 这里的if、then及else 都可以是函数或计算表达式。

  1. 内连接很简单
select A.*, B.* from A,B where A.id = B.id
select A.*, B.* from A inner join B on A.id = B.id

以上两句是完全等价的

  1. 左外连接
select * from emp a left join dept d on a.deptno=d.deptno
select * from emp a,dept d where a.deptno=d.deptno(+)

以上两句是完全等价的

  1. 右外连接
select * from emp a right join dept d on a.deptno=d.deptno
select * from emp a,dept d where a.deptno(+)=d.deptno

以上两句是完全等价的
也就是说只要把语句中的表换个位置,右外和左外就可以起到同样的功能
外连接:
除了显示匹配相等连接条件的数据外,还可以显示某一个表中无法匹配相等连接条件的记录!

  1. 左条件(+) = 右条件
    左条件所在的表必须严格进行相等连接条件的匹配,而右条件所在的表除了匹配相等连接条件外,还可以显 示无法匹配连接条件的数据!
    也称为右外连接.
    可以用下 列语句取代:
    SELECT...FROM 表1 RIGHT OUTER JOIN 表2 ON 条件;
  2. 左条件 = 右条件(+)
    右条件所在的表必须严格进行相等连接条件的匹配,而左条件所在的表除了匹配相等连接条件外,还可以显示无法匹配连接条件的数据!
    也 称为左外连接.
    可以用下列语句取代:
    SELECT...FROM 表1 LEFT OUTER JOIN 表2 ON 条件;

limit是mysql的语法
select * from table limit m,n
其中m是指记录开始的index,从0开始,表示第一条记录
n是指从第m+1条开始,取n条。
select * from tablename limit 2,4
即取出第3条至第6条,4条记录


I LOVE STUDY.jpg
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342