天天看点

MySql学习 日记MySql学习 日记 - 第一篇 基础篇

MySql学习 日记 - 第一篇 基础篇

ucloud learning

背景知识

  • 1970 年 IBM E.F.Codd 博士发表论文“大型共享数据银行的数据关系模型”
    使用表集合来表示数据,相关条目之间采用冗余数据来链接而不是指针来导航。
  • 基本术语
术语 定义
单个数据片段
所有列的一个集合,也叫记录
行的集合
结果集 一般为 SQL 查询的结果
主键 用于唯一标识表中某一个行的一个或多个列组合
外键 用于唯一标识其它表中某一行的一个或多个列组合
  • SQL 是一种语言。操作关系数据库的语言。

    SQL 查询的结果也可以视为一张表,就是上面说的结果集。

    SQL 语句定义了输入和输出,执行语句的方式交由优化器处理。

  • MySql 是一种开源数据库服务器,主页 www.mysql.com. 遵循ANSI SQL标准。

总结一下:MySql是一种开源的关系型数据库服务器,遵循ANSI SQL标准,SQL本身只是一种语言。

安装MySql数据库

sudo apt-get install mysql-server
apt-get install mysql-client
sudo apt-get install libmysqlclient-dev
sudo netstat -tap | grep mysql
           

如果MySql服务端口处于LISTEN状态,表明安装成功

MySql学习 日记MySql学习 日记 - 第一篇 基础篇

登录MySql数据库,-u 表示选择登陆的用户名, -p 表示登陆的用户密码,

MySql学习 日记MySql学习 日记 - 第一篇 基础篇

创建数据库

创建数据库bank,并查看所有的数据库。

create datebase bank;
show databases;
           
MySql学习 日记MySql学习 日记 - 第一篇 基础篇

分配权限:创建一个用户dezho,密码是xyz,分配查询、插入,更新等权限给他。

grant select,insert,update,delete,create,drop,alter on bank.* to [email protected] identified by 'xyz';
quit
mysql -u dezho -p
           

输入密码xyz,查看是否能够登录。

MySql学习 日记MySql学习 日记 - 第一篇 基础篇

使用数据库

创建数据表

  1. 常用数据类型

    选择数据类型的原则:设计数据库尽量用能满足需要的最小类型。

字符型
type 特点 优缺点
char 固定长度 可支持的最大长度255B; 不要额外的用于数据长度的计算;不需要额外空间保存数据长度
varchar 可变长度 可支持的最大长度65535B; 实际存储空间与变量的实际长度相关,节省空间;需要额外的空间保存数据实际长度
整数类型
type 存储大小 十进制最大支持位数
tinyint 1个字节 3位数
smallint 2个字节 5位数
int 4个字节 10位数
bigint 8个字节 20位数
时间类型
type 格式 特点
date YYYY-MM-DD 只能存放年月日,可以用于存放出生日期
datetime YYYY-MM-DD HH-MI-SS 精确到秒,比如订单配送时间,需要具体到秒
timestamp YYYY-MM-DD HH-MI-SS 精确到秒,增加或者更新时会自动地将timestamp列更新为当前时间
year YYYY 只记录年份信息
time HHH:MI:SS 只记录时间信息

2. 设计表结构

规范化:数据库设计时确保没有重复(外键除外)或者符合列。

比如name可以拆分成姓氏与名字,address可以拆分成街道、县、市、省。

设计一个t_person表

类型 说明
persion_id int Primary Key
first_name varchar(20)
last_name varchar(20)
gender char(1) 只能是M,F
birth_date date
street varchar(30)
city varchar(30)
state varchar(30)
country varchar(30)

3. 构建表

create table t_person
(
  person_id int unsigned,
  first_name varchar(),
  last_name varchar(),
  gender char() CHECK (gender IN ('M', 'F')),
  birth_date date,
  street varchar(),
  city varchar(),
  state varchar(),
  country varchar(),
  constraint pk_person primary key (person_id)
);
           
  • constraint pk_person primary key (person_id): 创建一个约束,约束的名字叫pk_person,约束的类型是主关键字约束,并指定person_id遵循该约束。
  • 约束: 写入数据的限制条件
  • 主关键字约束(Primary Key Constraint):输入的列必须能够唯一指定该行。
  • gender char(1) CHECK (gender IN (‘M’, ‘F’))的CHECK语句会被忽略掉,无法保证gender一定在[‘M’, ‘F’]中。可以使用enum的字符数据类型来对gender做数值限制。
  • enum 是一个字符串对象,其值来自表创建时在列规定中显式枚举的一列值。
create table t_person
(
  person_id int unsigned,
  first_name varchar(),
  last_name varchar(),
  gender enum('M', 'F'),
  birth_date date,
  street varchar(),
  city varchar(),
  state varchar(),
  country varchar(),
  constraint pk_person primary key (person_id)
);
           
  • 1,2,4,5,6列都比较好理解,第三列的Null:表明插入数据时,如果没有指定该列的值,是否允许填充为null。
    MySql学习 日记MySql学习 日记 - 第一篇 基础篇

删除数据表

删除数据表一共有三种方法:drop,truncate和delete。使用方法都是[drop|truncate|delete] table 表名。

删除方法 特点
drop 删除表的内容,删除表的定义,释放内存空间
truncate 删除表的内容,释放空间,但是不删除表的定义,索引从头开始
delete 删除表的内容,不删除表的定义,不释放空间,可以回滚,索引不重新设置

增删改查数据

插入一行记录需要提供的信息:表名,列名,各列的值。

1. 主键插入:主键一般采用自增的数字或者uuid。

主键类型 优点 缺点
自增 简单,性能高 主键个数有限,整数类型即使是bigint也只能支持20位数,int只能支持到10位数
uuid 利于分布式表中的主键唯一 uuid占空间大,生成、查询的速度都比较慢,性能较低

修改表t_person中主键person_id的生成方式为自增

  • alter table: 用于在已有的表中添加、修改或删除列。
MySql学习 日记MySql学习 日记 - 第一篇 基础篇
  1. insert、select, update, delete语句
插入语法:INSERT INTO table_name(列1, 列2,…) VALUES (值1, 值2,….)
insert into t_person(first_name, last_name, gender, birth_date) values ('zhiwei', 'pei', 'M', '1988-05-06');
select * from t_person ;
           

插入之后查询,得到的结果集如下所示:

MySql学习 日记MySql学习 日记 - 第一篇 基础篇
删除语法: DELETE FROM 表名称 WHERE 列名称 = 值
delete from t_person where person_id=;
select * from t_person ;
           

删除之后查询,发现之前的记录已经没有了.

MySql学习 日记MySql学习 日记 - 第一篇 基础篇

查询语法:

SELECT 列名称 FROM 表名称

SELECT * FROM 表名称

insert into t_person(first_name, last_name, gender, birth_date) values ('zhiwei', 'pei', 'M', '1988-05-06');
select person_id, first_name, last_name from t_person ;
           
MySql学习 日记MySql学习 日记 - 第一篇 基础篇
更新语法: UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值

比如我们将last_name改成’chen’

update t_person set last_name='chen' where person_id=;
select person_id, first_name, last_name from t_person ;
           
MySql学习 日记MySql学习 日记 - 第一篇 基础篇