Mysql数据库
如何找到my.ini(mysql 的配置文件)?
显示隐藏文件夹,在programeData中。
mysql 数据库管理系统
数据库关系
用来反应实体内部的联系和实体之间的联系,实体内部的联系通常指组成实体的个属性之间的联系,实体之间的联系通常是指不同实体集之间的联系。
一对一,一对多,多对多。(是指数据表之间的关系)
设置主键时尽量选择没有意义的列作为主键。
主表的外键是唯一的。
所以说有重复外键的表是从表。
三大关系完整性
- 实体完整性
具有唯一的标识列或组合标识列(主键)
主键(primary key)不能为空,但是唯一(unique)可以为空。 - 引用完整性(参照完整性)
具有对应的主键和外键,每个外键都有其对应的主键。 - 域完整性(用户自定义完整性)
- 域完整性和域约束(例如省份名称的约束,不能填入不存在的省份)
- 类型约束(在int类型中不能填入char类型)
- 范围约束(char(10)不能填入11个字符)
- 格式约束(对于指明的格式,不能填入非法格式)
范式
第一范式(R ∈1NF)
所有的属性不能再分,(有些字段不适合再分,如:姓名)。
又叫做“原子化”。
第二范式 (R ∈2NF)
每一个非主属性完全依赖主键(非主属性即为主键之外的列)
完全依赖是指两者之间存在逻辑关联。
第三范式(R ∈3NF)
确保数据表中的每一列数据与主键之间直接关联,不能间接相关。
基本sql语句
-- 数据库名不需要加引号
DROP database if EXISTS mystudents;
CREATE DATABASE mystudents DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
-- 新建表
create table student(
id INT(11),
sno VARCHAR(15) PRIMARY KEY,
sname VARCHAR(20) not null,
ssex char(2) DEFAULT '女',
sbirthday date,
sdept VARCHAR(20)
)
create table sc(
sno VARCHAR(15),
cno varCHAR(4),
grade SMALLINT,
PRIMARY KEY(sno, cno),
FOREIGN KEY(sno) REFERENCES student(sno),
FOREIGN key(cno) REFERENCES course(cno)
)
create table sc(
sno VARCHAR(15),
cno varCHAR(4),
grade SMALLINT,
PRIMARY KEY(sno, cno)
)
对标的一些特殊操作
-- 查看表定义
DESC student;
DESCRIBE sc;
-- 查看表定义语句
show create table sc;
CREATE TABLE `sc` (
`sno` varchar(15) NOT NULL,
`cno` varchar(4) NOT NULL,
`grade` smallint(6) DEFAULT NULL,
PRIMARY KEY (`sno`,`cno`),
KEY `cno` (`cno`),
CONSTRAINT `sc_ibfk_1` FOREIGN KEY (`sno`) REFERENCES `student` (`sno`),
CONSTRAINT `sc_ibfk_2` FOREIGN KEY (`cno`) REFERENCES `course` (`cno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
-- 约束
-- 约束名推荐使用 约束类型_约束字段
-- 删除逐渐约束
-- 删除主键时不需要加主键所在列的名称
alter table student drop PRIMARY KEY;
-- 添加主键约束
alter table student add PRIMARY KEY(sno);
-- 删除外键约束
alter table sc DROP FOREIGN KEY sno;
alter table sc DROP FOREIGN KEY cno;
-- 添加外键约束
alter table sc add FOREIGN KEY(sno) REFERENCES student(sno);
alter table sc add FOREIGN KEY(sno) REFERENCES course(cno);
-- 添加唯一约束
alter table student add unique (id);
alter table ad drop INDEX sname;
-- 设置默认值
alter table student ALTER ssex set DEFAULT '男';
-- 打开数据库然后建表,
use mysql;
create table test(
id int PRIMARY KEY
)
更新表
-- 修改表约束
alter table sc add FOREIGN KEY (sno) REFERENCES student(sno);
alter table student add FOREIGN KEY (sno) REFERENCES sc(sno);
-- 数据处理
use mystudents;
-- 插入行
select * from student;
-- 插入所有字段
INSERT into student(sno,sname,sgender,sbirthday,sdept)
VALUES('003','张飞','女','348-6-2','数学');
-- 插入字段会更改默认值
insert into student(id,sno,sname,ssex,sbirthday,sdept)
VALUE(002,"002","令狐冲","女","223-4-5","厨师");
insert into student(id,sno,sname,ssex,sbirthday,sdept)
VALUE(003,"003","令狐冲","","223-4-5","厨师");
-- 有默认值的字段可以不写
insert into student(id,sno,sname,sbirthday,sdept)
VALUE(004,"004","令狐冲","223-4-5","厨师");
-- 如果不写字段,必须写入每个字段的值,有默认值的也要写
insert into student
value(005,"005","风清扬","男","122-3-4","养老");
-- 自增
-- 设置自增时,要先将自增列设置为主键,然后再设置其他键为主键,否则会报错。
-- 设置自增列的数据类型要为数字。
insert into students(sno, sname, sbirthday, sdept)
VALUE("001","爱因兹乌鲁恭","342-3-4","化学");
-- 自增了列仍可以指定值
insert into students(id,sno, sname, sbirthday, sdept)
VALUE(4,"002","夏尔提亚","342-3-4","化学");
-- 如果不指定值的话,自增的列会依据上一列增加
insert into students(sno, sname, sbirthday, sdept)
VALUE("002","L","342-3-4","推理");
-- 插入的数据会在其自增列中该在的位置,与插入的先后顺序无关
insert into students(id,sno, sname, sbirthday, sdept)
VALUE(3,"002","夜神月","342-3-4","推理");
-- 修改数据
-- 不指定条件的话会修改所有具有该列的行
update students set sno = ("009");
-- 当制定条件时,指挥修改满足条件的行
update students set sno = ("006") where sname = ("L");
-- 删除语句
delete FROM students where sname = ("L");
-- 删除数据库
drop database mystudents
-- 删除数据表
drop table students