数据库、SQL、MySQL笔记(一)

创建数据库

显示数据库

显示全部

基本语法: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、尝试定点数进行四舍五入

定点数的应用:如果涉及到钱的时候可能使用定点数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值