建立数据库
默认数据库为test,默认表为user, 其默认字段为id,name
mysql的基本操作:
|| 登录数据库mysql -u root -p
|| 查询数据库服务器中的所有数据库show databases;
|| 查询某数据库中某个表use database_name show table
|| 检索一个表select * from table_name
// 检索表中的某一个字段where id=1
|| 在数据库服务器中创建一个数据库create database test;
|| 在数据库中创建一个表
mysql> create table pet(
-> name VARCHAR(20),
-> owner VARCHAR(20),
-> speices VARCHAR(20),
-> sex CHAR(1),
-> birth DATE,
-> death DATE);
|| 向数据表中添加记录INSERT INTO user
INSERT INTO user(id)
mysql> insert into pet
-> values ('旺财','周星驰','狗','公','1999-01-01',NULL);
|| 查询表的结构describe pet
(注意:select * from pet
查看表的记录)
|| 修改表的结构 alter+add / alter+drop / alter+modify
alter table table_name add primary key(id);
alter table table_name drop primary key;
alter table table_name modify id int primary key;
|| 退出数据库服务器exit;
|| !!!学习重点!!!:删库辞职跑路最快最节省时间的两行代码,好好记住噢
drop database if exists activiti_db;
create database activiti_db;
常用数据类型:大概分为三类:
|| 数值:
tinyint 范围(-127,127)
smallint 范围(-32768,32768)// mediumint // bigint
int
float / double
|| 日期/时间
DATE 日期 YYYY-MM-DD
TIME 时间 HH:MM:SS
YEAR 年份 YYYY
DATETIME 混合日期时间 YYYY-MM-DD HH:MM:SS
TIMESTAMP 混合日期时间(时间戳格式) YYYYMMDDHHMMSS
|| 字符串(字符)
char 字符串
varchar 稍长一些的字符串
text 长文本数据
|| 数据类型选择的准则:日期按照格式选择类型,数值/日期时间根据大小范围选择
|| 删除表中记录delete from table where id = x;
|| 修改表中记录update pet set name='Fluffy' where name='fluffy';
mysql的建表约束:
|| 主键约束:primary key
约束字段的值不重复且不为空,作为一张表的主键
—>主键的值不可以相同,主键的值不为空
—>主键组的值的组合不能相同,主键组的值都不为空
主键:表中能过一个唯一字段或字段组即可确定一条记录,则该字段/字段组称为主键
/* 写法一:*/
mysql> create table user(
-> id int primary key,
-> name VARCHAR(20));
/* 写法二:*/
mysql> create table testTable1(
-> id int,
-> name VARCHAR(20),
-> password VARCHAR(20),
-> primary key(id,name));
/* 添加/删除主键约束写法*/
//alter table table_name add primary key(id);
//alter table table_name drop primary key;
/*修改主键约束*/
//alter + modify
//进行了主键约束的表中不允许以下的操作
mysql> insert into user values(1,'张三');
mysql> insert into user values(1,'张三'); // 错误:主键值重复
mysql> insert into user values(NULL,'张三'); // 错误:主键值为空
mysql> insert into testTable1 values(1, '张三','123');
mysql> insert into testTable1 values(2, '张三','123'); // 正确:主键值组合不重复
mysql> insert into testTable1 values(1, '张三','123'); // 错误:主键值组合重复
mysql> insert into testTable1 values(NULL, '张三','123'); // 错误:主键值为0
|| 自增约束:(与主键约束搭配)
自动管控主键的值,无需手动添加(减少出错)
mysql> create table user(
-> id int primary key auto_increment,
-> name VARCHAR(20)
->);
|| 唯一约束:
—>约束字段值不能重复
—>唯一约束组合:字段的值的组合不重复就行
/* 写法一:*/
mysql> create table user(
-> id int primary key,
-> name VARCHAR(20) unique );
/* 写法二:*/
mysql> create table testTable1(
-> id int,
-> name VARCHAR(20),
-> password VARCHAR(20),
-> unique(id,name));
/* 添加/删除/修改唯一约束写法*/
//alter table table_name add unique(id);
//alter table table_name drop index name;
//alter table table_name modify name VARCHAR(20) unique;
/*唯一约束后无法进行以下操作*/
insert into user values(1,'sbb');
insert into user values(2,'sbb'); //错误:name值重复,违反unique唯一约束
|| 非空约束:
约束字段值不为空 not null
|| 默认约束:
约束字段值不为空且为默认值 defalut num(默认值)
|| 外键约束:
涉及到两个表:主表/副表 或 父表/子表
子表的外键的值必须来自于父表的某个字段
|| 注意事项:作为外键,所连接的表中的id必须是唯一值,因此得添加约束unique,或者primary key;
mysql> create classes(
-> id int primary key,
-> );
mysql> create table students(
-> id int primary key auto_increment,
-> name VARCHAR(20),
-> class_id int,
-> foreign key(class_id) references classes(id)
-> );
三大范式:
|| 第一范式:每个字段都必须是原子值,即字段不可再拆分(地址 --> 国家,省份,市)
|| 第二范式:在满足第一范式的前提下,非主键字段必须完全依赖于主键字段(非主键字段间可以产生依赖)
|| 第三范式:在满足第二范式的前提下,非主键字段必须唯一依赖于主键字段 ( 非主键字段之间同样不可以产生依赖)
|| 范式:原子值 + 主键依赖 + 主键唯一依赖