MySQL数据库基础知识

一、基础概念

关系型数据库:由二维表及其之间的联系所组成的一个数据组织。
非关系型数据库:以键值对存储,且结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,这样就不会局限于固定的结构,可以减少一些时间和空间的开销。
实体:现实世界中客观存在并可以被区别的事物。比如“一个学生”、“一本书”、“一门课”等等。值得强调的是这里所说的“事物”不仅仅是看得见摸得着的“东西”,它也可以是虚拟的,比如说“老师与学校的关系”。
属性:教科书上解释为:“实体所具有的某一特性”,由此可见,属性一开始是个逻辑概念,比如说,“性别”是“人”的一个属性。在关系数据库中,属性又是个物理概念,属性可以看作是“表的一列”。
元组:表中的一行就是一个元组。
分量:元组的某个属性值。在一个关系数据库中,它是一个操作原子,即关系数据库在做任何操作的时候,属性是“不可分的”。否则就不是关系数据库了。
:表中可以唯一确定一个元组的某个属性(或者属性组),如果这样的码有不止一个,那么大家都叫候选码,我们从候选码中挑一个出来做老大,它就叫主码。
全码:如果一个码包含了所有的属性,这个码就是全码。
主属性:一个属性只要在任何一个候选码中出现过,这个属性就是主属性。
非主属性:与上面相反,没有在任何候选码中出现过,这个属性就是非主属性。
外码:一个属性(或属性组),它不是码,但是它别的表的码,它就是外码。

二、3范式

第一范式:列不可分
第二范式:完全依赖,对于由属性(A,B)联合构成的主键,存在属性C由A或B一个属性就能确定,这就是部分依赖,C必须由联合主键确定,才是完全依赖
第三范式:无传递依赖,属性C依赖属性B,属性B依赖与主键A,这种传递依赖不能存在。
这三个范式都是为了减少数据库数据冗余,使表结构更加合理。

三、SQL

1、显示数据库、创建数据库、打开数据库

SHOW DATABASES;
CREATE DATABASE 数据库名称 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
USE db_name;

2、用户管理、权限设置

创建用户
    create user '用户名'@'IP地址' identified by '密码';
删除用户
    drop user '用户名'@'IP地址';
修改用户
    rename user '用户名'@'IP地址'; to '新用户名'@'IP地址';;
修改密码
    set password for '用户名'@'IP地址' = Password('新密码')
PS:用户权限相关数据保存在mysql数据库的user表中,所以也可以直接对其进行操作(不建议)

show grants for '用户'@'IP地址'                  -- 查看权限
grant  权限 on 数据库.表 to   '用户'@'IP地址'      -- 授权
revoke 权限 on 数据库.表 from '用户'@'IP地址'      -- 取消权限

对于目标数据库以及内部其他:
            数据库名.*           数据库中的所有
            数据库名.表          指定数据库中的某张表
            数据库名.存储过程     指定数据库中的存储过程
            *.*                所有数据库

            '用户名'@'IP地址'         用户只能在改IP下才能访问
            '用户名'@'192.168.1.%'   用户只能在改IP段下才能访问(通配符%表示任意)
            '用户名'@'%'             用户可以再任意IP下访问(默认IP地址为%)

3、显示表、创建表、修改表

show tables;

create table tb_name(
        id int not null auto_increment,
        value int(2) not null default 0,
        name char(10) default 'aa',
        area char(20) default null,
        primary key(id,value),
        unique key(area),
        constraint fk_name foreign key (name) references tb_other(name)
)ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
ps:
外键的好处:可以使得两张表关联,保证数据的一致性和实现一些级联操作;
唯一键作用:一是约束作用(constraint),规范数据的唯一性,但同时也在这个key上建立了一个唯一索引;
unique key 与 primary key 区别:unique key 可为null;
添加列:
        alter table 表名 add 列名 类型
删除列:
        alter table 表名 drop column 列名
修改列:
        alter table 表名 modify column 列名 类型;  -- 类型
        alter table 表名 change 原列名 新列名 类型; -- 列名,类型
添加主键:
        alter table 表名 add primary key(列名);
删除主键:
        alter table 表名 drop primary key;
        alter table 表名  modify  列名 int, drop primary key;
添加外键:
        alter table 从表 add constraint 外键名称(形如:FK_从表_主表) foreign key 从表(外键字段) references 主表(主键字段);
删除外键:
        alter table 表名 drop foreign key 外键名称
修改默认值:
        ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
删除默认值:
        ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;

清空表:
delete from tb_name;

删除表:
drop table tb_name;

4、索引

create index index_birthday on user_info(birthday);
create index index_birthday_and_user_name on user_info(birthday, user_name);
首先,通过非聚集索引index_birthday查找birthday等于1991-11-1的所有记录的主键ID值。
然后,通过得到的主键ID值执行聚集索引查找,找到主键ID值对就的真实数据(数据行)存储的位置

5、增、删、改、查

增:
insert into test(name, age) values('name', 18);
insert into test(name, age) values('name1', 18),('name2', 18);    #一次性插入多个值
insert into test(name, age) select name,age from test1;    #把某张表中的数据插入

删:
delete from test;
delete from test where id>2 and name='name1';

改:
updata test set name='name2',age=19 where id>12 and name='name1';

查:
select * from test;
select id,name from test where id>2;
select name,age,123 from test;
select name as rname from test;
select * from test where id in (1,3,5,7);
select * from test where id in (select id from test1);
select * from test where id between 5 and 9;    #闭区间,左右都可以取到
通配符
select * from test where name like 'name%';    %匹配无数字符;_匹配一个字符
分页
select * from test limit 10;    取前十条
select * from test limit 0,10;    表示从0开始,取0后面的10条
select * from test limit 10 offset 20;    表示从20开始,取20后的前10条
排序
select * from test order by id desc;    id从大到小排列
select * from test order by id asc;    id从小到大排列
select * from test order by age desc, id asc;    多个不同排序
select * from test order by desc limit 10;    取后十条
分组(聚合函数:count,max,min,sum,avg求平均值)
select max(id),id from test group by sex;    如果遇到相同的sex,只会取最大id的
select count(id),id from test group by sex;    计数
select count(id) as count,id form test group by sex;
select count(id),id from test group by sex having count(id)>2;    对于聚合函数结果进行二次筛选时,必须使用having
select
from
where
group by
order by

6、三大数据类型

数值型
int 
float(m,d) 
double(m,d)
m表示总长,d表示小数点后的位数
时间型
datetime
YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59)
字符型
char varchar text

7、InnoDB与MyISAM区别
MyISAM:默认表类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法。不是事务安全的,而且不支持外键,如果执行大量的select,insert MyISAM比较适合。
InnoDB:支持事务安全的引擎,支持外键、行锁、事务是他的最大特点。如果有大量的update和insert,建议使用InnoDB,特别是针对多个并发和QPS较高的情况。
8、视图、游标、连接、函数、事务、存储过程
有空再写。。。

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

推荐阅读更多精彩内容