02创建数据库和表

02创建数据库和表

一、创建数据库

  • credate database 数据库名;

  • 创建数据库时,可以指定字符集和字符序

    命令:create database 数据库名 default character set 字符集名[collate 字符序名];

  • 显示数据库结构:show create database 数据库名

  • 使用use命令可选定当前数据库:use 数据库名

  • 修改数据库的字符集(已经创建好数据库,需要修改字符集):

    alter database 数据库名 character set 字符集 collate 字符序;

  • 删除数据库:drop database 数据库名

二、命名规范

  • 由任意字母、阿拉伯数字、下划线(_)和$组成

  • Windows下不区分大小写、不能使用MySQL关键字、名称最长可达64字符

三、存储引擎

创建表之前,必须明确该表的存储引擎(注意:存储引擎是基于表的,同一个数据库,不同的表,存储引擎可以不同;甚至同一个数据库表,在不同的场合应该应用不同的存储引擎)

  • 查看MySQL服务实例支持的存储引擎:show engines

InnoDB存储引擎

特点:

  • 支持外键(foreign key)

  • 支持事务(Transaction)--增删改查

如果需要执行大量的更新操作,innodb存储引擎是更好的选择

MyISAM

特点:

  • 具有检查和修复表的大多数工具

  • 表可以被压缩

  • 不支持事务

  • 不支持外键(foreign key)

如果需要执行大量的select语句,出于性能方面的考虑,MyISAM存储引擎是更好的选择

注意:

  • MySQL 5.6、5.7默认的存储引擎是InnoDB

  • 临时地将MySQL当前会话的存储引擎改变命令:

    set default_storage_engine=MyISAM;

四、数据类型

整数类型(tinyint、smallint、mediumint、int、bigint)

小数类型

  • decimal(length,precision) 表示精度确定(小数点后数字的位数确定)

  • length:决定了该小数的最大位数;

  • precision:设置精度(小数点后的数字位数)

float、double

字符串类型: 单引号括起来

char与varchar()的区别:定长与变长

  • varchar(255):表示可以存储255个汉字,如果varchar(255)中只包含一个汉字,2个字节,那么varchar(255)中只占用了2个字节的储存空间

  • char(20):不管char(20)中是否存储了20个字节,都按照20字节算

日期类型

  • date:表示日期;默认格式为:YYYY-MM-DD

  • time:表示时间;格式:HH:mm:ss

  • datetime与timestamp是日期和时间的混合类型,格式为:YYYY-MM-DD HH:mm:ss

  • datetime不受时区影响 timestamp受时区影响

  • datetime类型的字段插入null,就是null

  • timestamp类型字段插入null,该字段的值实际上是MySQL服务器当前的日期和时间

  • now():获取mysql服务器的当前时间

复合类型

MySQL支持两种复合数据类型enum枚举类型和set集合类型

  • enum类型:只允许从集合中取得某一个值;一个enum类型的数据最多包含65535个元素

  • set类型:允许从一个集合中取得多个值;一个set类型的数据最多可以包含64个元素

五、创建表

1、语法格式:create table 表名(字段名 数据类型 [列级约束条件], ...[表级约束条件1] ,[表级约束条件2])其他选项(例如存储引擎、字符集等选项)

CREATE TABLE `runoob_tbl`(
   `runoob_id` INT UNSIGNED AUTO_INCREMENT,
   `runoob_title` VARCHAR(100) NOT NULL,
   `runoob_author` VARCHAR(40) NOT NULL,
   `submission_date` DATE,
   PRIMARY KEY ( `runoob_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

2、创建新表的实质是定义新表的结构,其中有三大要素确定,分别是

  • 列名

  • 数据类型

  • 约束条件

3、指定表的存储引擎:engine = 存储引擎名

指定表的字符集:default charset = 字符集名

六、约束

保证数据库中数据正确性和完整性的约束机制被称为完整性约束

  • 约束范围:表级约束、列级约束

  • 约束对象:实体完整性、参照完整性、域完整性约束

  • 在列定义的约束被称为列级约束

  • 在表定义的结尾作为独立约束项的被称为表级约束

  • 如果完整性约束涉及到多个属性列时,则必须定义在表级上

七、实体完整性

  • 又称行完整性,要求在表中不能存在完全相同的行,而且每行都要具有一个非空又不重复的字段值

  • 实体完整性主要依赖于主键约束实现,主键约束使用关键字 primary key

  • primary key 约束用于定义基本表的主键,起唯一标识作用,而且值不能为null

  • 如果一个表的主键是单个字段,定义为列级约束

    字段名 数据类型 [其他约束条件] primary key

  • 定义为表级约束,在定义完所有字段后在定义

    primary key (字段名)

  • 如果一个表的主键是多个字段的组成,只能定义为表级约束

    primary key(字段名1、字段名2)

唯一键(unique)约束

  • 唯一性:unique约束用于指明基本表的某一列或多个列的组合上的取值为一

  • 唯一键可以为空,最多只有一个初见null值

  • 主键自带非空且唯一

  • 非主键但是具有唯一值的用unique

  • 设置唯一键约束可以定义为列级约束也可以定义为表级约束

    列级:字段名 数据类型 [ 其他约束] unique

    表级:unique(字段名)

自增型字段

  • 自增型字段只能定义为列级约束

  • MySQL自增型字段的值从1开始递增,步长为1

  • 语法格式

    字段名 数据类型 auto_increment

  • 优点:自动编号、速度快、数字型、占用空间小,不用担心主键重复

注意:

  1. 每张表只能定义一个自增型字段,必须为整数,并且必须定义为主键或唯一键

  2. 向自增型字段插入一个null或0时,该字段会自动设置为bi上一次插入值更大的值

八、参照完整性

又称引用完整性,指表间的规则,作用于有关联的两个表或两个以上的表,通过主键和外键(或唯一键)之间的关系,使表中的键值在相关表中保持一致(通过foreign key 约束实现)

表A外键字段的取值,要么是null,要么是来自与表B主键字段的取值(此时将表A称为表B的子表,表B称之为表A的父表)

注意:

  • 父表的主键和子表的外键必须定义在同一个域上;

  • 外键和相应的主键可以不同名

列级约束语法规则:

  • constraint 约束名 foreign key(表A字段名) references 表B (主键字段名) [ on delete 级联选项 ] [on update 级联选项]

级联选项:四个取值

  1. cascade:父表记录delete/update操作,会自动delete/update子表记录

  2. set null :父表记录delete/update操作,会自动将子表中与之对应的外键值设置为null

  3. no action:父表记录delete/update操作,如果子表中存在与之对应的记录,那么delete/update操作失败

  4. restrict:与no action 相同,且为级联选项的默认值

九、域完整性

又称列完整性,要求向表中指定列输入的数据必须具有正确的数据类型、格式以及有效的数据范围

域完整性和用户完整性实现的方式有非空约束(not null)、默认值约束(default)、唯一性约束(unique)、检查约束(enum)

  • 设置非空约束:字段名 数据类型 [其他约束条件] not null

  • 设置默认值约束:字段名 数据类型 [其他约束条件] default 默认值

十、表的管理

  • 复制一个表结构:create table 新表名 like 源表;

  • 复制一个表的结构和源表的记录:create table 新表名 select * from 源表

猜你喜欢

转载自blog.csdn.net/weixin_42248871/article/details/109910459