了解MySQL的第一步

371 阅读4分钟

MySQL基本概念:

操作语句

1. 操作数据库:

    创建数据库: create database 数据库名 charset utf8;
    查看数据库: show databases;
    选择数据库: use 数据库名;
    删除数据库: drop 数据库名;
    修改数据库: alter database 数据库名 charset utf8;

2. 操作表:

先切换到数据库下:
    创建:create table 表名(字段名1 类型(宽度) 约束条件,字段名1 类型(宽度) 约束条件);
    查看:show tables;
    修改:alter table 表名 modify 字段名 类型(宽度);
         alter table 表名 change 旧字段名 新字段名 类型(宽度);
    删除:drop table 表名;

3. 操作表中的记录:

    插入:insert into 表名 values(值1,值2.....);
    查询:select * from 表名;
    修改:update 表名 set 字段名=值 where 条件;
    删除:delete from 表名 where 条件;

约束

为了防止在数据表中插入错误的数据,在Mysql中定义了一些维护数据库完整性的规则,这个规则就是表的约束,通过这些约束我们可以保证数据的正确性。

主键约束: 当我们的数据库中保存了成千上万条数据时,如何能找到你需要的那条数据呢? MySQL提供的主键约束即可帮助我们快速的查询到我们想要的数据。 主键是唯一标识一条记录的,可以把它比喻为身份证号,尽管全世界有那么多人, 但只要知道了身份证号就可以很快的查找一个人的信息。

外键约束: 表的外键是另一表的主键, 外键可以有重复的, 可以是NULL,用来和其他表建立联系用的,一个表可以有多个外键。

非空约束: 非空约束所对应的列在插入数据时不允许为空,也就是必须为该字段赋值,MySQL中使用NOT NULL来表时非空约束其语法为:

create table money(time datatime,money int NOT NULL);

唯一约束: 唯一约束用于保证数据表中字段的唯一性,即表中字段不可以出现重复的值, 唯一约束通过UNIQUE来指定,其语法格式为:

create table person(id int UNIQUE,age int);

默认值约束: 在一些应用场景下,我们会希望对每一条数据中的某个字段赋予一个默认值, 例如:在一些游戏中,每个账号默认会赠送给用户一定数量的金币,此时金币这个数据就可以使用默认值约束了,MySQL中使用DEFALUT为字段指定默认值其语格式为:

create table user(account char(20),password char(6),money int DEFALUT 1000);

基本数据类型:

整数

tinyint()    1字节
smallint()   2字节
mediumint()  3字节
int()        4字节
bigint()     8字节
对于整型而言,宽度用于控制显示的长度
例如 int(10) 则表示显示的时候,如果不足10位则补足到10位,默认用空格填充
ZEROFILL 设置以0填充

浮点

float(m,d)   4字节
double(m,d)  8字节
decimal(m,d) 不固定
在浮点类型中,后面的m表示整体长度,d表示小数长度
注意:是长度和字节数无关

字符串

char
    定长字符串,超出范围会报错,速度快
varchar
    可变长字符串,节省空间,速度慢

时间

year
date
time
datetime
timestamp  自动更新

建立表之间的关系

一对多关系:

1.创建表
创建主表(department)
create table department(id int primary key auto_increment,
department_name char(20) unique,
job char(50) not null);

创建从表(employee)
create table employee(id int primary key auto_increment,
employee_name char(20) not null,
gender char(20),
age int,
foreign key(id) references department(id));

2.插入表
插入主表
insert into department values(1,'市场部','宣传'),(2,'销售部','销售');

插入从表
insert into employee values(1,'jarvis','male',28),(2,'jasion','male',25);

*******
删除要先删除从表再删除主表
删除记录也一样,要先删从表再删主表
*******
级联:
on delete cascade 当主表删除记录时 从表相关联的记录同步删除
on update cascade 当主表id更新时 从表相关联的记录同步更新
主表变化操作从表,从表变化不会操作主表

#实例语句
create table employee(id int primary key auto_increment,
employee_name char(20) not null,
gender char(20),
age int,
foreign key(id) references department(id) on delete cascade);

多对多关系:

多对多需要有一个中间表来存贮表的关联关系


1.创建表
创建主表(teacher)
create table teacher(id int primary key auto_increment,name char(25));
创建主表(student)
create table student(id int primary key auto_increment,name char(25));
创建从表(relation 关系表)
create table relation(id int primary key auto_increment,
t_id int,s_id int,
foreign key(t_id) references teacher(id),
foreign key(s_id) references student(id)
);
2.输入值
insert into teacher values
(1,"egon"),
(2,"jack");

insert into student values
(1,"uu"),
(2,"yy");
3.插入对应关系
insert into relation values
(null,1,1),
(null,1,2),
(null,2,2);

一对一关系:

使用外键来关联,但是需要给外键加上唯一约束,也就是说两个一对一是有主从关系的

create table t1(id int primary key auto_increment,name char(20));
create table t2(id int primary key auto_increment,name char(20),
t1_id int UNIQUE,
foreign key(t1_id) references t1(id));
********
#垂直分表:
当一个表的字段太多,常用字段不多时,可以采取垂直分表的方式来提高效率