2 MySQL 基本操作 数据类型 约束条件 修改表结构

MySQL 基本操作 数据类型 约束条件 修改表结构

MySQL基本操作

SQL指令分类

名称 命令
DDL 数据定义语言 create alter drop
DML 数据操作语言 insert update delete
DCL 数据控制语言 grant revoke
DTL 数据事物语言 commit rollback savepoint

库管理命令

库类似于系统的文件夹

命令 说明
show databases; 显示已有的库
use 库名 切换库
select database(); 显示当前所在的库
create database 库名; 创建新库
show tables; 显示已有的表
drop database 库名; 删除库

表管理命令

表类似于系统的文件

命令 说明
desc 表明; 查看表结构
select * from 表名; 查看表记录
drop table 表名; 删除表

创建表语法

CREATE TABLE 库名.表名(
    字段名1 字段类型(宽度) 约束条件,
    字段名2 字段类型(宽度) 约束条件,
    ....
    字段名N 字段类型(宽度) 约束条件
    );

记录管理命令

**记录类似于文件里的行 **

命令 说明
select * from 表名; 查看表记录
insert into 表名 values(值列表),(第二行); 插入表记录
update 表名 set 字段=值; 修改表记录
delete from 表名; 删除表记录

MySQL数据类型

1547623106365

常见的信息种类

类型 常见的信息
数值型 体重 身高 成绩 工资
字符型 姓名 工作单位 通信住址
枚举型 兴趣爱好 性别
日期时间型 出生日期 注册时间

数值类型

类型 大小 范围 (默认有符号) 范围 (无符号) 用途
TINYINT 1字节 -128 ~ 127 0 ~ 255 微小整数
SMALLINT 2字节 -32768 ~ 32767 0 ~ 65535 小整数
MEDIUMINT 3字节 -223 ~ 223-1 0 ~ 224-1 中整数
INT 4字节 -231 ~ 231-1 0 ~ 232-1 大整数
BIGINT 8字节 -263 ~ 263-1 0 ~ 264-1 极大整数
FLOAT 4字节 单精度浮点数
DOUBLE 8字节 双精度浮点数
DECIMAL 对DDECIMAL(M,D) 其中M为有效位数 D为小数位,M应大于D 占用M+2字节

整数型

默认MySQL库名,表名,字段名支持中文,默认创建表CHARSET=latin1不支持中文数据,建表时需要设置默认字符集包含中文.默认int为带符号型整数,如果只需要正值,创建字段时需要添加unsgined.

 CREATE TABLE `t1` (
    `姓名` char(15) DEFAULT NULL,
    `班级` char(7) DEFAULT NULL,
    `年龄` tinyint(3) unsigned DEFAULT NULL
     ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

浮点型

定义格式: float(总宽度,小数位数)

当字段值与类型不匹配时,字段值作为0处理

数值超出范围时,仅保存最大/最小值

mysql root@localhost:db1> create table t4(socre double(8,2));                      
Query OK, 0 rows affected

mysql root@localhost:db1> desc t4;                                                 
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| socre | double(8,2) | YES  |     | <null>  |       |
+-------+-------------+------+-----+---------+-------+

字符类型

定长: char(字符数)

  • 默认字符 1
  • 最大长度255字符
  • 不够制定字符数时在右边用空格补齐
  • 字符数超出时,无法写入数据

变长: varchar(字符数)

  • 不写语法错误
  • 按数据实际大小分配存储空间
  • 字符数超出时,无法写入数据

大文本类型: text/blob

  • 主要用来存放2 进制数据,例如图片视频,不推荐直接存图片视频
  • 字符数大于65535存储时使用

数值类型宽度数 和 字符类型宽度区别

age int(3) 显示宽度,默认11,如果不限制当位数不足时在左边补空格

name char(2) 字符宽度

枚举类型

类型 说明 定义格式
ENUM 从给定值集合中选择单个值 enum(值1,值2,值N)
SET 从给定值集合中选择一个或多个值 set(值1,值2,值N)
mysql root@localhost:db1> create table t6( 
                          name char(15), 
                          age tinyint unsigned, 
                          pay float(7,2), 
                          sex enum('male','female'), 
                          likes set('money','eat','sex')); 
mysql root@localhost:db1> insert into t6 values('leo',30,15000,'male','money,eat,se
                          x'),('lion',18,3500,2,'eat');

日期时间类型

日期时间类型 说明 格式 范围 占用字节
year YYYY 1901 ~ 2155 占用1个字节
date 日期 YYYYMMDD 0001-01-01 ~ 9999-12-31 占用4个字节
time 时间 HHMMSS 占用3个字节
datetime 日期时间 YYYYMMDDHHmmSS 1000-01-01 00:00:00.000000 ~ 9999-12-31 23:59:59.999999 占用8个字节
timestamp 日期时间 YYYYMMDDHHmmSS 1970-01-01 00:00:00.000000 ~ 2038-01-19 03:14:07.999999 占用4个字节

关于日期时间字段

  • 当未给TIMESTAMP字段赋值时,自动以当前系统时间赋值,而DATETIME字段默认赋值为 NULL

YEAR年份的处理

  • 默认用4位数字表示
  • 当只用2位数字赋值时,0169视为20002069,而7099视为19701999

时间函数

类型 用途 括号内是否需要写值
now() 获取系统当前日期和时间 N
curdate() 获取当前的系统日期 N
curtime() 获取当前的系统时刻 N
sleep(N) 休眠N秒 Y
year() 执行时动态获得系统日期时间 Y
month() 获取指定时间中的月份 Y
date() 获取指定时间中的日期 Y
time() 获取指定时间中的时刻 Y
mysql> insert into t7 values('jing',year(19901120),date(now()),093000,now());

datetime 和 timestamp区别

  1. 范围不同
日期时间类型 说明 格式 范围 占用字节
datetime 日期时间 YYYYMMDDHHmmSS 1000-01-01 00:00:00.000000 ~ 9999-12-31 23:59:59.999999 占用8个字节
timestamp 日期时间 YYYYMMDDHHmmSS 1970-01-01 00:00:00.000000 ~ 2038-01-19 03:14:07.999999 占用4个字节
  1. Default值不同,timestamp默认取当前系统时间
+----------+-----------+------+-----+-------------------+-----------------------------+
| Field    | Type      | Null | Key | Default           | Extra                       |
+----------+-----------+------+-----+-------------------+-----------------------------+
| meetting | datetime  | YES  |     | NULL              |                             |
| party    | timestamp | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |

练习

  1. 按如下表创建stuinfo表
1547634058541
#创建stu库设定utf8为默认字符集
mysql root@localhost:stu> create database stu CHARACTER SET utf8;
#创建stuinfo表
mysql root@localhost:stu> create table stuinfo( 
                          学号 char(9), 
                          姓名 char(15), 
                          性别 enum('男','女'), 
                          手机号 char(11), 
                          通信地址 char(40));
#插入数据
mysql root@localhost:stu> insert into stuinfo values 
                          ('NSD131201','张三','男','13012345678','朝阳区劲松南路'),
                          ('NSD131202','韩梅梅','女','13722223333','海淀区北环三路'), 
                          ('NSD131203','王五','男','18023445678','丰台区兴隆中街'); 
mysql root@localhost:stu> select * from stuinfo;                                   
+-----------+--------+------+-------------+----------------+
| 学号      | 姓名   | 性别 | 手机号      | 通信地址       |
+-----------+--------+------+-------------+----------------+
| NSD131201 | 张三   | 男   | 13012345678 | 朝阳区劲松南路 |
| NSD131202 | 韩梅梅 | 女   | 13722223333 | 海淀区北环三路 |
| NSD131203 | 王五   | 男   | 18023445678 | 丰台区兴隆中街 |
+-----------+--------+------+-------------+----------------+
  1. 创建一个学员表,包括姓名,入学年份,生日,培训时间段
mysql root@localhost:stu> create table stuinfo2( 
                          name char(15), 
                          starty year, 
                          birth date, 
                          ttime1 time, 
                          ttime2 time);
mysql root@localhost:stu> insert into stuinfo2 values 
                          ('leo',2010,19880729,0800,1800);
mysql root@localhost:stu> select * from stuinfo2;                                  
+------+--------+------------+---------+----------+
| name | starty | birth      | ttime1  | ttime2   |
+------+--------+------------+---------+----------+
| leo  | 2010   | 1988-07-29 | 8:00:00 | 18:00:00 |
+------+--------+------------+---------+----------+

约束条件

命令 说明
NULL 允许为空,默认设置
NOT NULL 不允许为空
Key 索引类型
Default 设置默认值,缺省为NULL
mysql> create table t14( 
                          name char(5) not null, 
                          level int(3) zerofill default 0, 
                          money tinyint(2) zerofill default 0);
mysql> desc t14;
+-------+------------------------------+------+-----+---------+-------+
| Field | Type                         | Null | Key | Default | Extra |
+-------+------------------------------+------+-----+---------+-------+
| name  | char(5)                      | NO   |     | NULL    |       |
| level | int(3) unsigned zerofill     | YES  |     | 000     |       |
| money | tinyint(2) unsigned zerofill | YES  |     | 00      |       |
+-------+------------------------------+------+-----+---------+-------+

修改表结构

[图片上传失败...(image-315ac5-1547759051212)]

语法结构

基本用法:

ALTER TABLE 表名 执行动作;
执行动作 说明
add 添加字段
modify 修改字段类型
change 修改字段名
drop 删除字段
rename 修改表名

添加字段

语法

ALTER TABLE 表名
ADD 字段名 类型(宽度) 约束条件 [ First | AFTER 字段名 ],
ADD 字段名2 类型(宽度) 约束条件 [ First | AFTER 字段名 ],
... ...,
ADD 字段名N 类型(宽度) 约束条件 [ First | AFTER 字段名 ];
eg
alter table t15
add email varchar(30) default "stu@tedu.cn",
add tel char(11),
add stu_id char(9) first,
add sex enum("male","female","unknow") default "unknow" after name;
mysql> desc t15;
+--------+--------------------------------+------+-----+-------------+-------+
| Field  | Type                           | Null | Key | Default     | Extra |
+--------+--------------------------------+------+-----+-------------+-------+
| stu_id | char(9)                        | YES  |     | NULL        |       |
| name   | char(15)                       | NO   |     |             |       |
| sex    | enum('male','female','unknow') | YES  |     | unknow      |       |
| level  | int(3) unsigned zerofill       | YES  |     | 000         |       |
| money  | tinyint(2) unsigned zerofill   | YES  |     | 00          |       |
| emial  | varchar(30)                    | YES  |     | stu@tedu.cn |       |
| tel    | char(11)                       | YES  |     | NULL        |       |
+--------+--------------------------------+------+-----+-------------+-------+

修改字段类型

语法

ALTER TABLE 表名
MODIFY 字段名 类型(宽度) 约束条件 [ First | AFTER 字段名 ],
MODIFY 字段名2 类型(宽度) 约束条件 [ First | AFTER 字段名 ],
... ...,
MODIFY 字段名N 类型(宽度) 约束条件 [ First | AFTER 字段名 ];

修改字段类型时,若新的类型与字段已经存储数据冲突,不允许修改.不修改的部分要原样写一遍,否则会还原为默认值

如果字段类型省略,都会使用默认值,如不想使用默认值,需要将本来的约束条件写出来

eg
mysql> alter table t15
    -> modify name varchar(15) not null first,
    -> modify emial varchar(30) after tel;

mysql> desc t15;
+--------+--------------------------------+------+-----+---------+-------+
| Field  | Type                           | Null | Key | Default | Extra |
+--------+--------------------------------+------+-----+---------+-------+
| name   | varchar(15)                    | NO   |     | NULL    |       |
| stu_id | char(9)                        | YES  |     | NULL    |       |
| sex    | enum('male','female','unknow') | YES  |     | unknow  |       |
| level  | int(3) unsigned zerofill       | YES  |     | 000     |       |
| money  | tinyint(2) unsigned zerofill   | YES  |     | 00      |       |
| tel    | char(11)                       | YES  |     | NULL    |       |
| emial  | varchar(30)                    | YES  |     | NULL    |       |
+--------+--------------------------------+------+-----+---------+-------+

修改字段名

语法

ALTER TABLE 表名
CHANGE 原字段名 新字段名 类型(宽度) 约束条件,
CHANGE 原字段名2 新字段名2 类型(宽度) 约束条件,
... ...
CHANGE 原字段名N 新字段名N 类型(宽度) 约束条件;

change不可以修改字段顺序

eg
alter table t15
change Email email varchar(20);

必须带字段类型和约束条件 否则报错

删除字段

语法

ALTER TABLE 表名
DROP 字段名,
DROP 字段名2;
... ...
DROP 字段名N;

eg
alter table t15
drop emial,
drop tel,
add email varchar(30) default "stu@qq.com";

修改表名

语法

ALTER TABLE 表名
RENAME 新表名;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容

  • MYSQL 基础知识 1 MySQL数据库概要 2 简单MySQL环境 3 数据的存储和获取 4 MySQL基本操...
    Kingtester阅读 7,777评论 5 116
  • 什么是数据库? 数据库是存储数据的集合的单独的应用程序。每个数据库具有一个或多个不同的API,用于创建,访问,管理...
    chen_000阅读 4,030评论 0 19
  • 许是最近有些无所事事,闲来也罢,倒不如写写别人的故事或者写写自己的故事。下面这个故事是朋友的,真实,但我也理...
    柠说阅读 304评论 0 0
  • [玫瑰]2017.9.1日祈祷文:祈祷文 OOO(孩子名字)实相完全圆满。 OOO与生命本源的爱是一体的,时时刻刻...
    小Yan子生活点滴阅读 406评论 0 1
  • 金牛派阅读 99评论 0 0