DDL --数据定义语言

1. create 操作库

1)查看语法

mysql> help create database;
Syntax:
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [create_specification] ...

create_specification:
    [DEFAULT] CHARACTER SET [=] charset_name | [DEFAULT] COLLATE [=] collation_name

2)创建库

#1.建库
mysql> create database db01;
Query OK, 1 row affected (0.00 sec)

#2.建库2
mysql> create schema db02;
Query OK, 1 row affected (0.00 sec)

#3.创建已存在的库不报错
mysql> create database db01;
ERROR 1007 (HY000): Can't create database 'db01'; database exists

mysql> create database IF NOT EXISTS db01;
Query OK, 1 row affected, 1 warning (0.00 sec)

3)查看建库语句

mysql> show create database db01;
+----------+-----------------------------------------------------------------+
| Database | Create Database                                                 |
+----------+-----------------------------------------------------------------+
| db01     | CREATE DATABASE `db01` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+-----------------------------------------------------------------+
1 row in set (0.00 sec)

4)创建库指定字符集和校验规则

#1.指定字符集建库
mysql> create database db03 charset utf8;
Query OK, 1 row affected (0.00 sec)

#2.指定字符集和校验规则建库
mysql> create database db04 charset utf8 collate utf8_general_ci;
Query OK, 1 row affected (0.00 sec)

mysql> create database db06 charset utf8 collate utf8_general_ci;
Query OK, 1 row affected (0.00 sec)

5)修改库

#只需要修改字符集和校验规则
mysql> alter database db05 character set utf8mb4 collate utf8mb4_general_ci;
Query OK, 1 row affected (0.00 sec)

mysql> show create database db05;
+----------+------------------------------------------------------------------+
| Database | Create Database                                                  |
+----------+------------------------------------------------------------------+
| db05     | CREATE DATABASE `db05` /*!40100 DEFAULT CHARACTER SET utf8mb4 */ |
+----------+------------------------------------------------------------------+
1 row in set (0.00 sec)

6)删库

mysql> drop database db05;
Query OK, 0 rows affected (0.00 sec)

2. create 操作表

1)查看语法

mysql> help create table;
Syntax:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    (create_definition,...)
    [table_options]
    [partition_options]

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    [(create_definition,...)]
    [table_options]
    [partition_options]
    [IGNORE | REPLACE]
    [AS] query_expression

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    { LIKE old_tbl_name | (LIKE old_tbl_name) }

2)建表

#1.进入库
mysql> use test;
Database changed

#2.查看所在库
mysql> select database();
+------------+
| database() |
+------------+
| test      |
+------------+
1 row in set (0.00 sec)

#3.建表
mysql> create table tb1(id int);
Query OK, 0 rows affected (0.01 sec)

3)数据类型

int            整数            -2^31 --- 2^31-1   (-2147483648 - 2147483647)
tinyint        最小整数        -128 --- 127      #一般用在定义年龄
varchar        字符类型(变长)    #身份证或者名字
char        字符类型(定长)
enum        枚举类型          #性别
datetime    时间类型

4)测试int数据类型

#1.建表
mysql> create table tb1(id int);
Query OK, 0 rows affected (0.01 sec)

#2.指定字符集建表
mysql> create table tb2(id int) charset utf8;
Query OK, 0 rows affected (0.01 sec)

#3.查看建表语句
mysql> show create table tb2;
+-------+---------------------------------------------------------------------------------------+
| Table | Create Table                                                                          |
+-------+---------------------------------------------------------------------------------------+
| tb2   | CREATE TABLE `tb2` (
  `id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+---------------------------------------------------------------------------------------+
1 row in set (0.01 sec)

#4.查看表结构
mysql> desc tb1;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
1 row in set (0.00 sec)

#5.插入数据
mysql> insert tb1 values('11111111111');
ERROR 1264 (22003): Out of range value for column 'id' at row 1

mysql> insert tb1 values('-2147483648');
Query OK, 1 row affected (0.00 sec)

mysql> insert tb1 values('2147483648');
ERROR 1264 (22003): Out of range value for column 'id' at row 1

mysql> insert tb1 values('-2147483649');
ERROR 1264 (22003): Out of range value for column 'id' at row 1

mysql> insert tb1 values('2147483647');
Query OK, 1 row affected (0.00 sec)
#原因:插入的数据超过数据类型的长度

5)测试char和varchar类型

#1.建表
mysql> create table tb1(id int,name varchar(12));
Query OK, 0 rows affected (0.06 sec)

#2.插入数据
mysql> insert into tb1 values('1','邱导');
Query OK, 1 row affected (0.00 sec)

mysql> insert into tb1 values('1','zengzhigaoxiang');
ERROR 1136 (21S01): Column count doesn't match value count at row 1
#字符超过数据类型的限制值

6)测试enum类型

#1.建表
mysql> create table tb4(id int,name varchar(10),sex enum('man','woman'));
Query OK, 0 rows affected (0.03 sec)

#2.插入数据
mysql> insert into tb4 values('1','邱导','man');
Query OK, 1 row affected (0.00 sec)

mysql> insert into tb4 values('2','刘大维','nan');
ERROR 1265 (01000): Data truncated for column 'sex' at row 1
#如果是枚举类型,必须插入类型指定的值,不能插入额外的值

7)建表测试

#建学生表
id
name
sex
age
cometime

#1.建表
mysql> create table student(id int,name varchar(10),sex enum('','nv'),age tinyint,cometime datetime);
Query OK, 0 rows affected (0.03 sec)

#2.插入数据
mysql> insert into student values('-12573','邱导','','-18',now());
Query OK, 1 row affected (0.00 sec)

#3.查看数据
mysql> select * from student;
+--------+--------+------+------+---------------------+
| id     | name   | sex  | age  | cometime            |
+--------+--------+------+------+---------------------+
| -12573 | xxxx   | 男   |  -18 | 2020-10-23 18:40:15 |
+--------+--------+------+------+---------------------+
1 row in set (0.00 sec)

8)建表的数据属性

not null:             非空
primary key:         主键(唯一且非空的)
auto_increment:     自增(此列必须是:primary key或者unique key)
unique key:         唯一键(单独的唯一的)
default:             默认值
unsigned:             非负数
comment:            注释

9)删除表

mysql> drop table student;
Query OK, 0 rows affected (0.00 sec)

10)修改表

#1.修改表字符集
mysql> alter table play charset utf8mb4;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

#2.修改表名   将play表修改为student表
mysql> alter table play rename student;
Query OK, 0 rows affected (0.01 sec)

#3.给表插入字段  给student表插入name列
mysql> alter table student add name varchar(10);

#4.给表插入多个字段
mysql> alter table student add sex enum('',''),add age tinyint;

#5.插入字段到第一列
mysql> alter table student add id int first;

#6.插入字段到指定字段后面
mysql> alter table student add class varchar(12) after id;

#7.删除字段
mysql> alter table student drop qiudao;

#8.修改列属性
mysql> alter table student modify name varchar(20);

#9.修改列的名字和属性
mysql> alter table student change sex xingbie enum('','');

#10.修改库的字符集
mysql> alter database taobao charset utf8mb4;
原文地址:https://www.cnblogs.com/chenlifan/p/13875040.html