mysql3-4

发布时间 2023-09-21 15:47:02作者: 苏易

定义

表:是数据库最基本的组成单元,数据库是用来存储数据的,数据库中有很多表,每一个表都是一个独立的单元,表也是一个结构化的文件,由行和列组成,行称为数据或记录,列称为字段,字段又包括:字段名称、字段类型、长度、约束。

 

创建表

语法格式:create table 表名称(字段名 类型(长度) 约束);

MySQL常用数据类型

数据类型占用字节数描述
char char(n) 定长字符串,存储空间大小固定使用char(2)来表示类型或状态
varchar varchar(n) 变长字符串,存储空间等于实际数据空间只包含英文字符的字符串
int 4个字节 表示整型,比如自增ID和表示数量
bigint 8个字节 表示长整型,比如自增ID
float float(有效数字位数,小数位) 数值型
double double(有效数字位数,小数位) 数值型
date 8字节 表示日期和时间
BLOB   二进制大对象
CLOB   字符大对象

varchar与char对比:

a)都是字符串

b)varchar比较智能,可以根据实际的数据长度分配空间,比较节省空间,但在分配的时候需要相关判断

c)char不需要动态分配空间,所以执行效率高,但是可能会导致空间浪费

d)若字段中的数据不具备伸缩性,建议采用char类型存储

e)若字段中的数据具有很强的伸缩性,建议采用varchar类型存储

创建表格<student学生信息表>

 create table t_student(
     no int(10),
    name varchar(32),
    sex char(1),
    birth date,
    email varchar(128)
 )

删除表格

 1)drop table t_student;
 
 2)drop table if exists t_student;(推荐)

插入数据

1)DML语句包括:insert、update、delete;

a)插入数据insert语法

insert into 表名(字段名1,字段名2,....) values(值1,值2);

注意:字段和数值必须一一对应,字段与数据个数必须相同,数据类型必须一致;

查看建表语句

 show create table t_student;

查看变量

 show variables like '%char%'

设置结果编码集

 set character_set_results = 'GBK'

 

创建表格时给字段设置默认值:default默认值

 create table t_student(
     no int(10),
    name varchar(32),
    sex char(1) default 'm',
    birth date,
    email varchar(128)
 )

表的复制

定义:将查询结果当作一张表创建

语法结构:create table 表名 as select 查询语句;

1)完全复制emp表到emp1

 create table emp1 as select * from emp;

2)选择性复制emp表到emp2:

 create table emp2 as select ename,sal from emp;

将查询结果插入到某张表中

1.语法结构:insert into 表名 select 查询语句

1)从emp2表中查询出员工工资为3000的,同时将查询结果插入到emp2表中

insert into emp2 select * from emp2 where sal = 3000

2)复制emp表为emp_bak,再将emp表中数据插入到emp_bak中

create table emp_bak as select * from emp;
insert into emp_bak select * from emp2 where sal = 3000;

增/删/改表结构

语法结构

1)新增:alter table 表名 add 字段名 字段类型(长度);

2)修改:alter table 表名 modify 字段名 字段类型(长度);

3)删除:alter table 表名 drop 字段名;

给表添加一个电话字段

alter table t_student add tel varchar(10);

将字段tel长度扩展到20个长度

alter table t_student modify tel varchar(20);

将t_student表中的tel字段删除

 alter table t_student drop tel;

添加/修改/删除 表数据

DML数据操作语句 insert、update、delete;

insert添加数据

语法格式:insert into 表名(字段名1,字段名2....) values(值1,值 2);

update修改数据

语法格式:update 表名 set 字段名 = 字段值,字段名 = 字段值 where 条件;

注意:update如果没有条件限制,将把整张表的数据全部更新;

delete删除数据

语法格式:delete from 表名 where 条件限制

注意:若没有条件限制,会将表中所有记录全部删除;

创建表加入约束

英文单词:constraint

什么是约束?实际上是对表中数据的限制条件

设计表时加入约束的目的?保证表中数据的完整和有效

非空约束

作用:not null约束的字段不能为NULL值,必须赋具体数据;

示例:创建t_user表,name字段不能为空

 drop table if exists t_user;
 create table t_user(
    id int(10),
    name varchar(32) not null,
    email varchar(128)
 )    

唯一性约束(unique)

作用:unique约束的字段具有唯一性,不可重复

示例:创建t_user表,name不能为空,email保证唯一

1)方法一:列级约束

 drop table if exists t_user;
 create table t_user(
    id int(10),
    name varchar(32) not null,
    email varchar(128) unique
 );

注意:unique约束的字段不能重复,但是可以为NULL,NULL不是一个值,也不能用等号比较;

2)方法二:表级约束

 drop table if exists t_user;
 create table t_user(
    id int(10),
    name varchar(32) not null,
    email varchar(128),
     unique(email)
 );

3)使用表级约束给多个字段联合添加字段

 drop table if exists t_user;
 create table t_user(
    id int(10),
    name varchar(32) not null,
    email varchar(128),
     unique(name,email)
 );

4)表级约束还可以给约束起名字,原因:以后可以通过名字操作这个约束

 drop table if exists t_user;
 create table t_user(
    id int(10),
    name varchar(32) not null,
    email varchar(128),
     constraint t_user_email_unique unique(email)
 );
 --使用information_schema
 use information_schema;
 
 --展示表
 show tables;
 
 --展示字段
 desc table_constraints;
 
 --查询出表中的唯一约束名称
 select constraint_name from table_constraints where table_name = 't_user';

主键

主键设计到的3个术语:主键约束、主键字段、主键值 表中某个字段添加主键约束之后,该字段被称为主键字段,主键字段中出现的每一个数据都被称为主键值

主键作用

1)添加主键primary key的字段即不能重复也不能为空,效果与“not null nuique”相同,但本质是不同的,添加主键约束后,主键不仅会有“not null unique”作用,而且主键字段还会自动添加“索引——index”

2)一张表应该有主键,若没有,表示这张表是无效的,“主键值”是当前行数据的唯一标识

主键根据个数分类:单一主键,复合主键

1)单一主键:是给一个字段添加主键约束

列级主键约束

 drop table if exists t_user;
 create table t_user(
    id int(10) primary key,
    name varchar(32)
 );

表级主键约束

 drop table if exists t_user;
 create table t_user(
    id int(10),
    name varchar(32),
     constraint t_user_id_pk primary key(id)
 );

2)复合主键:是给多个字段联合添加一个主键约束:

 drop table if exists t_user;
 create table t_user(
    id int(10),
    name varchar(32),
    email varchar(128),
     constraint t_user_id_name_pk primary key(id,name)
 );

表中主键个数(只能有一个)

无论是单一主键还是复合主键,一张表中主键约束只能有一个

主键根据性质分类:自然主键、业务主键

1)自然主键:主键值若是一个自然数,并且这个自然数与业务没有任何关系,这种主键称为自然主键;

2)业务主键:主键值若和当前表中的业务紧密相关,那么这种主键值被业务主键,如果业务发生改变时,业务主键往往会受到影响,所以业务主键使用较少,大多情况使用自然主键。

MySQL中自动生成主键值(MySQL特有)

1)定义:MySQL数据库管理系统中提供了一个自增数字auto_increment,专门用来自动生成主键值。自增数字默认从1开始,以1递增:1、2、3....

 drop table if exists t_user;
 create table t_user(
    id int(10) primary key auto_increment,
    name varchar(32)
 );

外键约束FK(foreign key)

外键涉及到的术语:外键约束、外键字段、外键值 给某个字段添加外键约束之后,该字段称为外键字段,外键字段中的数据称为外键值。

外键根据个数分为:单一外键、复合外键

1)单一外键:给一个字段添加外键约束

2)复合外键:给多个字段添加一个外键

注意:

①外键字段可以为NULL,外键为空的数据也叫孤儿数据;

②被引用字段必须具有unique约束

③有了外键引用之后,表分为父表和子表,父表:t_class;子表:t_student;创建表时先创建父表,在创建子表;插入数据时,先插入父表数据,再插入子表数据;

 DROP TABLE IF EXISTS t_student;
 CREATE TABLE t_student(
  sno INT(4) PRIMARY KEY AUTO_INCREMENT,
  sname VARCHAR(32),
  classno INT(4),
  CONSTRAINT t_student_classno_fk FOREIGN KEY(classno) REFERENCES t_class(cno)
 );
 
 DROP TABLE IF EXISTS t_class;
 CREATE TABLE t_class(
  cno INT(4) PRIMARY KEY,
  cname VARCHAR(32)
 );

重点:典型的一对多设计,在多的一方加外键

级联删除

用法:在添加级联更新与级联删除的时候,需要在外键约束后面添关键字

注意:级联更新与级联删除操作谨慎使用,因为级联操作会将数据改变或者删除

1)级联删除:on delete cascade

定义:在删除父表数据的时候,级联删除子表中数据;

a)删除外键约束

 ALTER TABLE t_student DROP FOREIGN KEY t_student_classno_fk;

b)添加外键约束及级联删除功能

语法:alter table 表名 add constraint 外键名称 foreign key(外键字段) references 引用表名(引用表中字段名称) on delete cascade;

c)级联删除需求

①删除t_student中的外键

 ALTER TABLE t_student DROP FOREIGN KEY t_student_classno_fk;

②增加t_student_classno_fk外键,并加入级联删除 on delete cascade;

 ALTER TABLE t_student ADD CONSTRAINT t_student_classno_fk FOREIGN KEY(classno) REFERENCES t_class(cno) ON DELETE CASCADE;

级联更新

定义:在更新父表中数据的时候,级联更新子表中数据;

a)删除外键约束

语法:alter table 表名 drop foreign key 外键字段;

 ALTER TABLE t_student DROP FOREIGN KEY t_student_classno_fk;

b)更新外键约束和添加级联更新功能

语法:alter table 表名 add constraint 外键名称 foreign key(外键字段) references 引用表名(引用表中字段名称) on update cascade

c)级联更新需求

①删除t_student中的外键

 ALTER TABLE t_student DROP FOREIGN KEY t_student_classno_fk;

②增加t_student_classno_fk外键,并加入级联更新 on update cascade;

 ALTER TABLE t_student ADD CONSTRAINT t_student_classno_fk FOREIGN KEY(classno) REFERENCES t_class(cno) ON UPDATE CASCADE;