MySQL自学笔记

使用MySQL 5.5以及MySQL自带命令客户端

MySQL基础知识

层次结构:数据库服务器–> N多数据库–>N多表–>行与列
大概步骤:
1. 建立、连接数据库服务器
1. 建立库
1. 建立表
1. 数据库操作,比如增删改查等

连接数据库服务器

  • mysql -h localhost -u Username -p Password
  • -h localhost 可以省略
  • Password可以在-p回车后再输入,这样在命令客户端中就是以*显示

一些基础操作命令

  • 显示数据库服务器下的具体数据库–show databases。这里面:information_schema、mysql、performance_schema这三个数据库暂时最好不要去碰
  • 创建数据库–create database DBName[字符集声明,整理声明]
  • 删除数据库–drop database DBName
  • 修改数据库–在MySQL中是不能修改已经创建的数据库名字的!只能修改字符集和整理集
  • 选择数据库–use DBName 选择数据库是在进行表相关操作前
  • 查看库下面所有表–show tables
  • 添加表在数据中
create table TableName( Column_1_Name Column_1_Type, Column_2_Name Column_2_Type, Column_3_Name Column_3_Type);
  • 在最后一列的类型后面是不加逗号的
  • 举一个例子
create table class(
id int,
name varchar(10),
age int
);
  • 删除表–drop table TableName
  • 修改表名–rename table oldName to newName
  • 查看表结构–desc tableName
  • 在表里面添加行
  • 示例
insert into class
(id, name, age)
values
(1, 'James', 23);
insert into class
values
(3, 'Iverson', 26);
insert into class
values
(12, 'AAA', 12),
(13, 'TingTing', 13);
insert into class
(id, name)
values
(24, 'Kobe');
  • 更新表里面的信息
  • 示例
update class
set id = 33, name = Qinghai
where age = 23;
  • 删除表里面的一行
  • 示例
delete from class where id = 24;
  • 查询表里面的信息
  • 示例
select * from class; // 查询整张表内容
select id, name from class; //查询id、name这两列
select id, name from class where id > 13; //查询 id > 13 的内容
  • 插入新的一列
  • 示例
alter table class add score tinyint unsigned not null default 0;
//在表class中插入score这一列,是无符号小的整型数,默认值为0
  • 自己的一些总结
  • 在选择中,select后面、from前面选择的是列的内容,where后面选择的是行的内容
  • 语句是用’;’结束
  • 在打错后可以使用\c推出当前的为结束的语句
  • 可以在txt文档中打完代码在复制粘贴到命令行客户端,不过得注意声明如下代码,防止乱码
set names gbk;
  • 在创建表是,在右括号后、分号前添加代码’charset utf8’表示客户端字符集为’UTF-8’

MySQL中有三大数据类型

  1. 数值型:整型、浮点型
  2. 字符串型
  3. 日期/时间型:年、日期、时间、日期时间

数值型

  1. 整型:
  • tinyint 1个字节
  • smallint 2个字节
  • mediumint 3个字节
  • int 4个字节
  • bigint 8个字节
  • 具体的形式以及选择参数如下所示:
XXint(M) unsigned zerofill 
//unsigned表示为无符号类型,不加的话默认为有符号类型(0开始),负的取值按照补码来实现
//M单独没有意义,得和zerofill一起,表示如果数据不足M位的话,自动补0,补够M位
  1. 小数型
  • float(M, D)–浮点小数,M表示总共可以存储M位(不包含小数点),D表示小数点后面的位数为D
  • decimal(M, D)–定点小数,M、D意义同上
  • 两者都可以表示小数,但是定点小数精度比浮点的高,即decimal精度比float高,适合用于存储货币等要求精度的数字

字符型

  1. 定长类型–char(M),M代表可以容纳的字符数,范围在0~255之间
    MySQL
    char(10) //能够输人10个字符,不管是英文字符还是汉字字符,都是最多可以输人10个的
  2. 变长类型–varchar(M),M含义和上面一样,姿势范围在ascii码中0~65535,utf8码中0~22000
  • char和varchar区别是定义char(M)的话,在空间上就会给分配M个字符占用的空间,不过字符够不够,都实占这些空间;定义varchar(M)的话,占的空间就是实际要用的字符加上1~2个用来计数的字节空间
  • 对比上面两个区别可以知道,char的利用率<=100%,varchar的利用率是i/(i+1~2) < 100%。即varchar的利用率永远都到不了100%
  • 两者之间还有一个区别就是char型如果不够M个字符,内部在后面用空格补齐。
  • 速度上char比varchar快,即定长的快
  • 选择char和varchar的原则:
  • 空间利用率,比如:四字成语表–char(4)、微博以及个人简介–vrchar(140)
  • 速度,比如:用户名–char
  1. 文本类型–text,可以存储较大的文本段,不过搜索速度稍微慢一些。所以,如果不是特别大的内容的话,建议使用char和varchar进行替代。同时要注意的一点就是text类型不用加默认值(加了也没用)

日期时间类型

  1. 年–year,1个字节表示,表示1901-2155,还有一个0000表示错误时选择。
  • 如果输人两位,00-69表示2000-2069,70-99表示1970-1999(反正就是要在1970年上面!)
  • 最好还是输人4位
  1. 日期类型–date,典型格式 1998-03-13,日期范围:1000-01-01 ~ 9999-12-31
  2. 时间类型–time,电信格式 hh:mm:ss,时间范围:-838:59:59 ~ 838:59:59,这里的意思是不一定就是在一天24小时,有的情况是时间间隔,所以时间范围可以这么大
  3. 日期时间类型–datetime,典型格式 1993-03-23 13:13:13,范围 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
  4. 时间戳–timestamp,用int来存储,是在1970-01-01 00:00:00到当前的秒数。一般存储注册时间、商品发布时间等,不是用datetime来存储,而是用timestamp
  • datetime直观,但是对计算机来说计算不便
  • timestamp对计算机来说计算方便,而且对于勇于 格式化输出也比较方便