mysql 创建数据库及其他

 ZR_yst     2023-07-31     552     0   

欢迎来到银盒子的世界~

1 创建数据库

create databases;

2 进入数据库

use databases;

3 创建表

create table student(id int auto_increment primary key,name varcher not null,gender int not null,grade int)default charset=utf8;

4 查看表

show tables;

4 插入数据

insert into student(name,gender,grade)values('zhangsan',1,1);

5 查看插入的数据

select * from student;

6 创建主键,外键

(1)创建表时注明,可以在字段后标注,如

   图片.png

可以在表最后标注,如

foreign key(studentid)references student(id),

primary key (id),

注意,studentid 是之前表结构中有的,在这里设置为外键

(2)创建表后添加,这里也是之前表中有该列,这里设置为外键

alter table course add foreign key (studentid) references student(id);

或者

alter table course add constraint 外键名 foreign key (teacherid) references teacher(id);

注:

ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY(外键字段名)
REFERENCES 外表表名(主键字段名)
[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]
[ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]

RESTRICT   限制外表外键改变

CASCADE   级联改变

SET NULL   设为null值

NO ACTION   无动作

SET DEFAULT   设为默认值

添加违反外键的记录时报错

图片.png

修改主表主键值时报错,因为默认是RESTRICT,限制其修改

图片.png

修改外键约束

alter table course drop foreign key teacher_id,add constraint teacherid foreign key (teacher_id) references teacher (id) on update cascade on delete cascade;

外键主要是保证数据一致性与完整性,减少数据冗余

其一,阻止执行:从表插入/修改外键值,不在主表主键值就阻止更改,主表删除/修改主键值,关联到从表就阻止(除非先修改从表记录)

其二,级联执行:主表删除行,关联从表相关行一起删除;主表修改主键值,关联从表相关行一起修改

外键约束 restrict

图片.png

将restrict改为cascade后

图片.png

图片.png

设置外键时注意主表必须有主键,外键中列的数目与父表中主键列数目相同(多个键联合做主键),数据类型相似(比如int 与 tiny int)

7 查看表结构/更改

show create table ...;

alter table course2 add column description varchar(255);

8 新增记录

insert into course2 set name='';

8 更新,删除记录

update student set name =‘张三’where id = 1;

update course2 c2 left join course c1 on c2.name=c1.name set c2.description=c1.description where c1.name=c2.name;

update course2 set description = 'good' where description like '%d';

delete from student where id = 1;

delete from student order by gender desc limit 2;

 9 查找记录

select * from student;

select name from student where id = 1;

select c.name,t.name from course c,teacher t where c.teacher_id=t.id;

select * from student limit 2; 查找前两个记录 注意mysql里没有top,用limit

select name studentname from student;、

select * from course2 c2 inner join course c1 where c1.id = c2.id;

select * from course2 c2 left join course c1 on c1.name=c2.name;(显示c2表的完整内容,c1匹配的记录显示,否则显示为null)

 图片.png

图片.png

select name from course2 union select name from course;

发表评论