DDL语句
不要在系统的数据库里面进行操作
1:数据库基本操作
查询
mysql> show databases;
查询当前数据库
mysql> select database(); #查询当前所在的数据库
创建
create database [if not exists] 数据库名 [defaul charest 字符集] [collate 排序规则];
if not exists : 数据库名存在则不创建,防止则创建
default charset 字符集: 设置字符编码
mysql> create database ittest; #
Query OK, 1 row affected (0.01 sec)
mysql> create database if not exists ittest; #数据库存在则不创建,不存在则创建
Query OK, 1 row affected, 1 warning (0.01 sec)
mysql> create database test default charset utf8mb4; #创建test数据库并设置编码格式,utf8存储为3个字节,utf8mb4支持4个字节
Query OK, 1 row affected (0.01 sec)
删除
mysql> drop database if exists test; #if exists 如果数据库存在则删除,不存在则不进行操作
使用
mysql> use ittest; #切换数据库
Database changed
2:DDL-表操作-查询
查询当前数据库所有表(前提是要进入到数据库)
mysql> show tables;
Empty set (0.00 sec) #空数据
查询表结构
desc version;
查询指定表的建表语句
mysql> show create tables 表名
表的创建
create table 表名(
字段1 字段1类型 [comment字段1 注释], #使用,分隔表
字段2 字段2类型 [comment字段2 注释],
字段3 字段3类型 [comment字段3 注释],
字段4 字段4类型 [comment字段4 注释] #最后一个字段写完没有,
)[content 表注释];
创建表示例
mysql> create table tb_user(
-> id int comment '编号',
-> name varchar(50) comment '姓名',
-> age int comment '年龄',
-> gender varchar(1) comment '性别'
-> )comment '用户表';
Query OK, 0 rows affected (0.05 sec)
查看表的类型
mysql> desc tb_user;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(50) | YES | | NULL | |
| age | int | YES | | NULL | |
| gender | varchar(1) | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
mysql> show create tb_user; #查看表的创建详细信息
3:数据类型
主要分为三类,数值类型,字符串类型,日期和时间类型
(1)数值类型
类型 | 大小 | 有符号(SIGNED)取值范围 | 无符号(UNSIGNED)范围 | 描述 |
---|---|---|---|---|
TINYINT | 1 byte | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2bytes | (-32768,32767) | (0,65535) | 大整数值 |
MEDIUMINT | 3bytes | (-8388608,8388607) | (0,16777215) | 大整数值 |
INT或者INTEGER | 4bytes | (-2147483648,2147483647) | 4294967295) | 大整数值 |
BIGINT | 5bytes | (-263,263-1Z) | (0,2^64-1) | 极大整数值 |
FLOAT | 4bytes | (-3.402823466 E+38.3.402823466351 E+38) | 和( 1.175494351 E-38,3.402823466E+38) | 单精度浮点数值 |
DOUBLE | 8bytes | (-1.7976931348623157 E+308,1.7976931348623157 E+308) | 0和(2.2250738585072014 E-308,1.7976931348623157 E+308) | 双精度浮点数值 |
DECIMAL | 依赖于M(精度)和D(标度)的值 | 依赖于M(精度)和D(标度)的值 | 小数值(精确定点数) |
注:有符号范围,允许出现负数的范围
无符号范围,不允许出现负数的范围
示例:123.45,精度为整个数值的位数5,标度为小数位数2
age TINYINT UNSIGNED 表示取无符号范围
(2)字符串类型
类型 | 大小 | 描述 |
---|---|---|
CHAR | 0-255 bytes | 定长字符串 |
VARCHAR | 0-65535 bytes | 变长字符串 |
TINYBLOB | 0-255 bytes | 不超过255个字符的二进制数据 |
TINYTEXT | 0-255 bytes | 短文本字符串 |
BLOG | 0-65535 bytes | 二进制形式的长文本数据 |
TEXT | 0-65535 bytes | 长文本数据 |
MEDIUMBLOB | 0-16777215 bytes | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215 bytes | 中等长度文本数据 |
LONGBLOB | 0-4 294 967295 bytes | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967295 bytes | 极大文本数据 |
vrchar(10) 变长字符串 根据所存储的大小来决定所占大小,存储一个字符就占一个字符的存储空间
char(10) 定长字符串,此处直接占用10个字符,例如占用1个长度,剩下的使用空格填充
char和varchar在使用是都需要使用(10)来表示最大占用大小
(3)日期时间类型
类型 | 大小 | 范围 | 格式 | 描述 |
---|---|---|---|---|
DATE | 3 | 1000-01-01至9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 | -838:59:59 至838:59:59 | HH:MM:SS | 时间值或持续时间 |
YEAR | 1 | 1901至2155 | YYYY | 年份值 |
DATETIME | 8 | 1000-01-01 00:00:00至9999-12-31 23:59:59 | YYYY-MM-DD HH:MM :SS | 混合日期和时间值 |
TIMESTAMP | 4 | 1970-01-01 00:00:01至2038-01-19 03:14:07 | rrYY-MM-DD HH:MM :SS | 混合日期和时间值,时间戳 |
示例:创建一个员工表
要求:
编号(纯数字)
员工工号(字符串类型,长度不超过10位)
员工姓名(字符串类型,长度不超过10位)
性别(男/女,存储一个汉字)
年龄(正常年龄)
身份证号(18位,带有x类型)
入职时间(取值年月日)
mysql> create table emp(
-> id int comment '编号',
-> worknomber varchar(10) comment '工号',
-> name varchar(10) comment '姓名',
-> gender char(1) comment '性别',
-> age tinyint unsigned comment '年龄',
-> idcard char(18) comment '身份证号',
-> entydate date comment '入职时间'
-> )comment '员工表';
Query OK, 0 rows affected (0.05 sec)
4:DDL–表修改
示例:添加表
alter table 表名 add 字段名 类型(长度) [comment 注释] [约束];
mysql> alter table emp add nickname varchar(20) comment '昵称'; #添加字段到表
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
示例:修改数据类型
alter table 表名 modify 字段名 新数据类型(长度) #修改数据类型
alter table 表明 change 旧字段名 新字段名 类型(长度) [comment 注释] [约束]; #需改字段名和字段类型
mysql> alter table emp change nickname username varchar(20) comment '用户名'; #修改字段
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
示例:删除字段
alter table 表名 drop 字段名; #删除某个字段
mysql> alter table emp drop username; #删除username字段
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
示例:修改表名
alter table rename to 新表名 #修改表名
mysql> alter table emp rename to employ;
Query OK, 0 rows affected (0.02 sec)
5:DDL–表删除
drop table [if exists] 表名; 如果表存在则删除,不存在则不删除
mysql> drop table if exists tb_user; #删除表
Query OK, 0 rows affected (0.02 sec)
truncate table 表名; #删除指定表,并重新创建该表,会删除所有数据
mysql> truncate table employ; #删除并重新创建,成为新表
Query OK, 0 rows affected (0.05 sec)