MySQL基础部分

一、开场吹比

CRUD

层次模型 网状模型 关系型

出现箭头时输入分号回车,表示这行语句结束 创建data文件:mysqld --initialize-insecure --user=root(在文件目录下)

二、安装连接以及配置

1.数据库显示和讲解

net stop/start mysql57 (关闭或启动)

information_schema:提供对数据库元数据的访问(有关mysql服务器的信息,数据库或表的名称,列的数据类型或访问权限)

mysql:存储用户信息

performance_schema:存储服务运行过程中的状态信息(执行的语句,花费的时间,占用的内存) sys:存储系统文件

2.创建数据库

create database student

检查是否存在数据库,若不存在则创建数据库(反之不创建,但通过命令):create database if not exists student

3.删除数据库:

drop database student

检查是否存在数据库,若存在则删除数据库(反之不删除,但通过命令):drop database if exists student

共同点:强制 创建 / 删除 关键字命名的数据库:加反引号

4.查看创建数据库的SQL

show create database student

5.创建数据库指定字符编码

create database student charset=gbk

查看字符编码时与查看SQL相同,show create database student

关于字符编码,常用的两种:GBK(中国标准), UTF-8,windows系统下用GBK(实际开发中一定用UTF-8),Mac或linux系统下用UTF-8

6.修改数据库字符编码

alter database student charset=gbk/utf8

三、表的基本操作

1.引用数据库和查看数据库中的表

user leslie_school

show tables

2.创建表

create table student(换行) id name age:称为字段 逼格创建表: create table if not exists lesle( id int auto_increment primary key comment ‘主键id’, name varchar(30) not null comment ‘老师姓名’, phone varchar(20) comment ‘电话号码’, address varchar(100) default ‘暂时未知’ comment ‘住址’ )engine=innodb

auto_increment:自动增长且无重复,primary key:(主要的:用于区分,基本的:不能为空),not null:不能为空,default:设置默认值,engine=innodb:最常用、效率最高的mysql引擎 show create table student:可以查看当时创建表使用的语句

**注:**必须将该数据库的字符编码格式改为GBK才能在创建表时使用 default ’ ’ 指定默认值的语句 创建以关键字命名的表同样需要加反引号才能成功创建

3.查看表结构

desc student:以表格的形式显示

4.删除表 / 多张表:

drop table if exists a, b, c

5.修改表

表中一行行数据称为记录实际上是修改表的结构

增加记录 / 到指定位置: alter table teacher add gender int(12) after (指定位置)/ first(第一行)

6.删除记录

alter table teacher drop gender

改字段名字和数据类型 / 只改数据类型:alter table teacher change id(原名)+ 要改的名字 + 类型modify id(原名)+ 新数据类型

7.改表名

alter table +(原表名)+ rename to + 新名字 三级递增查看:show databases(所有数据库) ——> show tables (所有表)——> desc teacher(单个表)

四、数据操作

1.插入数据

insert into teacher values() 亦可以在前面加入格式,只要一一对应即可 插入多行数据时,只需在,后面加括号按原格式写入即可

**注:**自动增长的数据写入null会自增,默认的数据写入default会自动填入创建时指定的数据,非空的数据不能填入null

2.字符编码集问题

client 和 result都是gbk(用于练习)set character_set_%=gbk

3.删除数据

delete from teacher(表名) + where + 条件(如id>4, name=Tom等等)

4.清空表

truncate table + 表名delete from teacher(表名)(一般不用,底层实现太慢) 用truncate删除再写入新数据时从头开始,用delete删除再插入从原来的数据后面开始

5.更新数据

update + 表名 + set + 修改的内容 + where + 条件(可用or连接,如果两个条件都满足则都执行)

6.查询表数据

select + (条件,如id, name,*全部)from + 表名

7.SQL语句区分

DDL data definition language 数据库定义语言: create alter drop show

DML data manipulation language 数据操纵语言: insert update delete select

五、数据类型

1.数据库的数据类型问题

没有统一标准,但要符合业务项目的逻辑标准

2.int 类型

unsigned:无符号正整数类型,范围是左右相加 插入数据时可以超过定义宽度但不能超过原数据类型最大限度

3.浮点数

float, double:超过小数位的位数就会四舍五入位数过长会数据丢失

4.定点数

decimal(支持无符号,整数小数分开存)

5.字符串与文本类型

char:实际上是字符串类型,一般用varchar,可回收剩余空间,但效率不如char高 6.布尔类型:true(1), false(0)

6.枚举类型

enum() 只能取给定的类型中的内容插入时可以用数字,枚举类型存储也是用数字,节省空间,限制数据,速度快

7.set类型

set(’ ', ’ ‘) 插入时可以选多个内容,但必须在一段’ '内(存储方式为2的次方)

8.时间日期类型

datetime(常用格式) 按格式插入即可

六、列属性完整性

1.列属性问题

自增的数据删除后无法再使用删除过的自增数字

2.Primary Key

唯一不重复,关键特征,查询速度快,与其他表可能有关联,不能为空

3.增加主键

alter table + 表名 + add + primary key (1, 2)可以增加多个()组合(复合键)主键 删除主键,alter table + 表名 + drop primary key 选择主键时一般只要一个,并且是具有代表性易于区分,易于查询(一般是数字)

4.unique

唯一键,与其他表无关联,不能重复,可以为空,可存在多个,可以通过alter添加,添加时用add unique +(字段名),删除唯一键用drop index + 字段名

5.数据库完整性

有一个主键,数据类型要选对,为不为空,默认值,添加约束,别的表可能会用

6.外键

foreign key (并发项目禁止使用外键) 创建表时添加:foreign key (子表->stuId) references stu(父表)(stuId) 后期可以用alter修改,用add添加即可 一般都是在创建时就设计好

7.删除外键

先用show table 查看,然后用alter table + 表名 + drop priamry key + (外键别名) MUL:表示该列的值可重复

8.置空操作

置空:将外键关联的从表中的字段置空为NULL,数据还存在

级联:从表与主表一起更新数据,(彻底删除)主表中的数据删除,与它绑定外键的数据全部删除 删除时一般不使用级联,一般用置空操作

9.置空和级联演示

创建时 on delete set null on update cascade 级联:update stu set stuId=‘4’ where name=‘frank’(将主表中id改为4),从表中与stuId级联的数据也变为4

置空:delete from stu where stuId=‘2’,从表中stuId=2的字段置空为NULL,但该字段对应的数据保留

七、数据库设计思维

Codd第一范式,确保每列字段的原子性

第二范式,每个表必须有主关键字(Primary key),其他数据元素与主关键字一一对应

第三范式,消除传递依赖,数据元素之间相互独立

八、单表查询

1.select

随意查询,可作计算,加as可以起别名 from:select * from 表1, 表2返回两张表的笛卡尔积

2.dual

伪表,from dual,可以省略 where:后面可以接各种各样的条件 in:where 字段 in(‘ ’,‘ ’),和or同理 between and :where + 字段 + between … and …

3.聚合函数

select 函数名(条件)from 表名

常见函数:sum,max,min,count,avg

4.使用客户端图像界面

Navicat,破解工具直接搜

5.模糊查询

where name like ‘张%’ 配合通配符使用,%代表多个字符,_ 代表一个字符

6.分组查询

select avg(age) as ‘年龄’,address as ‘地区’ from info group by address group by

使用条件:有聚合函数,有分组的字段 group_concat(字段名),可将符合条件的分组聚合 select group_concat(address),gender from info group by gender

7.having

在已经查询到的虚拟表中利用条件再次查询,后面跟的条件名与别名相同 limit 1, 2:1,起始位置,2,长度

8…distinct

去重,后跟字段名,可以配合count函数查询去重后的数据个数count(distinct 字段名)

九、多表查询

1.union

查询的两张表字段名相同,连接两句查询语句,union后可跟distinct去重 distinct:去重,去掉重复值,多个相同的值只显示一次

2.inner join(内连接)

将两张表连接,select (查询的字段)from t1 inner join t2 on (两张表的公共字段作连接) t1.id=t2.stuId、 多张表后再加inner join

3.left join

以左表为基准(将左表提到的数据全部显示,数据为空的显示为NULL)

4.right join

以右表为基准

5.cross join

返回笛卡尔积

6.natural join

自然连接,将两张有相同的字段名的表连接,显示两张表的其他剩余所有数据,中间可以加left right 自然左连接和自然右连接 如果没有相同字段名,则返回笛卡尔积

7.using

当多表查询时出现多个相同字段但要进行连接时,用using(字段名),使用该字段名连接

一般都将字段名写全,不使用using

十、子查询

1.嵌套查询

一个查询语句中嵌套另一个查询语句,将返回值作为where后的条件,用in连接,还有not in,in的反面

2.exists 和 not exists

父语句 where exists (子语句)子语句只要满足某一条件,父语句就执行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值