创建数据库
显示数据库
显示全部
基本语法:show databases;
显示部分
基本语法:show databaases like '匹配模式';
_:匹配当前位置单个字符
%:匹配指定位置多个字符
获取以my开头的全部数据库: 'my%';
获取以m开头,后面第一个字母不确定,最后为database的数据库;‘m_database‘;
获取以databases结尾的数据库:’%databases‘;
显示数据库创建语句
基本语法:show create database 数据库名字;
选择数据库
基本语法: use 数据库名字;
修改数据库
修改数据库字符集(库选项):字符集和校对集
基本语法: alther database 数据库名字 charset = 字符集;
一旦修改成功对应的opt文件中就会体现
是否可以修改数据库名字?MySQL5.5之前是可以修改rename命令:但是5.5之后就不可以
删除数据库
基本语法:drop database 数据库名字;
删除虽然简单但是切记要做好安全操作,确保里面数据没有问题。(重要)
删除数据库之后对应的存储数据的文件夹就会被删除(opt文件也会被删除)
数据表操作
创建数据表
普通创建表
基本语法:create table 表名(字段名 字段类型 【字段属性】,字段名 字段类型 【字段属性】,字段名 字段类型 【字段属性】....)[表选项]
以上错误表明:表必须放到对应的数据库下:两种的方式把表挂入到对应的数据库下
1、在数据表名字前面加上数据库名字,用“.”链接即可:数据库.数据表
2、在创建数据表之前先进入到某个具体的数据库即可:use 数据库名字;
表选项:与数据库选项类似
Engine:存储引擎,mysql提供的具体存储数据的方式,默认有一个innodb(5.5以前默认是myisam)
Charset:字符集,只对当前自己表有效(级别比数据库高)
Collate:校对集
复制已有表结构
从已经存在的表复制一份(只复制结构:如果表中有数据不复制)
基本语法:create table 新表名 like 表名; //只要使用数据库.表名,就可以在任何数据库下访问其他数据库的表名
显示数据表
每当一张数据表创建,就会在对应的数据库下创建一些文件(与存储引擎有关)
注意:结构文件来自于innodb存储引擎,innodb存储引擎所有文件都存储在外部的ibdata文件中
显示所有表
基本语法:show tables ;
匹配显示表
基本语法:show tables like '匹配模式';
显示表结构
本质含义:显示表中包含的字段信息(名字,类型,属性等等)
Describe 表名
Desc 表名
show columns from 表名
显示表创建语句
查看数据表创建时的语句:此语句看到的结果已经不是用户之前自己输入的。
基本语法: show create table 表名;
mysql中有多个语句结束符
;与\g所表示的效果是一样的,都是字段在上排横着,下面跟对应的数据
\G字段在左侧竖着,数据在右侧横着
设置表属性
表属性:指的就是表选项:engine ,charset 和 collate
基本语法:alter table 表名 表选项 【=】 值;
注意事项:如果数据库已经确定了,里面有很多数据,不要轻易修改表选项(字符集影响不大)
修改表结构
修改表名:rename table 旧表名 to 新表名、数据库中数据表名字通常有前缀:去数据库的前两个字母加上下划线。
修改表选项:alther table 表名 表选项 【=】 新值
新增字段: alter table add 【column】新字段名 列类型 【列属性】 【位置 first/sfter新字段名】
字段位置:字段想要存放的位置
First :在某某之前(最前面),第一个字段
After字段名:放在某个具体的字段之后(默认的)
修改字段名:alter table 表名 change 字段名 新字段名 字段类型 【列属型】 【新位置】
修改字段类型(属性): alter table 表名 moify 字段名 新类型 【新属性】 【新位置】
删除字段: alter table 表名 drop 字段名
删除表结构
基础语法: drop table 表名 【,表名2.....】,可以删除多个数据表
批量删除数据表
数据基础操作
插入操作
本质含义:将数据以sql的形式存储到指定的 数据表(字段)里面
基本语法:
Insert into 表名【(字段列表)】values(对应字段列表)
注意:后边(values中)对应的值列表只需要与前面 的字段列表相对对应即可(不一定与表结构完全一致)
查询操作
查询表中所有数据:select * from 表名 ; //*表示匹配所有的字段
查询表中部分字段: select 字段列表 from 表名; //字段列表使用逗号“,”隔开
简单条件查询数据: select 字段列表 /*from 表名 where 字段名 = 值; //mysql中没有==符号
删除操作
基本语法: delete from 表名 【where 条件】; //如果没有where条件:意味着系统会自动删除该表所有数据(慎用)
更新操作
更新:将数据进行修改(通常是修改部分字段数据)
基本语法: update 表名 set 字段名 = 新值【where 条件】; //如果没有where条件那么所有的表中对应的那个字段都会被修改成统一值;
字符集
字符编码概念
字符(character)是各种文字和符号的总称,包括各个国家文字、标点符号、图形符号、数字等
在计算机中所看到的任何内容都是字符构成的
字符编码(character code )是计算机针对各种符号,在计算机中的一种二进制存储代号
字符集概念
字符集(character set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同
常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、GB18030字符集、Unicode字符集等。计算机要准确的处理各种字符集文字、需要进行字符编码,以便计算机能够识别和存储各种文字。中文数字数目大,而且还分为简体和繁体中文两种不同书写规则的文字,而计算机最初是按英语单字节字符设计的,因此,对中文字符进行编码,是中文信息交流的技术基础
设置客户端所有字符集
如果直接通过cmd下的mysql.exe进行中文数据的插入,那么可能出错
出错原因:
1.用户通过mysql.exe来操作mysqld.exe
2.真正的sql执行是mysql.exe来执行
3.mysql.exe将数据传输给mysqld.exe的时候。没有告知其对应的符号规则(字符集),而mysqld也没有能力自己判断,就会使用自己默认的(字符集)
解决方案:MySQL.exe客户端在进行数据操作之前将自己使用的字符集告诉mysqld cmd下的MySQL.exe默认都只有一个字符集:gbk
MySQL.exe如何告知MySQLd.exe对应的字符集为 gbk呢?
快捷方式:set names 字符集
重新进行数据插入:中文(GBK)
深层原理:客户端,服务端,连接层(show variables like 'character_set_%')
mysql.exe与mysqld.exe之间的处理关系一共分为三层
客户端传入数据给服务端:client:character_set_client
服务端返回数据给客户端:server:character_set_results
客户端与服务端之间的连接:conection:character_set_connection
Set names 字符集的本质就是一次性打破三层关系的字符集,变得一致。
在系统中有三个变量来记录着这三个关系对应的字符集:show variables like 'character_set_%' ;
修改服务器端变量的值
Set 变量名 = 值
重新进行数据插入和查看的结果:插入OK,但是查看乱码
修改结果字符集为GBK
connection只是为了更方便客户端和服务端进行字符集转换而设
Set names gbk ;
Set character_set_client = gbk; //为了让服务器识别客户端传来的数据
Set character_set_connection = gbk; //为了更好的帮助客户端与服务端之间进行字符集转换
Set character_set_results = gbk; //为了告诉客户端服务端所有的返回的数据字符集
列类型(字段类型)
整数类型
Tinyint
迷你整形,系统采用一个字节来保存整形:一个字节=8位,最大能表示的数值是0-255
Smallint
小整形:系统采用两个字节来表示的整形:能表示2-65535之间
Mediumint
中整形:系统采用三个字节来保存数据
Int
整形:(标准整形),自用四个字节来保存数据
Bigint
大整型:采用八个字节来保存数据。能表示的数值很大
1、创建数据表
2、插入合理数据
3、插入错误数据(超出对应的数据范围)
4、错误原因:并不是说tinyint没有这么大的空间,而是因为MySQL默认为整型增加了负数。
实际表示的范围区间是-128,127
实际应用中应该根据对应的数据范围来选定对应的整型类型:通常使用的表较多的tinyint和int
无符号标识设定
无符号:表示存储的数据在当前字段中。没有负数(只有正数,区间为0-255)
基本语法:在类型之后加上一个 unsigned
alter table my_int add int_6 tinyint unsigned first; insert into my_int values(255,100,255,255,255,255);
显示长度
显示长度:指数据(整型)在数据显示的时候到底可以显示多长位
tinyint(3)表示最长可以显示3位 unsigned说明只能是正数,0-255永远不会超过三个长度
tinyint(4)表示最长可以显示4位 -128~127
显示长度只是代表了数据是否可以,达到指定的长度,但是不会自动满足到指定长度,如果想要数据显示的 时候,保持最高位(显示长度)那么需要给字段增加一个zerofill属性才可以。
Zerofill:从左侧开始填充0(左侧不会改变数值大小),所以负数的时候就不能使用zerofill,一旦使用zerofill 就相当于确定该字段为unsigned
数据显示的时候,zerofill会在左侧填充0到指定位:如果不足3位,那么填充到3位,如果本身已经够了或者超出,那么就不再填充
显示长度可以自己设定:超出长度(但是不超过范围)不会影响,只会对不够长度的进行补充(显示长度)
小数类型
专门存储小数的
在MySQL中将小数类型分为两类:浮点型和定点型
浮点型:
浮点型又称为精度类型:是一种有可能丢失精度的数据类型,数据有可能不那么准确(尤其是超出范围的时候{精度长度的范围})
浮点数之所以能够存储较大的数值(不准确),原因就是利用存储数据的位来存储指数
整型:所有位都为1
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
计算结果:1*
浮点型:有部分用于存数据,有部分用于存指数
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
前三位转换成十进制之后用作10的指数:10的7次方 数据值
float
Float又称为单精度类型:系统提供4个字节用来存储数据,但是能表示的数据范围比整型大的多,大概是10的38次方只能保证大概七个左右的精度(如果数据在7位数以内,那么则会和基本是准确的,但但是如果超过7位数,那么 就是不准确的)
基本语法
Float:表示不指定小数位的浮点数
Float(M,D):表示一共存储M个有效数字,其中小数部分占D位
Float(10,2):整数部分为8位,小数部分为2位
1、创建一个数据表保存浮点数据
2、存入数据:合法数据
注意:如果数据精度丢失,那么浮点型按照四舍五入的方式进行舍弃
3、插入数据,超出大小
4、数据长度刚好满足条件,但是会超出精度
说明:用户不能插入数据直接超过指定数据的整数部分长度,但是如果是系统自动补位导致的,系统可以承担。
5、浮点数可以采用科学技术法来存储数据
浮点数的应用:通常是用来保存一些数量特别大,大到可以不用那么精确的数据。
double;
Double又称之为双精度:系统采用8个字节来存储数据,表示的范围更大,10的308次方,但是精度也只有15位左右
定点数
定点数:能够保证数据精确的(小数部分可能不精确,超出长度会四舍五入),(整数部分一定精确)
Decimal
decimal定点数:系统自动根据存储的数据来分配存储空间,每大概9个数就会分配四个字节来机型存储,同时小数和整数部分是分开的.
Decimal(M,D):M表示总长度,最大值不能超过65 , D表示小数部分长度,最长不能超过30.
1、创建表:与浮点数对比
2、插入正常数据
:3、插入最大数据
4、尝试定点数进行四舍五入
定点数的应用:如果涉及到钱的时候可能使用定点数