1.创建表 (建表属于DDL语句)

语法格式

create table 表名(
    字段名1  数据类型,
    字段名2  数据类型,
    字段名3  数据类型
);

表名:建议以t_ 或者 tbl_ 开始,可读性强。见名知意。
字段名:见名知意。
表名和字段名都属于标识符。

创建一个学生表

学号、姓名、性别、年龄、邮箱地址

create table t_student(
    no int,
    name varchar(32),
    sex char(1),
    age int(3),
    email varchar(255)
);

快速创建表

原理:将一个查询结果当作一张表新建,这样可以完成表的快速复制,表创建出来同时表中的数据也存在了。

create table emp2 as select * from emp;


2.关于MySQL中的数据类型

varchar(最长255)
    可变长度字符串。
    比较智能,节省空间。
    会根据实际的数据长度动态分配空间。

    优点:节省空间
    缺点:需要动态分配空间,速度慢

char(最长255)
    定长字符串。
    不管实际的数据长度是多少。
    分配固定长度的空间去存储数据。
    使用不恰当的时候,可能会导致空间的浪费。
    
    优点:不需要动态分配空间,速度快
    缺点:使用不当可能会导致空间的浪费

int(最长11)
    数字中的整数型。等同于java的int。

bigint
    数字中的长整型。等同于java的long。

float
    单精度浮点型数据。

double
    双精度浮点型数据。

date
    短日期类型。

datetime
    长日期类型。

clob
    字符大对象。
    最多可以存储4G的字符串。
    比如:存储一篇文章,存储一个说明。
    超过255个字符的都要采用CLOB字符大对象来存储。
    Character Large OBject : CLOB

blob
    二进制大对象。
    专门用来存储图片、声音、视频等流媒体数据。
    往BLOB类型的字段上插入数据的时候,例如插入一个图片、视频等,需要使用IO流才行。
    Binary Large OBject : BLOB


3.增加、修改、删除表数据

插入insert (插入属于DML语句)

语法格式

insert into 表名 (字段名1, 字段名2, 字段名3 ...) values (值1, 值2, 值3 ...);
// 字段名和值要一一对应

注:insert语句但凡执行成功,那么必然会多一条记录。
        没有给其他字段指定值的话,默认值是NULL。
        insert语句中的“字段名”省略的话,等于都写上了,values后的所有值也要都写上。

插入日期

insert into t_student(id, name, birth) values (1, 'zhangsan', str_to_data('01-10-2000' , '%d-%m-%Y'));

注:如果提供的日期字符串是 %Y-%m-%d 这个格式,str_to_date函数就不需要了。

插入多条数据

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


修改update (修改属于DML语句)

语法格式

update 表名 set 字段名1=值1 , 字段名2=值2 , 字段名3=值3 ... where 条件;

注:没有条件限制会导致所有数据全部更新。


删除delete (删除属于DML语句)

语法格式

delete from 表名 where 条件;

注:没有条件限制会导致整张表的数据全部删除

删除表

drop table t_student;        // 当这张表不存在时候会报错

drop table if exists t_student;        // 如果这张表存在则删除


4.约束

约束的作用:保证表中数据的完整、有效。

非空约束

非空约束not null约束的字段不能为NULL。

create table t_vip(
    id int,
    name varchar(255) not null
);

insert into t_vip (id) values (1);
ERROR 1364 (HY000) : Field 'name' doesn't have a default value


唯一性约束

唯一性约束unique约束的字段不能重复,但是可以为NULL。

create table t_vip(
    id int,
    name varchar(255) unique,
    email varchar(255)
);

insert into t_vip(id,name,email) values (1,'zhangsan','[email protected]');
insert into t_vip(id,name,email) values (2,'zhangsan','[email protected]');
ERROR 1062 (23000) : Duplicate entry 'zhangsan' for key 'name'

两个字段联合唯一

create table t_vip(
    id int,
    name varchar(255),
    email varchar(255),
    unique (name,email)        // name和email两个字段联合起来唯一
);

注:约束直接添加到列后面的叫做列级约束;没有添加在列的后面,这种约束被称为表级约束。
        在MySQL中,如果一个字段同时被not null 和 unique约束的话,该字段自动变成主键字段。


主键约束

主键字段:添加了主键约束的字段。
主键值:主键字段中的每一个值都叫做主键值。
               建议使用int bigint char等类型,不建议使用varchar。主键值一般都是数字,一般都是定长的。
主键作用:主键值是每一行记录的唯一标识;任何一张表都应该有主键,没有主键表无效。
主键特征:not null + unique (主键值不能是NULL,同时也不能重复)
                  一个表中主键约束只能添加一个。

添加主键约束(一个字段作主键为单一主键)

create table t_vip(
    id int primary key,        // 列级约束
    name varchar(255)
);

create table t_vip(
    id int,
    name varchar(255),
    primary key(id)        // 表级约束
);

多个字段联合起来添加主键约束(复合主键)

create table t_vip(
    id int,
    name varchar(255),
    email varchar(255),
    primary key(id,name)
);

主键除了单一主键和复合主键之外,还可以分为:
    自然主键:主键值是一个自然数,和业务没关系。
    业务主键:主键值和业务紧密关联,例如拿银行卡账号做主键值。

在实际开发中使用自然主键比较多,因为主键只要做到不重复就行,不需要有意义。
业务主键不好,因为主键一旦和业务挂钩,那么当业务发生变动时,可能会影响到主键值,所以业务主键不建议使用。

在MySQL中,有一种机制,可以帮助我们自动维护一个主键值:

create table t_vip(
    id int primary key auto_increment,        // 自增,从1开始,以1递增
    name varchar(255)
);


外键约束

外键字段:添加了外键约束的字段。
外键值:外键字段中的每一个值。

create table t_class(
    classno int primary key,
    classname varchar(255)
);

create table t_student(
    no int primary key auto_increment,
    name varchar(255),
    cno int,
    foreign key(cno) references t_class(classno)
);

注: t_class是父表,t_student是子表
        删除表时:先删子表,再删父表
        创建表时:先创建父表,再创建子表
        删除数据时:先删除子表,再删除父表
        插入数据时:先插入父表,再插入子表
    子表中的外键引用的父表中的某个字段,被引用的这个字段不一定是主键,但至少具有unique约束。
    外键值可以为NULL。

你可能感兴趣的:(表)