数据库基本SQL语句和基本数据类型

数据库基本SQL语句和基本数据类型

  • 数据库演变史

    分为四个阶段
    1.纯文件阶段 各自写各自的格式不统一
    2.规定开发目录规范 还是各自写各自的
    3.存储位置和格式确定,使用统一的
    	单机游戏  自己电脑存放自己电脑的
    	联机游戏	所有数据存在公用的一个数据库里
    
  • 软件开发架构以及数据库本质

    分为c/s架构和b/s架构
    c/s:client 客户端   server:服务端
    b/s:Browser 浏览器  server:服务端
    
    数据库本质就是一款c/s架构的软件
    
  • 数据库分类

    关系型数据库 #固定表结构 采用
    	mysql、mariadb、Oracle、postgresql、sqlite、db2、sqlserver	
    非关系型数据库 #没有固定表结构 数据存储采用key、value形式
    	redis、mongodb
    
  • 数据库下载与安装

    官网 下载 5.5  5.6 5.7 8.0
        	点击downloads
            	点击GPL
                	选择社区版(community)
                    	点击archives
                 
    # windows安装
    	1.解压文件夹
        2.介绍:服务端(mysqld.exe)  客户端(mysql.exe)
        3.先启动服务端 之后再使用客户端链接
    
  • 系统服务制作

    1.环境变量 # path 加上mysql文件夹bin的目录
    2.以管理员的身份添加系统服务
    	mysqld --install    #会发现服务多了一个mysql
    3.启动就好
    	net start mysql
    '''
     停止服务
    	net stop mysql
    移除服务
    	mysqld --remove
    '''
          
    
  • 基本操作命令

    1.登录
    	mysql -u用户名 -p密码 -hIP地址 -P端口
        mysql -uroot -p123 -h192.168.15.xxx -p 3306
    2.数据库
    	查看:show  databases
        退出:exit 
        取消:\c
        
    
  • 更改密码以及配置文件

    # 修改密码的两种方式
    	mysqladmin -u用户名 -p原密码 -password 新密码
       # mysqladmin -uroot -p -password 123   #默认密码改为123
        set password=PASSWORD('新密码')
    # 忘记密码操作
    	停止正常的mysql服务 然后以跳过授权表的方式重新启动
        	net stop mysql
            mysqld --skip-grant-tables  #跳过授权
        以管理员身份登录修改指定表中的用户数据
        	update mysql.user set password=PASSWORD(123) where user='root' and host="localhost";
         重启
    
  • 数据库概念

库		文件夹
表		文件夹里面的文件
记录		文件夹里面的文件里面的一行行数据

今日内容概要

  • 基本SQL语句

    针对库 针对表 针对记录
    
  • 存储引擎

  • MySQL基本数据类型

    整型 浮点型 字符类型 时间类型 枚举与集合类型
    

内容详细

  • 基本SQL语句操作之库

    #增  create databse 数据库名称
        create database db156; #创建数据库db156
        
    #删  drop database 数据库名称
    	drop database db156; #删除数据库
        
    #改 alter database 数据库名称 charset='字符编码';
    	alter database db156 charset='gbk'
        改完可以查询一下看看 show create database db156;
        
    #查 show create database 数据库名称
    	show databases;#查看所有数据库
     	show create database db156; #查看单个数据库 创建语句,字符编码等
        
    
  • 基本SQL语句操作之表

    #增加前需要进入到这个数据库 select database(); 查看当前所在数据库    use 数据库名称 切换数据库
    	use db156   #切换成功会出现下面这个语句
    	Database changed
    -------------------------------------------------------------------------------------
    #增 create table 表名称(字段 字段类型 )这个是不完整的  下面会有完整语法
    	create table edg(id int);
        
    #删 drop table 表名;
    	drop table edg;
        
    #改 alter table 表名 rename 新表名;  charset :指定字符编码
    	alter table edg rename rng;
        
    	
    #查 show create table 数据表名称
    	show tables;  #查看所有表
        show create table edg; #查看单个数据表 以及他的创建语句 字符编码等
        describe edg; #可以简写  desc edg; 查看单个表信息
    
  • 基本SQL语句操作之记录

"""
	操作记录之前必须要有库 表
"""


#增  insert into 表明 values(对应表设置的格式)
	insert into edg values(1,'hahaha');
#删 delete from 表名 where 条件
	delete from edg where id=2
#改 update 表名 set 字段名='新的字段值' where 条件 字段=具体的值
	update edg set name='dijia' where id =2;#不加where条件修改整张表
#查 select * from 表名; *可以替换成字段名称
	select * from edg;
    select name from edg;

存储引擎

#查看存储引擎   show engines;

需要掌握以下四个 
	MyISAM   #速度快不安全
    	是MySQL5.5版本之前默认的存储引擎
        	优点:该引擎存取数据的速度都很快
            缺点:但是安全性较低 不支持很多额外的功能
    InnoDB  #安全 速度相对于myisam慢  
    	是MySQL5.5版本之后默认的存储引擎
        	优点:该引擎支持事务、行级锁、外键
            	#简单了解下
            	事务:多条sql语句执行了一条 ,其他没执行,可以回退 时间回退
                行级锁:表中的数据,锁住一行只能一人访问,还有表级锁 这个表只能一人操作,他操作完其他人才可以操作
                外键:表与表之间的关系
            缺点:存取数据的速度没有MyISAM快但是功能和安全性更高
    memory #内存
    	数据全部存储在内存中 速度很快但是断电立刻丢失
    blackhole #垃圾堆 回收站
    	黑洞 任何放入其中的数据都会消失(类似于垃圾处理站)

存储引擎的差异 (创建表时可以指定存储引擎) engine

#创建四个表分别用 myisam  InnoDB  memory blackhole  
create table a1 (id int) engine=myisam;
create table a2 (id int) engine=InnoDB;
create table a3 (id int) engine=memory;
create table a4 (id int) engine=blackhole;


# 不同存储引擎文件后缀名
	MyISAM
		三个文件
        	.frm	表结构
            .MYD	表数据
            .MYI	表索引
   InnoDB
		两个文件 #所以速度比较慢
    		.frm	表结构
        	.ibd     数据与索引
   memory   #在内存里面存
		.frm	表结构
   blackhole  #回收站不需要数据	
		.frm	表结构
#插入数据
insert into a1 values(1);
insert into a2 values(1);
insert into a3 values(1);  #因为存在内存 重启后消失
insert into a4 values(1);  #垃圾堆没有东西,扔进去文件相当于删除

对应的表目录下创建了这些个文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A5eO0yza-1636515590636)(C:\Users\张世虎\AppData\Roaming\Typora\typora-user-images\image-20211109204931179.png)]

创建表的完整语法

create table 表名(
	字段名1 字段类型(数字) 约束条件,
    字段名2 字段类型(数字) 约束条件,
    字段名3 字段类型(数字) 约束条件
);
# 注意事项
	1.字段名和字段类型是必须的比如id int 数字和约束条件是可选 ,数字下面还会有详细说明
    #数字在数字类型中并不是用来限制存储长度 而是用来控制展示长度,没什么作用,所以以后遇到数字类型不要指定数字 让他使用自带的即可
    2.约束条件可以有多个,可以看作字段类型的额外约束,也可以说在一个条件 比如 unsigned (不要正负号,全存正数)zerofill(不足的0填充) 
    3.最后一个字段结尾不能有逗号(不容易发现) 因为复制的忘记删掉了
    

数据类型

#整数型
tinyint		1bytes       (-128127)          (0255)
smallint	2bytes		 (-3276832767)		 (065535int			4bytes		 很多 十位 手机号不能用这个
bigint		8bytes		  很多	手机号可以用这个或者存成字符串

#所有的int类型默认都是空出一位存储正负号 存的是负数和正数,超过最大值和最小值,默认存成支持的最大最小值
	如果不想让他存负数那么就可以创建表时候加入一个约束条件unsigned
    create table a6(id tinyint unsigned);
	insert into a6 values(256),(-129);
    select * from a6  #发现输出 255  0
 -------------------------------------------------------------------------------------
# 浮点型
	float(255,30)    #精确到小数点后七位
    	总共255位小数位占30位
    double(255,30)   #精确到后14位
    	总共255位小数位占30位
    decimal(65,30)
    	总共65位小数占30位
    create table a8(id float(255,30));
    create table a9(id double(255,30));
    create table a10(id decimal(65,30));
    insert into a8 values(1.1111111111111111111111111111);
    insert into a9 values(1.1111111111111111111111111111);
    insert into a10 values(1.1111111111111111111111111111);
    '''三者精确度不同
    	decimal > double > float
    具体使用结合实际情况
    '''

-------------------------------------------------------------------------------------
# 字符串类型
	char(4)  # 定长
    	最多存储四个字符 超出了则报错 没超出则用空格填充
    varchar(4)  # 变长
    	最多存储四个字符 超出了则报错 没超出有几个存几个
    create table a7(id int,name char(4));
    create table a8(id int,name varchar(4));
    insert into a7 values(1,'zhang');
    insert into a8 values(1,'zhang');
    #发现存的是zhan两个都是
#由于发现寸的数据不完整,数据丢失 是之前修改的my.ini配置文件 sql_mode删掉了
#如果是5.7版本以上的mysql 会报错 他已经设置了默认
#sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 


5.7 版本不报错  因为他本身自带
-------------------------------------------------------------------------------------
#由上面引出sql_mode
1.模糊查询
	
	show variables like '%mode%';
    +----------------------------+------------------------+
    | Variable_name              | Value                  |
    +----------------------------+------------------------+
    | binlogging_impossible_mode | IGNORE_ERROR           |
    | block_encryption_mode      | aes-128-ecb            |
    | gtid_mode                  | OFF                    |
    | innodb_autoinc_lock_mode   | 1                      |
    | innodb_strict_mode         | OFF                    |
    | pseudo_slave_mode          | OFF                    |
    | slave_exec_mode            | STRICT                 |
    | sql_mode                   | NO_ENGINE_SUBSTITUTION |
    +----------------------------+------------------------+
#发现 sql_mode只有一个NO_ENGINE_SUBSTITUTION 所以需要加上STRICT_TRANS_TABLES  严格模式
#两种修改方式
	set session #临时修改
    
    set global #永久修改 电脑不重启
    
    直接修改配置文件  sql_mode='strict_trans_tables'
    
    
    set global sql_mode='strict_trans_tables'
    需要退出mysql 在重新登录生效
-------------------------------------------------------------------------------------
#数字在数字类型与字符类型中的区别
	 数字在字符类型里用来限制存储长度
	数字在数字类型中并不是用来限制存储长度 而是用来控制展示长度,以后遇到数字类型不要指定数字 让他使用自带的即可(可能会用在订单号 商品编号 固定几位数)  使用zerofill约束条件,不足的用0补充,超出的有多少显示多少 最多11

char与varchar差异

#统计字段数据的长度 char_length(字段名)
create table a9(id int,name char(5));#创建a9 设置char最多存储5位
insert into a9 values(1,vn);  #添加数据name字段数据两位
insert into a9 values(2,'eza'); #添加数据name字段数据三位
select char_length(name) from a9; #查询a9 name字段数据长度 凡发现为2 3 和上面的char不足空格补充结论不一样
    +-------------------+
    | char_length(name) |
    +-------------------+
    |                 2 |
    |                 3 |
    +-------------------+
#是因为底层做了优化,如果想看见需要指定sql_mode
	set global sql_mode='strict_trans_tables,pad_char_to_full_length'#之前的              #新加的	
 退出再从新进mysql

	insert into a9 values (3,'aaa'); #重新添加数据
     select char_length(name) from a9;  #在查询一下a9 name 字段数据的长度
        +-------------------+
        | char_length(name) |
        +-------------------+
        |                 5 |
        |                 5 |
        |                 5 |
        +-------------------+
根据上面在验证一下varchar
	create table a10 (id int ,name varchar(5));#先创建a10 name字段为varchar 限制长度为5
    insert into a10 values (1,'vn'); #添加数据
    insert into a10 values (2,'eza'); #添加数据
    mysql> select char_length(name) from a10;  #查询发现有几位存储了几位
        +-------------------+
        | char_length(name) |
        +-------------------+
        |                 2 |
        |                 3 |
        +-------------------+
    

char与varchar优缺点

	char
    	优势:整存整取 速度快 ,不足空格补充
      	劣势:浪费存储空间
    varchar
    	优势:节省存储空间
    	劣势:存取数据的时候都需要先考虑报头 速度较于char慢
    char(6)  varchar(6)
    #每次读取一个bytes报头数据,报头里存储了后面字符长度
    1bytes+jason1bytes+tony1bytes+jack1bytes+kevin 
    
posted @ 2021-11-10 11:40  迪迦张  阅读(66)  评论(0编辑  收藏  举报