美文网首页
02.创建表

02.创建表

作者: Liuzhl | 来源:发表于2018-12-20 16:23 被阅读12次

基本语法

create table table_name(
    字段1 类型 约束,
    字段2 类型 约束,
    ...
);
CREATE TABLE `NewTable` (
    `id`  int UNSIGNED NOT NULL AUTO_INCREMENT ,
    `username`  varchar(10) NOT NULL ,
    `password`  varchar(10) NOT NULL ,
    PRIMARY KEY (`id`)
);

数据类型

  • MySQL的数据类型包括:数值类型、时间和日期类型、字符串类型

数值类型

[图片上传失败...(image-d88d2b-1545293688634)]

  • 注意:对于int类型int(m)不代表他占用的字节数,他占用的字节数是根据数据类型来确定的,m只是表示格式化输出而已
  • 注意:对应浮点型(m,d) m表示数据的总长度,d表示小数点后面有几位
  • 数值类型默认是区分正负的,可以加unsigned 来不要负数

时间和日期类型

[图片上传失败...(image-682f65-1545293688634)]

字符串类型

[图片上传失败...(image-a39e15-1545293688634)]

注意1:char(m) 和 varchar(m)的区别

  • char是不可变字符串,当实际输入的数据少于m时,他后面的字节数会以空格的形式补满,当读取的时候,会忽略掉空格,char读取速度快但是比较耗空间
  • varchar是可变字符串,当实际输入的数据小于m时,他后面的字节数会被省略掉,var节省空间,但查询速度慢
  • 实际上在使用char和varchar时会多占1个或2个字节,用以储存字节长度
  • m的值是字符长度,而不是字节长度,不同的编码方式中英文占用的字节长度不同

约束

  • 非空约束 not null
  • 唯一约束 unique
  • 主键约束 primary key 值唯一、非空、和其他表的外键关联
  • 校验约束 check 对于mysql无效
  • 默认约束 default
  • 外键约束 foreign key 在多表的时候使用
  • 查看表的建表信息,使用describe
DESCRIBE table_name;

非空约束 not null

  • 非空约束用于指定该字段必须赋值,可以直接写在字段后面
  • 如果在插入数据的时候,不给该字段赋值,那么就会报错
DROP TABLE IF EXISTS stu5;
CREATE TABLE IF NOT EXISTS stu5 (
    id INT NOT NULL,
    name VARCHAR(10) NOT NULL
);

唯一约束 unique

  • 添加了唯一约束的字段,不能重复
  • 在当前字段后面跟唯一约束
DROP TABLE IF EXISTS stu5;
CREATE TABLE IF NOT EXISTS stu5 (
    id INT NOT NULL,
  name VARCHAR(10) NOT NULL UNIQUE
);
  • 在字段写完后跟唯一约束
DROP TABLE IF EXISTS stu5;
CREATE TABLE IF NOT EXISTS stu5 (
    id INT NOT NULL,
    name VARCHAR(10) NOT NULL,
    stuId INT NOT NULL,
    UNIQUE(id),
    UNIQUE(stuId)
);
DESCRIBE stu5;
  • 将几个字段同时添加为唯一约束,他们自动组成了一个索引,需要给他指定一个名字

CONSTRAINT myunique UNIQUE(id, stuId)

DROP TABLE IF EXISTS stu5;
CREATE TABLE IF NOT EXISTS stu5 (
    id INT NOT NULL,
    name VARCHAR(10) NOT NULL,
    stuId INT NOT NULL,
    CONSTRAINT myunique UNIQUE(id, stuId)
);
DESCRIBE stu5;
  • 在建好表后增加唯一约束
    • 单行唯一约束
    ALTER TABLE stu5 ADD UNIQUE(name);
    
    • 多行唯一约束
    ALTER TABLE stu5 ADD CONSTRAINT myunique UNIQUE(id, stuId);
    
  • 删除唯一约束,注意这里用的是INDEX 说明这已经是一条索引了
ALTER TABLE stu5 DROP INDEX myunique;

主键约束 primary key

  • 主键约束自带了 not null 和 unique 约束,主要是用来和其他表的外键进行关联
DROP TABLE IF EXISTS stu5;
CREATE TABLE IF NOT EXISTS stu5 (
  id INT PRIMARY KEY,
  name VARCHAR(10) NOT NULL UNIQUE
);
  • 如果字段是xxxint类型,我们还可以让他自动增长 auto_increment
DROP TABLE IF EXISTS stu5;
CREATE TABLE IF NOT EXISTS stu5 (
  id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(10) NOT NULL UNIQUE
);
  • 在字段写完后指定单行主键约束

DROP TABLE IF EXISTS stu5;
CREATE TABLE IF NOT EXISTS stu5 (
    id INT NOT NULL,
    name VARCHAR(10) NOT NULL,
    stuId INT NOT NULL,
    PRIMARY KEY(id)
);
DESCRIBE stu5;
  • 在字段写完后指定多行主键约束
DROP TABLE IF EXISTS stu5;
CREATE TABLE IF NOT EXISTS stu5 (
    id INT NOT NULL,
  name VARCHAR(10) NOT NULL,
    stuId INT NOT NULL,
    CONSTRAINT myKey PRIMARY KEY(id, stuId)
);
DESCRIBE stu5;
  • 在表创建完成后增加单行主键约束
ALTER TABLE stu5 ADD PRIMARY KEY(id);
  • 在表创建完成后增加多行主键约束
ALTER TABLE stu5 ADD CONSTRAINT myKey PRIMARY KEY(id, stuId);

  • 删除主键约束
ALTER TABLE stu5 DROP PRIMARY KEY;
  • 注意: 一张表只有一个主键,但是这个主键可以是多条字段来组成,删除主键时不需要跟名字,因为一张表只有一个主键

默认约束 default

  • 默认约束可以给字段赋一个默认值
DROP TABLE IF EXISTS test5;
CREATE TABLE test5 (
    id  int NOT NULL ,
    name  varchar(10) DEFAULT '小明' ,
    PRIMARY KEY (`id`)
)
;

外键约束 foreign key

  • 外键约束发生在表于表之间
  • 表于表之间的关系有 1-1,1-N,N-N,也就是我们常说的一对一,一对多,多对多
父表与子表

相关文章

网友评论

      本文标题:02.创建表

      本文链接:https://www.haomeiwen.com/subject/apovhqtx.html