一.创建数据库
1.创建数据库
create database [if not exists] <dbname> character set utf8
[if not exists]:如果后面的数据库名不存在,则创建数据库,否则不创建;[]代表可选的语法
:必须要填写数据库名 <> 表示必填
2.dbname命名规范
首字符的要求
-
- unicode标准 3.0 所定义的子母(包括拉丁子母 a-z A-Z,以及来自其它语言的字符字符)
- 下划线、at符号(@)或者数据字符(#)
后续的字符
-
- 可以是字母、数字
- 符号只能是@、$、_
- 不允许使用保留字:create、drop、MySQL使用的命令单词
SQL语言大小写不敏感,不区分大小写,A和a是一个意思
3.修改数据库的字符集
alter database <dbname> character set `utf8mb4`;
4.删除数据库
drop database <dbname>;
二.创建表
1.语法
create table <tbname> ( 字段名 数据类型(长度) 约束类型, ........ 字段名 数据类型(长度) 约束类型 )engine=innodb [character set `utf8mb4`]
2.数据类型
①数字类型
整数:
- tinyint (-128-127)(0-255)
- int:整数 (-2147483648 - 2147483647)(0 4294967295)
- bigint
小数(浮点数):
- float 单精度浮点数,精度:7位小数 占4字节
- double 双精度浮点数 精度:15位小数 占8字节
- decimal 大浮点数 精度:30位小数 占 17字节
定义方法:
- age int
- selary float(7,2) : 7 包含小数位,2是小数位
- distance decimal(30,29)
②字符串类型
单引号括起来就是字符串
类型
- char(n):定长字符串 0-255
- varchar(n)变长字符串 0 -65535
- text(n) 文本型 0-65535
- binary(n) 二进制字符串 范围 0-n
char和varchar的区别:
- 使用空间的方式不同:char(10)尽管你只存“test”,实际还是分配10字符的空间;varchar(20),也是存放“test”,只需分配4个字符空间;
- char处理数据要快于varchar
③日期
类型
- year yyyy
- date yyyy-mm-dd
- time HH:MM:SS
- timestamp yyyy-mm-dd HH:MM:SS
- datetime yyyy-mm-dd HH:MM:SS
定义
- birthday date
④二进制【了解】
- tinyblob 0-255
- blob 65kb
- longblob 4GB
- mediumblob 16M
3.约束类型:
①主键约束
②非空约束
③默认值约束
④自增长约束
⑤检查约束
⑥唯一约束
⑦外键约束
innodb和myisam的区别
1、innodb支持事务,而myisam不支持事务。
2、innodb支持外键,而myisam不支持外键。
3、innodb默认表锁,使用索引检索条件时是行锁,而myisam是表锁(每次更新增加删除都会锁住表)。
4、innodb和myisam的索引都是基于b+树,但他们具体实现不一样,innodb的b+树的叶子节点是存放数据的,myisam的b+树的叶子节点是存放指针的。
5、innodb是聚簇索引,必须要有主键,一定会基于主键查询,但是辅助索引就会查询两次,myisam是非聚簇索引,索引和数据是分离的,索引里保存的是数据地址的指针,主键索引和辅助索引是分开的。
6、innodb不存储表的行数,所以select count( * )的时候会全表查询,而myisam会存放表的行数,select count(*)的时候会查的很快。
总结:mysql默认使用innodb,如果要用事务和外键就使用innodb,如果这张表只用来查询,可以用myisam。如果更新删除增加频繁就使用innodb。