🏖这一篇 我们讨论一下数据库和数据表的相关操作..
1. 数据库相关操作
1.1创建数据库
-
普通创建
CREATE {DATABASE|SCHEMA} db_name;
-
检测数据库名称是否存在,不存在则创建
CREATE DATABASE [IF NOT EXISTS] db_name;
-
在创建数据库的同时指定编码方式
CREATE DATABASE [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET [=] charset;
-
注意!
- 数据库名称最好有意义
- 名称不要包含特殊字符或者是MySQL关键字
1.2 查看当前服务器下全部数据库
SHOW DATABASES|SCHEMAS;
1.3 查看指定数据库的详细信息
SHOW CREATE BATABASE db_name;
1.4 修改制定数据库的编码方式
ALTER DATABASE db_name [DEFAULT] CHARACTER SET [=] charset;
1.5 打开指定数据库
USE db_name;
1.6 得到当前打开的数据库
SELECT DATABASE()|SCHEMA();
1.7 删除指定的数据库
-
直接删除
DROP DATABASE db_name;
-
如果数据库存在则删除
DROP DATABASE [IF EXISTS] db_name;
2. 数据表操作
2.1 数据表
- 是数据库最重要的组成部分之一,数据是保存在数据表中
- 数据表由行(row)和列(column)来组成
- 每个数据表中至少有一列,行可以有零行一行或者多行组成
- 表名要求唯一,不要包含特殊字符,最好含义明确
2.2 创建表
CREATE TABLE [IF NOT EXISTS] tbl_name(
字段名称 字段类型[完整性约束条件],
字段名称 字段类型[完整性约束条件]
)ENGINE = 存储引擎 CHARSET=编码方式
完整性约束条件:
名称 | 含义 | 具体细节 |
---|---|---|
UNSIGNED | 无符号 | 没有负数,从0开始 |
ZEROFILL | 零填充 | 当数据的显示长度不够的时候,可以使用前补0的效果填充至指定长度,字段会自动添加UNSIGNED |
NOT NULL | 非空约束 | 插入值的时候这个字段必须要给值,值不能为空 |
DEFAULT | 默认值 | 如果插入记录的时候没有给字段赋值,则使用默认值 |
PRIMARY KEY | 主键主键 | 标识记录的唯一性,值不能重复,一个表只能有一个主键,自动禁止为空 |
AUTO_INCREMENT | 自动增长 | 只能用于数值列,而且配合索引使用,默认起始值从1开始,每次增长1 |
UNIQUE KEY | 唯一性 | 一个表中可以有多个字段是唯一索引,同样的值不能重复,但是NULL值除外 |
FOREIGN KEY | 外键 | 外键约束 |
2.3 查看当前数据库下已有数据表
SHOW TABLES;
SHOW [FULL] TABLES [{FROM | IN} db_name]
[LIKE 'pattern' | WHERE expr];
2.4 查看指定数据表的详细信息
SHOW CREATE TABLE tbl_name;
2.5 查看表结构
DESC tbl_name;
DESCRIBE tbl_name;
SHOW COLUMNS FROM tbl_name;
2.6 删除指定的数据表
DROP TABLE [IF EXISTS] tbl_name;
2.7 表结构相关结构
-
添加字段
ALTER TABLE tbl_name; ADD 字段名称 字段属性 [完整性约束条件][FIRST|AFTER 字段名称]
-
删除字段
ALTER TABLE tbl_name; DROP 字段名称
-
添加默认值
ALTER TABLE tbl_name ALTER 字段名称 SET DEFAULT 默认值;
-
删除默认值
ALTER TABLE tbl_name ALTER 字段名称 DROP DEFAULT;
-
修改字段类型、字段属性
ALTER TABLE tbl_name MODIFY 字段名称 字段类型 [字段属性] [FIRST | AFTER 字段名称];
-
修改字段名称、字段类型、字段属性
ALTER TABLE tbl_name CHANGE 原字段名称 新字段名称 字段类型 字段属性 [FIRST | AFTER 字段名称]
-
添加主键
ALTER TABLE tbl_name ADD PRIMARY KEY(字段名称);
-
删除主键
ALTER TABLE tbl_name DROP PRIMARY KEY;
-
添加唯一
ALTER TABLE tbl_name ADD QNIQUE KEY|INDEX [index_name](字段名称)
-
删除唯一
ALTER TABLE tbl_name DROP index_name;
-
修改数据表名称
- 通过ALTER然后RENAME的格式
ALTER TABLE tbl_name RENAME [TO|AS] new_tbl_name;
- 直接RENAME
RENAME TABLE tbl_name TO new_tbl_name;
-
修改 AUTO_INCREMENT的值
ALTER TABLE tbl_name AUTO_INCREMENT=值
3. MYSQL中的数据类型
3.1 数值型
- 整数型
- TINYINT:字节1
- 有符号值: -128 到 127(-27到27-1)
- 无符号值:0到255(0到2^8-1)
- SMALLINT:字节2
- 有符号值:-32768到32767(-215到215-1)
- 无符号值:0到65535(0到2^16-1)
- MEDIUMINT:字节3
- 有符号值:-8388608到8388607(-231到231-1)
- 无符号值:0到16777215(0到2^32-1)
- INT:字节4
- 有符号值:-231到231-1
- 无符号值:0到2^32-1
- BIGINT:字节8
- 有符号值:-263到263-1
- 无符号值:0到2^64-1
- BOOL/BOOLEAN:字节1
- 等价于TINYINT(1)
- 0为false,其余为true
- TINYINT:字节1
- 浮点型
- FLOAT[(M,D)]: 字节4
- M是总位数,D是小数点后的位置
- DOUBLE[(M,D)]: 字节8
- DECIMAL[(M,D)]: M+2
- FLOAT[(M,D)]: 字节4
3.2 字符串类型
- 类型综述
列类型 | 存储需求 |
---|---|
CHAR(M) | M个字节,0<=M<=255 |
VARCHAR(M) | L+1字节,其中L<=M且0<=M<=65535 |
L+1个字节,其中L<2^8 | |
TEXT | L+2个字节,其中L<2^16 |
L+3个字节,其中L<2^24 | |
LONGTEXT | L+4个字节,其中L<2^32 |
ENUM('value1','value2') | 1或2个字节,取决于枚举值的个数(最多65535个值) |
SET('value1','value2') | 1、2、3、4或者8个字节,取决于set成员的数目(最多64个) |
- 一些tips
- CHAR效率高于VARCHAR,CHAR相当于拿空间换时间,VARCHAR拿时间换空间
- CHAR默认存储数据的时候,后面会用空格填充到指定长度;而在检索的时候会去掉后面空格;VARCHAR在保存的时候不进行填充,尾部的空格会留下
- TEXT列不能有默认值,检索的时候不存在大小写转换
3.3 日期时间类型
列类型 | 存储范围 | 存储需求 |
---|---|---|
-838:59:59 ~ 838:59:59 | 3 | |
DATE | 1000-01-01 ~ 9999-12-31 | 3 |
1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 | ||
TIMESTAMP | 1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 | 4 |
YEAR | 1901-2155 |