1、链接数据库服务器:
Mysql -h localhost -uUserName -pPassWd (-h 如果不写,则默认连 localhost);
2、数据库相关:
// 1、展示服务器中的所有目前存在的数据库:
mysql > show databases;
// 2、选择(链接)某个数据库;
mysql > use dataName; // dataName 为所需要链接,选择的数据库名字;
// 3、创建一个新的数据库;
mysql > create databse dataName; // 即此时会在 mysql下边的data文件夹下多了一个名称为(dataName)的文件夹;
// 4、删除掉一个数据库;
mysql > drop database dataName;
// 注意: 数据库 名称 是不能 利用控制台语句 直接改变的; 而表/列的名称则可以 利用 控制台语句改变;
3、数据库中表相关内容:
// 1、选择(链接)某个数据库后,展示此数据库下所有的目前存在的表;
mysql > show tables;
// 2、修改某个表的名称:
mysql > rename table 原表名 to 新表名; // 当你执行 RENAME 时,你不能有任何锁定的表或活动的事务。你同样也必须有对原初表的 ALTER 和 DROP 权限,以及对新表的 CREATE 和 INSERT 权限;
// 3、创建一个表; 即:建立表的表头;声明定义 各个列的(字段的)过程;
// 建表 和 列类型 的关系:
// 给 学号 留多宽;给 姓名 留多宽 ; 给成绩、给自我介绍 留多宽; (如果留的过宽,则浪费了空间,如果留的过窄,则存储不下); 思想:能容纳足够数据,又不至于浪费空间;
// 存储同样的数据内容,不同的数据类型,所占用的空间和效率是不一样的,(比如:int 类型 需要占用4个字节,而tinyint 仅需占用 1个空间就行);
3.1、mysql三大列类型:
3.1.1:数值型:(整数,小数);
// 1、数值型====》整形、浮点/定点型; 其中整形:tinyint、smallint、mediumint、int、bigint;
int 系列声明时候的参数有3个可选:即(M) unsigned zerofill
// 1、unsigned: (默认是有符合的);unsigned:则为无符号,最小为0(如果插入了一个负数则存储的为0);
// 2、M 必须和 zerofill 配合起来是用才有意义; M 代表显示宽度,不够M的时候,则用0填充(zerofill),直到补充到M的长度;
// 注意:1: 如果没有 zerofill 属性, 单独的参数 M,没有任何意义. 2:如果设置某列为 zerofill,则该列已经默认为 unsigned,无符号类型.
// 2、数值型====》浮点/定点型; float、double、decimal(定点);
// 小数点左边,能存到多少? float: 10~38(小数点左边可以达到10的38次方)
// 小数点右边,又能存多少? float: 10~-38(小数点右边可以达到10的38次方分之1);
// 即:如果 float(M,D)形式下,如果 M<= 24, 则占4个字节存储,否则占8个字节存储;
// decimal:(定点:是把小数点左边和右边的数分开进行存储的),所以更加精确; 如果d被省略, 默认是0。如果m被省略, 默认是10;即decimal(10.0)为默认的M,D;
// 注意:如果设置了诸如decimai(5,2)这种格式的时候,假如插入的数据为123456(超出了其范围)的时候,最后显示的数据会按照设置时候的(5,2)来展示,即为:999.99,而不是(123456.00);
// float:直接声明,不带后面的(M,D)的时候,最多能精确保留6位(不含小数点), 比如设置成float unsigned的时候,插入 12345678.1234578的时候,最后存储的是:12345700(456中的6进1变7);插入 19.123456的时候,返回的是19.1235(6位)
// 若设置了(M,D)的时候,比如 float(9,3)的时候,若插入 1234567.23(超出了最大范围999999.999)的时候,则会返回 1000000.000(999999.999);应和decimal一样,注意M的范围;若插入12.1234567的时候,则存储的是12.123(按照参数D,保留3位);
3.1.2:字符型:(char、varchar、text、blob):
// 1、char:定长字符型:定义成char(N)字符型后,整个列,每行数据的长度都一样,都为N;若插入的数据<n;则会用空格补充到N个字符; 若存储的数据>n;则之后存储N个字符数据,多出的则被截去;
// 如果不够M个字符,内部用空格补齐,取出时再把右侧空格删掉; 此时注意:这意味着,如果右侧本身有空格,将会丢失.
// 其中,N的范围是0--255个字符(即在utf8编码下,所占最大字节数为255*3,gbk编码下,可能所占最大字节数为255*2); char因为是定长,所以具有查询检索效率高,但是会做成资源的浪费有时候;
此时:char类型数据的空格没有了,因为char数据不够的时候,用空格补充,但是取出数据的时候,自动去掉空格;
而下边的varchar虽然不是定长,一列中每行数据的长度可能会不一样,但是在每行数据存储的开头,都有有1--2个字节表示(此行)所存储的长度。
// 2、varchar:可变字符型:在此列中,每行的长度根据存储的数据长度而自动改变适应;
// varchar 字段是将实际内容单独存储在聚簇索引之外,实际存储从第二个字节开始,接着要用1到2个字节表示实际长度(长度超过255时需要2个字节); 先是实际的长度给出(不用再算了);
// 而mysql则有规定,表中每行定义长度不能超过65535个字节(即在没有定义其他列的情况下,最多能存在65535-1-2个字节),在utf8编码下:最大长度不能设置超过(65535-1-2)/3 = 21844个字符;在gbk编码下:最大存储长度不能设置超过(65535-1-2)/2 = 32766 个字符;
// 如果已经定义了其他的列以及数据类型,此时varchar列能定义的最大字节,还要减去其他数据类型所占的字节数(因为每行的字节不能超出65535);
// 举个例子:在utf8编码下,如果表中已经定义了char(30)的列,则再定义varchar列的时候,最多能存储的字节数为:65535-1-2-3*30个字节;(3*30是utf8编码下,30个字符所占的可能最大字节长度);
// 注意:如果超出了最多能存储的字节数,则会被强制转化成text类型;
//3、text:文本类型,一般用来存储文章内容或者新闻内容,注意:声明text的时候,不能设置默认值;
//4、Blob,是二进制类型,用来存储图像,音频等二进制信息. 意义: 2进制,0-255都有可能出现. Blob在于防止因为字符集的问题,导致信息丢失.比如:一张图片中有0xFF字节, 这个在ascii字符集认为非法,在入库的时候,被过滤了.
3.1.3:日期/时间型:(date、time、datetime、year、timestamp):
注意:1、每种时间、日期都有个严格的范围;
2、year定义的时候,最好用'0000'或者0000(4位)代表默认值,如果向year类型的字段插入0,存入该字段的年份是0000;如果向year类型的字段插入‘0’,存入的年份是2000。
3、timestamp的默认值是当前的时候。即在没有插入数据的情况下,会产生一个当前的一样(此时间,是根据时区来显示的)。timestamp类型与dateTime类型显示的格式是一样的(即:2018-04-10 15:07:00),但是timestamp类型范围比较小(1970-2038),所以需要的时间范围比较大,还是选择dateTime类型比较安全。
3.2、操作数据库表:
3.2.1:创建一个表:create table tableName (各个类的名称以及类型)engine= charset=;
3.2.2:查看表结构: desc tableName;
3.2.3:查看表的创建过程(创建表时候的语句): show create table tableName;
3.2.4:修改表:给表增加一个列: alter table tableName(表名) add columnName(列名称) 列类型;
注意:如果指定将列插入具体位置,后面可以跟上after某列(某列之后),或者first(插入到第一列)
3.2.5:修改表:删除表中的其中一列; alter table tableName(表名) drop columnName(列名称);
3.2.6:修改表:修改表中某一列的数据类型: alter table tableName modify columnName 新数据类型;
3.2.7:修改表:修改表中某一列的名称: alter table tableName change 老列名 新列名 数据类型;
3.2.8:删除表:删除指定的表:drop table tableName;