行走在数据库上的行癫(二)
开源数据库SQL运维(二)
Author:行癫
GitHub:https://github.com/blackmed/mysql.git
目录:
● 数据类型
● 表操作
● 库操作
一:数据类型
1.数据类型分类
数值类型
字符串类型
时间和日期类型
A.数值类型
整数类型 TINYINT SMALLINT MEDIUMINT INT BIGINT
作用:用于存储用户的年龄、游戏的Level、经验值等。
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
TINYINT | 1 字节 | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2 字节 | (-32 768,32 767) | (0,65 535) | 大整数值 |
MEDIUMINT | 3 字节 | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 |
INT或INTEGER | 4 字节 | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
BIGINT | 8 字节 | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
浮点数类型 FLOAT DOUBLE
作用:用于存储用户的身高、体重、薪水等
float(5.3) 5宽度 3精度
案例:
mysql> create table t12(id float(6,2));
mysql> insert into t12 values ('2.22');
类型 | 大小 | 范围 | 范围 | 用途 |
---|---|---|---|---|
FLOAT | 4 字节 | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度 浮点数值 |
DOUBLE | 8 字节 | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度 浮点数值 |
定点数类型 DEC
作用:定点数在MySQL内部以字符串形式存储,比浮点数更精确,适合用来表示货币等精度高的数据。
位类型 BIT
作用:BIT(M)可以用来存放多位二进制数,M范围从1~64,如果不写默认为1位
B.字符串类型
CHAR系列 CHAR VARCHAR
TEXT系列 TINYTEXT TEXT MEDIUMTEXT LONGTEXT
BLOB 系列 TINYBLOB BLOB MEDIUMBLOB LONGBLOB
BINARY系列 BINARY VARBINARY
枚举类型: ENUM
集合类型: SET
类型 | 大小 | 用途 |
---|---|---|
CHAR | 0-255字节 | 定长字符串 |
VARCHAR | 0-65535 字节 | 变长字符串 |
TINYBLOB | 0-255字节 | 不超过 255 个字符的二进制字符串 |
TINYTEXT | 0-255字节 | 短文本字符串 |
BLOB | 0-65 535字节 | 二进制形式的长文本数据 |
TEXT | 0-65 535字节 | 长文本数据 |
枚举类型: 枚举列可以把一些不重复的字符串存储成一个预定义的集合
用途:存储性别等
mysql> create table enum_table( e ENUM('fish','apple','dog'));
Query OK, 0 rows affected (0.35 sec)
mysql> insert into enum_table(e) values('fish');
Query OK, 1 row affected (0.11 sec)mysql> select * from enum_table;
+------+
| e |
+------+
| fish |
+------+
1 row in set (0.00 sec)mysql> insert into enum_table(e) values('nihao');
ERROR 1265 (01000): Data truncated for column 'e' at row 1
C.时间和日期类型: DATE TIME DATETIME TIMESTAMP YEAR
作用:用于存储用户的注册时间,文章的发布时间,文章的更新时间,员工的入职时间等
类型 | 大小 (字节) | 范围 | 格式 | 用途 |
---|---|---|---|---|
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:00/2038 | YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 |
create table t8 (id1 timestamp NOT NULL default CURRENT_TIMESTAMP,id2 datetime default NULL
);
注意: CURRENT_TIMESTAMP当要向数据库执行insert操作时,如果有个timestamp字段属性设为 CURRENT_TIMESTAMP,则无论这个字段有没有set值都插入当前系统时间
mysql> desc t8;
+-------+-----------+------+-----+-------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------+------+-----+-------------------+-------+
| id1 | timestamp | NO | | CURRENT_TIMESTAMP | |
| d2 | datetime | YES | | NULL | |
+-------+-----------+------+-----+-------------------+-------+
2 rows in set (0.01 sec)timestamp 类型的列还有个特性:默认情况下,在 insert, update 数据时,timestamp 列会自动以当前时间(CURRENT_TIMESTAMP)填充/更新。“自动”的意思就是,你不去管它,MySQL 会替你去处理。mysql> insert into t8(id1) values('20180109000000');
mysql> select * from t8;
+---------------------+------+
| id1 | d2 |
+---------------------+------+
| 2018-01-09 00:00:00 | NULL |
+---------------------+------+
1 row in set (0.00 sec)扩展:
select now();查看当前时间
二:表操作
表是数据库存储数据的基本单位,由若干个字段组成,主要用来存储数据记录。
表的操作包括:
创建表、查看表、修改表和删除表。
这些操作都是数据库管理中最基本,也是最重要的操作。
本节内容包括:
创建表 create table
查看表结构 desc table, show create table
修改表 alter table
复制表 create table …
删除表 drop table
一、创建表(表的基本操作)
表:school.student1
字段 字段 字段
id name sex age
1 tom male 23 记录
2 jack male 21 记录
3 alice female 19 记录语法:
create table 表名(自定义)(字段名1 类型[(宽度) 约束条件],字段名2 类型[(宽度) 约束条件],字段名3 类型[(宽度) 约束条件]
)[存储引擎 字符集];
==在同一张表中,字段名是不能相同
==宽度和约束条件可选
==字段名和类型是必须的mysql> CREATE DATABASE school; //创建数据库school
mysql> use school;
mysql> create table student1(-> id int,-> name varchar(50), -> sex enum('m','f'),-> age int-> );
Query OK, 0 rows affected (0.03 sec)查看表(当前所在库)
mysql> show tables;
+------------------+
| Tables_in_school |
+------------------+
| student1 |
+------------------+
1 row in set (0.00 sec)向表中插入内容
语法:
insert into 表名(字段1,字段2...) values(字段值列表...);
mysql> insert into student1(id,name,sex,age) values(1,'xingdia','m','26');查看表结构
mysql> desc student1;
+-------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(50) | YES | | NULL | |
| sex | enum('m','f') | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+-------+---------------+------+-----+---------+-------+
4 rows in set (0.00 sec)mysql> select id,name,sex,age from student1; //查询表中所有字段的值
Empty set (0.00 sec)mysql> select * from student1; /查询表中所有字段的值
Empty set (0.00 sec)mysql> select name,age from student1; //查询表中指定字段的值
Empty set (0.00 sec)mysql> insert into student1 values (1,'xingdian','m',33),(2,'alice','m',20),(3,'jack','m',40); //顺序插入
Query OK, 3 rows affected (0.14 sec)
Records: 3 Duplicates: 0 Warnings: 0mysql> insert into student1(name,age) values ('zhuzhu',10),('gougou',20); //只向指定的字段插入值
Query OK, 2 rows affected (0.12 sec)
Records: 2 Duplicates: 0 Warnings: 0表school.student2字段名 数据类型
编号 id int
姓名 name varchar(50)
出生年份 born_year year
生日 birthday date
上课时间 class_time time
注册时间 reg_time datetimemysql> create table student2(id int,name varchar(50), born_year year,birthday date,class_time time,reg_time datetime );
mysql> desc student2;
mysql> insert into student2 values(1,'tom',now(),now(),now(),now());
mysql> insert into student2 values(2,'jack',1982,19821120,123000,20140415162545);表school.student3
id id int
姓名 name varchar(50)
性别 sex enum('male','female')
爱好 hobby set('music','book','game','disc')mysql> create table student3(id int,name varchar(50),sex enum('male','female'),hobby set('music','book','game','disc'));mysql> desc student3;
mysql> show create table student3\G
mysql> insert into student3 values (1,'tom','male','book,game');
mysql> insert into student3 values (2,'jack','male','film');
mysql> select * from student3;二、查看表结构
DESCRIBE查看表结构
DESCRIBE 表名;
DESC 表名;SHOW CREATE TABLE查看表详细结构
SHOW CREATE TABLE 表名;三、表完整性约束
作用:用于保证数据的完整性和一致性约束条件 说明
PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录,不可以为空
FOREIGN KEY (FK) 标识该字段为该表的外键,实现表与表(父表主键/子表1外键/子表2外键)之间的关联
NOT NULL 标识该字段不能为空
UNIQUE KEY (UK) 标识该字段的值是唯一的,可以为空,一个表中可以有多个UNIQUE KEY
AUTO_INCREMENT 标识该字段的值自动增长(整数类型,而且为主键)
DEFAULT 为该字段设置默认值说明:
1. 是否允许为空,默认NULL,可设置NOT NULL,字段不允许为空,必须赋值
2. 字段是否有默认值,缺省的默认值是NULL,如果插入记录时不给字段赋值,此字段使用默认值sex enum('male','female') not null default 'male'age int unsigned NOT NULL default 20 必须为正值(无符号) 不允许为空 默认是20
3. 是否是key主键 primary key外键 forengn keyNOT NULL
表school.student4
mysql> create table school.student4(id int not null,name varchar(50) not null,sex enum('m','f') default 'm' not null,age int unsigned default 18 not null,hobby set('music','disc','dance','book') default 'book,dance');mysql> insert into student4 values(1,'jack','m',20,'book');
Query OK, 1 row affected (0.00 sec)mysql> select * from student4;mysql> insert into student4(id,name) values(2,'robin');
Query OK, 1 row affected (0.00 sec)mysql> insert into student4 values(3,NULL,'m',40,'book');
ERROR 1048 (23000): Column 'name' cannot be null设置唯一约束 UNIQUE
MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。
表company.department1
CREATE TABLE company.department1 (dept_id INT,dept_name VARCHAR(30) UNIQUE,comment VARCHAR(50));
mysql> desc department1;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| dept_id | int(11) | YES | | NULL | |
| dept_name | varchar(30) | YES | UNI | NULL | |
| comment | varchar(50) | YES | | NULL | |
+-----------+-------------+------+-----+---------+-------+设置主键约束 PRIMARY KEY
primary key 字段的值是不允许重复,且不允许不NULL(UNIQUE + NOT NULL)
单列做主键
表school.student6 方法一
mysql> create table student6(id int primary key not null auto_increment,name varchar(50) not null,sex enum('male','female') not null default 'male', age int not null default 18);
Query OK, 0 rows affected (0.00 sec)mysql> insert into student6 values (1,'alice','female',22);mysql> insert into student6(name,sex,age) values('jack','male',19),('tom','male',23);
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0mysql> select * from student6;
+----+-------+------+-----+
| id | name | sex | age |
+----+-------+------+-----+
| 1 | alice | female | 22 |
| 2 | jack | male | 19 |
| 3 | tom | male | 23 |
+----+-------+------+-----+
3 rows in set (0.00 sec)设置字段值增 AUTO_INCREMENT
表company.department3
CREATE TABLE department3 (dept_id INT PRIMARY KEY AUTO_INCREMENT,dept_name VARCHAR(30),comment VARCHAR(50));四、修改表ALTER TABLE
语法:
1. 修改表名ALTER TABLE 表名 RENAME 新表名;2. 增加字段ALTER TABLE 表名ADD 字段名 数据类型 [完整性约束条件…],ADD 字段名 数据类型 [完整性约束条件…];ALTER TABLE 表名ADD 字段名 数据类型 [完整性约束条件…] AFTER 字段名;3. 删除字段ALTER TABLE 表名 DROP 字段名;4. 修改字段ALTER TABLE 表名 MODIFY 字段名 数据类型 [完整性约束条件…];ALTER TABLE 表名 CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…];ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];示例:
1. 修改存储引擎
mysql> alter table service -> engine=innodb; //engine=myisam|memory|....2. 添加字段
mysql> create table student10 (id int);
mysql> alter table student10-> add name varchar(20) not null,-> add age int not null default 22;mysql> alter table student10-> add stu_num int not null after name; //添加name字段之后mysql> alter table student10 add sex enum('male','female') default 'male' first; //添加到最前面3. 删除字段
mysql> alter table student10-> drop sex;mysql> alter table service-> drop mac;4. 修改字段类型modify
mysql> alter table student10-> modify age tinyint not null ; //注意保留原有的约束条件mysql> alter table student10-> modify id int not null primary key ; //修改字段类型、约束、主键5. 增加约束(针对已有的主键增加auto_increment)
mysql> alter table student10 modify id int not null primary key auto_increment; //错误,该字段已经是primary key
ERROR 1068 (42000): Multiple primary key definedmysql> alter table student10 modify id int not null auto_increment;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 06. 增加主键
mysql> alter table student1-> add primary key(id);7. 增加主键和自动增长
mysql> alter table student1-> modify id int not null primary key auto_increment;8. 删除主键[primary key auto_increment]
a. 删除自增约束
mysql> alter table student10 modify id int not null; b. 删除主键
mysql> alter table student10 -> drop primary key;五、复制表
复制表结构+记录 (key不会复制: 主键、外键和索引)复制表结构/记录+表结构,不会将Key复制
mysql> create table new_service select * from service;只复制表结构
mysql> create table new1_service select * from service where 1=2; //条件为假,查不到任何记录可以复制主键,只复制表结构
mysql> create table t4 like employees;六、删除表DROP TABLE 表名;
三:库操作
系统数据库
information_schema: 虚拟库,主要存储了系统中的一些数据库对象的信息,例如用户表信息、列信息、权限信息、字符信息等
performance_schema: 主要存储数据库服务器的性能参数
mysql: 授权库,主要存储系统用户的权限信息
sys: 主要存储数据库服务器的性能参数创建数据库:DDL
1. #mysqladmin -u root -p1 create db1
2. 直接去创建数据库目录并且修改权限
3. mysql> create database xingdian;数据库命名规则:区分大小写唯一性不能使用关键字如 create select不能单独使用数字查看数据库
mysql> show databases;
mysql> show create database xingdian;
mysql> select database(); 查看当前所在的库切换数据库
mysql> use xingdian;
mysql> show tables;删除数据库
DROP DATABASE 数据库名;
行走在数据库上的行癫(二)相关推荐
- 行走在数据库上的行癫(四)
开源数据库SQL实战(四) Author:行癫 GitHub:https://github.com/blackmed/mysql.git 目录: ● 用户管理 ● 备份恢复 一:用户管理 MySQL用 ...
- 行走在数据库上的行癫(一)
开源数据库SQL实战(一) Author:行癫 GitHub:https://github.com/blackmed/mysql.git 目录: ● 数据库简介 ● 数据库部署 ● 数据库基础 ● 数 ...
- 行走在数据库上的行癫(三)
开源数据库SQL实战(三) Author:行癫 GitHub:https://github.com/blackmed/mysql.git 目录: ●数据库查询 ● 多表查询 一:数据库查询 单表查询 ...
- 独家对话行癫:最详解密阿里云顶层设计和底层逻辑
关注ITValue,查看企业级市场最新鲜.最具价值的报道! 阿里云智能总裁张建锋 ITValue注张建锋(花名行癫)的阿里生涯,一直在踩着技术与业务的交界线前进,某种意义上可以看作阿里战略重点转移的 ...
- 对话行癫:解密阿里云顶层设计和底层逻辑
阿里妹导读:几十个问题,万字长文,阿里云新任总裁行癫履新后首次深入讨论阿里云对云计算未来的判断,深度解读未来阿里云生态战略,揭秘阿里技术委员会和阿里中台思想的原生思考. 以下是行癫接受媒体采访的原文. ...
- 为何要把你的SAP运行在Oracle数据库上?
提起SAP和甲骨文这两家公司,真是有很多故事可以聊.抛开二者在应用软件领域的竞争不谈,今天在这里我们只聊数据库. 一家是全球最大的应用软件厂商,一家是数据库技术领域的巨头,因此人们自然而然会想把两家公 ...
- java数据库编程——执行查询操作(二)
[0]README 1) 本文部分文字描述和source code 均转自 core java volume 2 , 旨在理解 java数据库编程--执行查询操作(二) 的基础知识 : 2) 本文和 ...
- mysql数据库中命令行下常用命令的操作(增、删、改、查)和数据类型
连接命令:mysql -h[主机地址] -u[用户名] -p[用户密码] 创建数据库:create database [库名] 显示所有数据库: show databases; 打开数据库:use [ ...
- 对话行癫:CTO 最重要的是判断未来!| 人物志
身兼阿里巴巴集团 CTO.阿里云智能总裁.达摩院院长三职,张建锋(花名行癫)说:「作为 CTO,更多的是对未来需求.技术趋势的看法,两者能不能做有效的结合,最重要的是判断未来业务会变成什么样.」 作者 ...
最新文章
- android 默认开关,android默认设置的开关
- 《数据库原理与应用》(第三版) 第7章 索引和视图 基础 习题参考答案
- 学习了MPLS ×××
- 如何在 C# 平台调用云开发?
- 开始使用gradle
- 【人工智能】命题逻辑测验题题解
- php快速删除,学习猿地-php如何快速删除文章
- AMESim找图形平衡点的方法
- MVC项目开发中那些用到的知识点(Ajax.BeginForm)
- unzip 解压缩文件命令
- 计算机工作组如何共享,如何将计算机加入一个工作组进行共享】
- win10怎么更新显卡驱动_如何禁止win10自动更新显卡驱动
- 【一文学会】vue.js入门到放弃
- 《名贤集》《明贤集》四言集
- MALTAB中 imshow函数出错
- 常用Android代码
- python 安卓模拟点击_python模拟android屏幕高频点击工具
- Android自动电话录音开发过程及问题
- 如何将控制台输出到txt文件,作为日志文件?
- HDU 2549 壮志难酬(easy)
热门文章
- 以太网 传统STP生成树的BPDU介绍、STP端口状态介绍与切换过程,STP详细的工作过程。
- 2.7UiPath Flowchart的介绍和使用
- 2020年主流服务器主板,电脑主板怎么选(2020电脑主板选购指南及检测)
- 电力电子pwm控制技术
- 那些让我印象深刻的bug--03
- reactos回顾总结(一)reactos源码编译
- 教程篇(7.0) 09. FortiGate安全 应用控制 ❀ Fortinet 网络安全专家 NSE 4
- webstorm下载与激活
- linux中dd命令增加内存使用率,Linux 下使用 dd 命令进行硬盘 I/O 性能检测
- bzoj 1106: [POI2007]立方体大作战tet(贪心+树状数组)