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);
* 在最后一列的类型后面是不加逗号的 * 举一个例子 ``` MySQL 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中有三大数据类型
- 数值型:整型、浮点型
- 字符串型
- 日期/时间型:年、日期、时间、日期时间
数值型
-
整型:
- tinyint 1个字节
- smallint 2个字节
- mediumint 3个字节
- int 4个字节
- bigint 8个字节
- 具体的形式以及选择参数如下所示:
XXint(M) unsigned zerofill //unsigned表示为无符号类型,不加的话默认为有符号类型(0开始),负的取值按照补码来实现 //M单独没有意义,得和zerofill一起,表示如果数据不足M位的话,自动补0,补够M位
-
小数型
- float(M, D)--浮点小数,M表示总共可以存储M位(不包含小数点),D表示小数点后面的位数为D
- decimal(M, D)--定点小数,M、D意义同上
- 两者都可以表示小数,但是定点小数精度比浮点的高,即decimal精度比float高,适合用于存储货币等要求精度的数字
字符型
- 定长类型--char(M),M代表可以容纳的字符数,范围在0~255之间
char(10) //能够输人10个字符,不管是英文字符还是汉字字符,都是最多可以输人10个的
- 变长类型--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时,取出就会丢失空格!
- 速度上char比varchar快,即定长的快
- 选择char和varchar的原则:
- 空间利用率,比如:四字成语表--char(4)、微博以及个人简介--vrchar(140)
- 速度,比如:用户名--char
- 文本类型--text,可以存储较大的文本段,不过搜索速度稍微慢一些。所以,如果不是特别大的内容的话,建议使用char和varchar进行替代。同时要注意的一点就是text类型不用加默认值(加了也没用)
日期时间类型
- 年--year,1个字节表示,表示1901-2155,还有一个0000表示错误时选择。
- 如果输人两位,00-69表示2000-2069,70-99表示1970-1999(反正就是要在1970年上面!)
- 最好还是输人4位
- 日期类型--date,典型格式 1998-03-13,日期范围:1000-01-01 ~ 9999-12-31
- 时间类型--time,电信格式 hh:mm:ss,时间范围:-838:59:59 ~ 838:59:59,这里的意思是不一定就是在一天24小时,有的情况是时间间隔,所以时间范围可以这么大
- 日期时间类型--datetime,典型格式 1993-03-23 13:13:13,范围 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
- 时间戳--timestamp,用int来存储,是在1970-01-01 00:00:00到当前的秒数。一般存储注册时间、商品发布时间等,不是用datetime来存储,而是用timestamp
- datetime直观,但是对计算机来说计算不便
- timestamp对计算机来说计算方便,而且对于勇于 格式化输出也比较方便