mysql数据库

对于数据库的安装就不在这里介绍了,如果想看可以去看这位大佬的博客:
https://www.cnblogs.com/xuexianqi/p/12795890.html
在这边只说一说mysql的应用:

MYSQL的命令执行

注意:以下是在cmd中运行
mysql -h 127.0.0.1 -p 3306 -uroot -p(完整版链接数据库)
mysql -uroot -p(简略版链接数据库)
quit\exit(链接数据库后想退出可以输入)
\c(当你输入命令不对又不想返回错误信息)
mysqld --install(将mysql制作成系统服务)
mysqld --remove(将mysql从系统服务中移除)
mysqladmin -uroot -p原密码 password 新密码(更改密码)
taskkill /f /pid pid号 (强行删除进程  /f强制)
mysqld --skip-grant-tables (跳过用户名密码登录,必须是管理员模式)

注意:以下可以在cmd中的mysql下运行,也可以直接在mysql中运行
一定要加';'!!!!!!!!!!
关于库相关:
create database 库名;(增加库)
drop database 库名;(删除库)
use 库名;(选择库)
show databases;(查看数据库中所有的库)
show create database 库名;(查看库)
alter database 库名 操作;(修改库)

关于表相关:
select database();(查看当前库的名字)
以下会在你当前选择的库创建删除或修改添加
create table 表名;(名字 类型,名字 类型,……) 创建表
show tables;(查看当前库下所有的表名)
show create table 表名;(查看表)
alter table 表名 modify 名字 类型;(修改表中的类型)
drop table 表名;(删除表)

关于数据相关:
以下会在你当前选择的库创建删除或修改添加
insert into 表名 values();(插入值)(可以插入多个)
select xx from 表名;(查看表名中的表头里的所有信息)
select * from 表名;(查看表中所有信息)
update 表名 set 表头 = xx where 条件;(根据条件更新数据)
delete from 表名 where 条件;(根据条件删除数据)
delete from 表名;(删除表中的数据)

MYSQL的主要存储引擎

1. lnnodb
是MYSQL5.5版本之后的默认储存引擎
会在文件中产生两个文件分别是 .frm与 .ibd
前者是表结构,后者是表数据
相对于myisam来说,存储数据更加的安全
2. myisam
是MYSQL5.5版本之前的默认存储引擎
会在文件中产生3个文件分别是 .frm, .MYD与 .MYI
第一个是表结构,第二个是表数据,第三个是索引(相当于目录)
相对于lnnodb来说,搜索数据更加的快速
3. memory
将数据全放在内存中
会在文件中产生1个文件 .frm
作用是表结构,因为数据在内存中无需保存
4. blackhole
无论是否保存,都会立刻消失相当于一个黑洞
跟memory一样只有一个表结构

至于用法:
show engines; 查看所有表的存储引擎
create table xx engine=innodb(myisam,memory,blackhole)

创建表的注意事项

1. 同一张表中字段名不能重复
2. 设置的类型与存储的类型必须相同或符合其条件
3. 条件结尾不能有逗号
4.5.7版本以前默认不开启严格模式,而在5.7以后(包括5.7)默认开启严格模式。
如无开启严格模式,规定只能存一个字符,你给了多个字符,那么会自动帮你截取
如开启严格模式,那么规定存几个字符,就得存几个字符不然会报错
至于怎么取消严格模式,就是在条件后加入not null
例如:create table xx(id int,name char not null)

修改表与复制表

# MySQL对大小写是不敏感的
"""
1 修改表名
	alter table 表名 rename 新表名;

2 增加字段
	alter table 表名 add 字段名 字段类型(宽度)  约束条件;
	alter table 表名 add 字段名 字段类型(宽度)  约束条件 first;
	alter table 表名 add 字段名 字段类型(宽度)  约束条件 after 字段名;

3 删除字段
	alter table 表名 drop 字段名;

4 修改字段
	alter table 表名 modify 字段名 字段类型(宽度) 约束条件;
	
	alter table 表名 change 旧字段名 新字段名 字段类型(宽度) 约束条件;
5 复制表
	create table 表名 select * from 旧表;  不能复制主键 外键 ...
	
	create table new_dep2 select * from dep where id>3;

"""

严格模式

# 如何查看严格模式
show variables like "%mode";

模糊匹配/查询
	关键字 like
		%:匹配任意多个字符
        _:匹配任意单个字符

# 修改严格模式
	set session  只在当前窗口有效
    set global   全局有效
    
    set global sql_mode = 'STRICT_TRANS_TABLES';
    set global sql_mode='NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES'全局开启严格模式
    修改完之后 重新进入服务端即可

基本数据类型

整形(TINYINT, SMALLINT, MEDUIMINT, INT, BIGINT)

默认情况下会携带符号
如超出限制只存最大可接受值
如需不想携带符号可以加入unsigned
例: create table xx(in tinyint unsigned);
至于在整形后加上宽度,则代表限制位数!

但是整形中有个怪胎(int)
int里的宽度不是限制位数,而是说宽度有多少,里面就有多少位
如位数不够则会自动添加‘空格’
当然不喜欢空格还可以自动添加'0'
create table xx(id int(8) unsigned zerofill)

注意:针对整型字段 括号内无需指定宽度 因为它默认的宽度以及足够显示所有的数据了

在这里插入图片描述

浮点型(FLOAT, DOUBLE, DECIMAL)

float类型表示单精度浮点数值,double类型表示双精度浮点数值,floatdouble都是浮点型,而decimal是定点型;
floatdouble在不指定精度时,默认会按照实际的精度来显示,而DECIMAL在不指定精度时,默认整数为10,小数为0floatdouble求SUM的结果都是不精确的,只有decimal求SUM得到的是精准数值:
所以,decimal 类型是适合财务和货币计算的128位数据类型。

字符类型(char, varchar)

char(4) 数据超过四个字符直接报错,不够4个字符空格补全
varchar(4) 数据超过4个字符直接报错,不够有几个存几个

统计字段长度 char_length
select char_length(name) from xx

char
	缺点:浪费空间
	优点:存取都很简单
		直接按照固定的字符存取数据即可
		存按照五个字符存 取也直接按照五个字符取
		
varchar
	优点:节省空间
	缺点:存取较为麻烦
		存的时候需要制作报头
		取的时候也需要先读取报头 之后才能读取真实数据
		
首先可以肯定的是 char硬盘上存的绝对是真正的数据 带有空格的
但是在显示的时候MySQL会自动将多余的空格剔除
再次修改sql_mode 让MySQL不要做自动剔除操作
set global sql_mode = 'STRICT_TRANS_TABLES,PAD_CHAR_TO_FULL_LENGTH';

时间类型(date,datetime,time,Year)

date : 年月日
datetime : 年月日时分秒
time : 时分秒
Year : 年

集合与枚举

这两个唯一不同的点是:枚举时只能选择一个存储,集合时可以选择多个存储

create table xx(
	id int,
	name char(16),
	sex enum('boy' , 'girl'),
	hobby set('read','play','sleep')
)
insert into xx values(1,'a','boy','read,sleep')

关于mysql的其他方法

default 默认值

create table xx(
	id int,
	hobby enum('read','play','sleep') default 'play'
);
insert into xx(id,hobby) values(1);

unique 值唯一

单列唯一
create table xx(
	id int unique,
	name char(16)
);
insert into xx values(1,'a'),(1,'b')#报错 ,因为id唯一

联合唯一
create table xx(
	id int,
	ip char(16),
	port int,
	unique(ip,port)
);
insert into t4 values(1,'127.0.0.1',8080);	#正确
insert into t4 values(2,'127.0.0.1',8081);	#正确
insert into t4 values(3,'127.0.0.2',8080);	#正确
insert into t4 values(4,'127.0.0.1',8080);  #报错!因为t4的ip与port与t1相同

primary key主键
除开约束效果,它还是innodb存储引擎组织数据的依据,innodb存储引擎在创建表的时候必须要有primary key,因为它类似于书的目录 能够帮助提示查询效率并且也是建表的依据
如果表中没有主键也没有其他任何的非空且唯一字段 那么Innodb会采用自己内部提供的一个隐藏字段作为主键,隐藏意味着你无法使用到它 就无法提示查询速度
约束效果与unique相同
单列唯一
create table t5(id int primary key);
联合唯一
create table t7(
    ip char(16),
    port int,
    primary key(ip,port)
);

auto_increment 自增(一般来说无法停止并且写在主键上)
当编号过多时,人为的维护太麻烦了,因此
create table t8(
	id int primary key auto_increment,
    name char(16)
);
insert into t8(name) values('jason'),('egon'),('kevin');
注意!!!
delete from t1  删除表中数据后 主键的自增不会停止
truncate t1  清空表数据并且重置主键

表与表之间的关联

表与表之间的关联用外键来联系,也就是: foreign key
foreign key
	1 一对多表关系   外键字段建在多的一方
    2 在创建表的时候 一定要先建被关联表 
    3 在录入数据的时候 也必须先录入被关联表
在表与表之间最多只有四种关系
	一对多关系
		在判断一对多前需换位思考,分别站在两张表的角度考虑,
		先创建被关联的一方,然后
		create table dep(
			id int primary key auto_increment,
		    dep_name char(16),
		    dep_desc char(32)
			);

		create table emp(
			id int primary key auto_increment,
		    name char(16),
		    gender enum('male','female','others') default 'male',
		    dep_id int,
		    foreign key(dep_id) references dep(id)
		    on update cascade  # 同步更新
   			on delete cascade  # 同步删除
		);
	多对多关系
		在写多对多关系的时候,不能用两张表去互相关联,因为这样会造成类似于‘死锁’现象,
		因此写多对多的时候我们要去创建第三张表然后去调用他们
		create table book(
			id int primary key auto_increment,
		    title varchar(32),
		    price int
		);
		create table author(
			id int primary key auto_increment,
		    name varchar(32),
		    age int
		);
		create table book2author(
			id int primary key auto_increment,
		    author_id int,
		    book_id int,
		    foreign key(author_id) references author(id) 
		    on update cascade  # 同步更新
		    on delete cascade,  # 同步删除
		    foreign key(book_id) references book(id) 
		    on update cascade  # 同步更新
		    on delete cascade  # 同步删除
		);
	一对一关系
		一对一 外键字段建在任意一方都可以 但是推荐建在查询频率比较高的表中
		create table authordetail(
			id int primary key auto_increment,
		    phone int,
		    addr varchar(64)
		);
		create table author(
			id int primary key auto_increment,
		    name varchar(32),
		    age int,
		    authordetail_id int unique,
		    foreign key(authordetail_id) references authordetail(id) 
		    on update cascade  # 同步更新
		    on delete cascade  # 同步删除
		)
	没有关系
		就跟平常一样创建就好了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值