DDL(Database Definition Language)数据定义语言

针对库、表的操作

alter drop create

mkdir
touch
rm

# 数据库:
## 增:建库
create database 库名;
create schema 库名;
  ### 数据库已存在的情况下(这种创库方式如果库已存在创建时不会报错)
  create schema if not exists 库名;

【语法】
Name: 'CREATE DATABASE'
Description:
Syntax:
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
	[create_option] ...
create_option: [DEFAULT] {
	CHARACTER SET [=] charset_name
	| COLLATE [=] collation_name
} 
CREATE DATABASE creates a database with the given name. To use this
statement, you need the CREATE privilege for the database. CREATE
SCHEMA is a synonym for CREATE DATABASE.

URL: https://dev.mysql.com/doc/refman/5.7/en/create-database.html


### 指定字符集和校验规则
create database if not exists 库名 charset utf8 collate utf8_bin;

### 修改默认字符集(加到配置文件里以后创建的库就是utf8的字符集)(show variables like '%char%';查看字符集类型)
vim /etc/my.cnf
[mysqld]
character_set_server=utf8


## 删
drop database 库名;
drop database if exists 库名;

## 改
alter database 库名 修改内容;
-例:
	-#创建字符集utf8的库
	root@localhost [(none)] >alter database zls charset utf8;
	Query OK, 1 row affected (0.00 sec)
	-#查看建库语句相关信息
	root@localhost [(none)] >show create database zls;
	+----------+--------------------------------------------------------------+
	| Database | Create Database 											  |
	+----------+--------------------------------------------------------------+
	| zls      | CREATE DATABASE `zls` /*!40100 DEFAULT CHARACTER SET utf8 */ |
	+----------+--------------------------------------------------------------+
	1 row in set (0.00 sec)
	
	root@localhost [(none)] >alter database zls collate utf8_bin;
	Query OK, 1 row affected (0.01 sec)
	-#指定字符集和校验规则
	root@localhost [(none)] >alter database zls charset latin1 collate latin1_general_ci;



# 表操作
## 增:建表
create table

### 数据类型
-#数字类型-
int:整形          -2^31 ~ 2^31-1
tinyint:最小整形   -128 ~ 127

-#字符串类型-
name
varchar(10)		// 可变长类型 (例如名字)
char(10)		// 定长类型	(手机号,身份证号)

char(11) // 手机号
char(18) // 身份证号

-#枚举类型-
 有固定可选择的项
enum('f','m') [female男性,male:女性]
enum('A','B','C','D')

-#浮点型-
float 单精度
double 双精度
	用法:float(5,2)或double(5,2)可以存储最多5位数字,其中小数点后有2位小数

 #范围
 float  -2^128 ~ 2^128
 double -2^1024  ~ 2^1024
 #float 32位,double64位是怎么组成的?
 float  1位符号位   8位指数位  23位尾数
 double 1位符号位   11位指数位  52位尾数
 #有效位数
 float   6位。小数点后6位都是准确的,而第7位就不一定
 double  15位。
	

-#时间戳类型-
timestamp 1970-1-1 00:00:00到2038-01-19 03:14:07结束
datetime  1000-1-1... 开始到9999年最后结束

### 字段属性(约束)
not null:非空

primary key:主键 唯一且不能为空(一张表只能创建一个主键)

auto_increment:自增(可以和主键联合使用)

unique key:唯一键 唯一键可以为空

default:默认值

unsigned:无符号(非负)(加它之后范围改变成:负数部分加到正数上,例如tinyint unsigned 就代表是255(=128+127))

comment:注释

----主键相当于唯一键+not null 但不等于----某列字段有重复时不能再加主键或索引----------

-例:建表(在zls库里建stu10表)
root@localhost [(none)] >create table zls.stu10(name varchar(10),age tinyint);



## 删
drop table 表名;
-例:删表
root@localhost [(none)] >drop table zls;
root@localhost [(none)] >drop table zls.zls;

## 改
alter table
### 改表名
alter table 表名  方法   新表名
alter table test rename test1
............................................................................................
### 修改表结构(改字段/添加字段)
alter table 表名 add 字段名 数据类型 属性约束;
alter table 表名 add 字段名 数据类型 属性约束 first;
alter table 表名 add 字段名 数据类型 属性约束 after 字段名;
alter table 表名 add 字段名1 数据类型 属性约束,add 字段名2 数据类型 属性约束;
alter table 表名 add 字段名1 数据类型 属性约束 first,add 字段名2 数据类型 属性约束 after 字段名;
-例:
默认插到最后一列
alter table test1 add yuanli varchar(10) not null;
插在某一行的后面
alter table test1 add hht varchar(10) not null after yuanli;
插在最前面
alter table test1 add hhh varchar(10) not null first;
一次性添加多个字段
alter table test1 add hht int,add yx int;
alter table test1 add hht1 int first,add yx1 int after yuanli;
..............................................................................................
#### 删除字段
alter table test1 drop hht;
#### 修改字段
	- change
	- modify
#alter table 表名  modify  旧表名 新表名 数据类型-
alter table test1 modify yuanli int(11) comment'xxx';

mysql> show create table aaa.test1;
+-------+-----------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                              |
+-------+-----------------------------------------------------------------------------------------------------------+
| test1 | CREATE TABLE `test1` (
  `yuanli` int(11) DEFAULT NULL COMMENT 'xxx'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+-----------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

-#alter table 表名  change  旧表名 新表名 数据类型-
alter table test1 change yuanli yl char(10) comment 'yyy';
mysql> show create table aaa.test1;                     
+-------+--------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                           |
+-------+--------------------------------------------------------------------------------------------------------+
| test1 | CREATE TABLE `test1` (
  `yl` char(10) DEFAULT NULL COMMENT 'yyy'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+--------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)