mysql数据库基础下
mysql> use GYS
第一种设主键方式
mysql> create table s
-> (sno varchar(2),
-> sname varchar(6),
-> status int,
-> city varchar(4),
-> primary key(sno));
第二种设主键方式
mysql> create table p
-> (pno varchar(2) primary key,
-> pname varchar(6),
-> color varchar(2),
-> weight int);
mysql> create table j
-> (jno varchar(2) primary key,
-> jname varchar(6) ,
-> city varchar(4));
设外键方式
mysql> create table spj
-> (sno varchar(2),
-> pno varchar(2),
-> jno varchar(2),
-> qty int,
-> foreign key(sno) references s(sno),
-> foreign key(pno) references p(pno),
-> foreign key(jno) references j(jno));
insert into s values('s1','精益',20,'天津'),
('s2','盛锡',10,'北京'),
('s3','东方红',30,'北京'),
('s4','丰泰盛',20,'天津'),
('s5','为民',30,'上海');
insert into p values('p1','螺母','红',12),
('p2','螺栓','绿',17),
('p3','螺丝刀','蓝',14),
('p4','螺丝刀','红',14),
('p5','凸轮','蓝',40),
('p6','齿轮','红',30);
insert into j values('j1','三建','北京'),
('j2','一汽','长春'),
('j3','弹簧厂','天津'),
('j4','造船厂','天津'),
('j5','机车厂','唐山'),
('j6','无线电厂','常州'),
('j7','半导体厂','南京');
insert into spj values('s1','p1','j1',200),
('s1','p1','j3',100),
('s1','p1','j4',700),
('s1','p2','j2',100),
('s2','p3','j1',400),
('s2','p3','j2',200),
('s2','p3','j4',500),
('s2','p3','j5',400),
('s2','p5','j1',100),
('s2','p5','j2',200),
('s3','p1','j1',200),
('s3','p3','j1',100),
('s4','p5','j1',300),
('s4','p6','j3',200),
('s5','p6','j4',100),
('s5','p2','j4',100),
('s5','p3','j1',200),
('s5','p6','j2',200),
('s5','p6','j4',500);
select sno from spj where jno='j1';
select sno from spj where jno='j1' and pno='p1';
select distinct(spj.sno) from spj inner join p on spj.pno=p.pno and p.color ='红';
select distinct(j.jno) from spj,p,j where spj.pno=p.pno and spj.jno=j.jno and p.color='红' and j.city='天津';
select sname,city from s
select pname,color,weight from p;
select jno from spj where sno='s1' ;
select pname,qty from p,spj where p.pno=spj.pno and spj.jno='j2';
select spj.jno from spj,s where spj.sno=s.sno and s.city='上海';
select j.jname from s,j,spj where s.sno=spj.sno and j.jno=spj.jno and s.city='上海';
select distinct(spj.jno) from spj,s,j where s.sno=spj.sno and j.jno =spj.jno and s.city <> '天津';这里可以是not in('天津')
update p set color='蓝' where color=0;
delete from spj where sno='s2';
insert into s values('s2','盛锡',10,'北京');insert into spj values('s2','p4','j6',200);
视图和表一样使用,创建语句如下
create view v_sj as select sno,pno,qty from spj where jno='j1';
select pno,qty from v_sj;
select * from v_sj where sno='s1';
select * from v_sj inner join p on p.pno=v_sj.pno where sno='s1';
添加外键(外键的作用:主表的数据决定外表的数据,录入数据内容必须要是主表有的,防止录错,删除的时候,可以set 关外键,可以先级联删除,)
1 2 3 4 | mysql> ALTER TABLE tb_emp2 -> ADD CONSTRAINT fk_tb_dept1 -> FOREIGN KEY(deptId) -> REFERENCES tb_dept1(id); |
数据库的连接关系与区别
内连接(inner join):输入join on默认内连接,逗号分开是隐式内连接效率较前种低(符号优先级低)(以左右表内匹配的记录为主)
表示只包含匹配的记录。只返回两张表匹配的记录。
外连接(outer join):表示还包含不匹配的记录。
左连接(left join):(以左表所有的记录为主)又称左外连接,两表匹配记录+左表未匹配记录。
右连接(right join):(以右表所有的记录为主)又称右外连接,两表匹配记录+右表未匹配记录。
全连接(full join):(以两个表所有的记录为主)又称全外连接,两表匹配记录+两表各自的多余记录。
交叉连接 (笛卡尔积)一一映射,排列所有元素
SELECT * FROM student CROSS JOIN teacher
等值连接(相等连接)
SELECT student.* , teacher.*
FROM student , teacher
WHERE student.class = teacher.class
自然连接:去掉重复项的等值连接
SELECT * FROM student NATURAL JOIN teacher
数据库字段
char固定长度,最长n个字符。
varchar 最大长度为n的可变字符串。 varchar必char节省空间,但在效率上比char稍微差一些。
nvarchar(6),最多能存储6个字符/中文数据,比如:"哈哈哈哈哈哈",“abcdef”,而varchar只能存3个哈
用nvarchar存储英文字符,会浪费一半以上的存储空间
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构