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));
********
#垂直分表:
当一个表的字段太多,常用字段不多时,可以采取垂直分表的方式来提高效率
复制代码