mysql的学习笔记

MySQL是对数据库概念的实现
数据库是对数据的保存管理
其中的保存对应的是一个文件系统,数据库对应这一个文件夹,表对应着文件,数据对应文件中的数据
而管理是通过sql语句来实现的
sql一共分为四类

  1. DDL用于增删改查数据库和表的
  2. DML用于增删改表中的数据
  3. DQL用于查询表中的数据
  4. DCL用于创建删除用户和给用户授权

DDL

  • 创建语法
基本语法
create database/table 数据库名/表名(列名1 列类型1,列名2 列类型2 ...)
这种创建方式当数据库/表已经存在的时候会报错,而
create database/table if not exists 数据库名/表名(列名1 列类型1,列名2 列类型2 ...)
会向检查数据库/表名知否存在,如果不存在才会创建
上面的创建的数据库/表的字符编码默认是安装mysql时指定的字符集,通过
create database/table 数据库名/表名(列名1 列类型1,列名2 列类型2 ...) character set 字符集名
来指定具体的字符集(utf-8在mysql中会写成utf8)
同时也可以在这一句话加上if来判断是否存在已决定是否创建
create database/table if not exists 数据库名/表名(列名1 列类型1,列名2 列类型2 ...) character set 字符集名

关于创建表的深入

上面提到的列类型常用的有
int 整数类型
double(a,b) a指定浮点数一共有几位,b表示小数部分占几位
date 表示日期年月日用'yyyy-MM-dd'的写法表示
datetime 也是表示日期但是还包括时分秒,用'yyyy-MM-dd HH:mm:ss'表示
timestamp 是一个时间戳,表示形式和datetime一样,区别在于在添加数据时不给这个类型的列赋值,这个类型的列会自动取当前的时间为其的值 
关于创建列表还存在着一些问题
如创建一个名单列表,那么其中的名字这一列是不可能为空的
可以在名字的类型的后面加上not null 来表示这一列不能为空
在比如有些列的数据是不能重复的可以在类型后面加上unique
比如有些列是不能为空却不能重复的就可以使用primary key来限制(一个表中有且只有一列是主键限制的)
  • 删除语法
drop database/table 数据库名/表名
这个语句同样存在一个问题就是当数据库/表不存在时会报错
drop database/table if exists 数据库名/表名
使用这句话就可以避免这个问题
  • 修改语法
1. 数据库和表共有的修改字符集
alter database/table 数据库名/表名 character set 字符集名
2. 表特有的
 	1. 增加列
 		alter table 表名 add 列名 列类型
 	2. 删除列
 		alter table 表名 drop 列名
 	3. 修改列
 		alter table 表名 modify 列名 新类型 -- 这个语句只是修改列的类型
 		alter table 表名 change 旧列名 新列名 新列类型 -- 这个语句同时修改列名和列类型
 	4. 修改表名
 		alter table 旧表名 rename to 新表名
  • 查询类语法
查询所以有的数据库
show databases
查询数据数据的字符集
show create database 数据库名
表示属于数据库(文件夹)中的文件,想要查询文件就需要想进入到文件夹中
use 数据库名-- 使用这个语句可以进入到文件夹中
再来查询数据库中的所有表
show tables
查询某个表的字符集
show create table 表名
查询表的结构
desc 表名

DML

用于增删改表中的数据

增加数据的语法
insert into 表名(列名1, 列名2 ...) values(1,2 ...)
注意点:
1. 各个列名/值之间使用逗号隔开,最后一个不需要使用逗号
2. 如果不写列名列表默认是给所有的列赋值
3. 除了数值型以外的所有类型都需要用''引起来
删除数据语法
delete from 表名 where 条件
这个会删除满足条件的所有数据
注意点:
如果不写条件会删除表中的所有数据,所以写这个语句的时候一定要加上条件
如果就是想清空表的就使用truncate table 表名,这个语句清空表的效率更高
修改数据
update 表名 set 列名1=1,列名2=2 ... where 条件
所有满足条件的行都会被修改
如果没有写条件会默认将所有的行都修改

DQL

查询语法
select [distinct] -- 去重复
	列名列表-- 表示最后结果又那几列,
	-- 这里除了原列表中有的列,还有计算列(将原有列通过四则计算计算得到的新列)
	-- 并却可以通过as关键字来起别名,(as可以省略)
	-- 如果是分组了这里一般写的是聚合函数(count,max,min,sum,avg)和分组的字段`在这里插入代码片`
from
	 表名列表 -- 这些表中查询数据
where
	条件
	-- 满足条件的才会被查出来
group by 
	列(按这个列进行分组)
having
	条件
	-- 跟where的区别在于
	-- where时在分组前进行判断,having实在分组后进行判断
	-- where不通过不会进入到分组中,having不通过不会被查询出来
order by
	查询字段1 排序方式1,
	查询字段2 排序方式2...
	-- 排序方法又两种asc升序排序和desc降序排序
	-- 当前面字段是一样的时候才会通过后面的字段来排序
limit 
	起始位置, 一页多少个

关于多表查询

多表查询分为
select * from table1,table2
这样查询的结果是两个表的所有可能的组合,多表的查询的作用就是消除那些多余的查询
内联查询
	隐式内联查询
		select * from table1,table2 where table1外键=table2主键
		这件事使用where将多余的数据过滤掉
	显示内联查询
		select * from table1 inner join table2 by table1外键=table2主键
		其中的inner可以省略,
		这个写法可以理解为将满足条件的两行合并成一行
外联查询
	内联查询有一个局限在于如果table1中的数据在table2中没有跟其匹配的就不会显示出来
	而是用外联查询可以保证table1中的数据一定会被查询出来,然后table2中的对应的列的值都是null
	语法
	select * from table1 left join table2 by table1外键=table2主键
	这是左外联查询,保证table1中的数据一定会被查询出来,
	同样也有右外联查询,将left替换成right就行,保证table2中的数据一定会被查出来

DCL

用于管理用户

创建用户
create use '用户名' @ '用户的主机地址' identifide by '密码'
删除用户
drop use '用户名' @ '用户的主机地址'
修改密码
set password for '用户名' @ '用户的主机地址' = password('密码')
查看权限
show grants for '用户名' @ '主机名'
授予权限
grant 权限列表 on 数据库(表名) to '用户名' @ '主机名'
撤销权限
revoke 权限列表 on 数据库(表名) from '用户名' @ '主机名'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值