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)