mysql数据剪切到新表_6、MySQL核心DDL语句
命令类型
服务器端命令
获取命令帮助
数据库管理
查看数据库基础变量
SQL组成
创建
修改
删除
表管理
创建
示例一
示例二
示例三
一个常见的创建表结构的示例
表修改
改名
表结构修改
添加/删除字段
修改字段
键管理
索引
索引管理
视图
视图操作
命令类型
服务器端命令
DDL:数据定义语言,主要用于管理数据库组件,例如表、索引、视图、用户、存储过程
CREATE、ALTER、DROP
DML:数据操纵语言,主要用管理表中的数据,实现数据的增、删、改、查;
INSERT, DELETE, UPDATE, SELECT
获取命令帮助
mysql> help CREATE...
mysql>HELP CREATE DATABASE
数据库管理
查看数据库基础变量
数据库的存储引擎类型:SHOW ENGINES;
查看mysql支持的字符集:show character set;
查看指定表的存储引擎:show table status [where Name='tab_name'|like '%...%'];
查看支持的所有字符集:SHOW CHARACTER SET;
查看支持的所有排序规则:SHOW COLLATION;
查看索引:show indexes from tab_name;
SQL组成
DDL:数据库模式定义语言,关键字:create、alter、dorp
DML:数据操纵语言,关键字:Insert、delete、update、alter、dorp
DCL:数据库控制语言 ,关键字:grant、remove
DQL:数据库查询语言,关键字:select
创建
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name;
[DEFAULT] CHARACTER SET [=] charset_name
[DEFAULT] COLLATE [=] collation_name #定义排序规则
# 创建数据库
[(none)]>create database if not exists cce charset = utf8 collate=utf8_general_ci;
# 创建表
[(none)]>show create database cce;
+----------+--------------------------------------------------------------+
| Database | Create Database |
+----------+--------------------------------------------------------------+
| cce | CREATE DATABASE `cce` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+--------------------------------------------------------------+
修改
ALTER {DATABASE | SCHEMA} [db_name] [DEFAULT] CHARACTER SET [=] charset_name [DEFAULT] COLLATE [=] collation_name
# 默认字符集
[(none)]>alter database cce charset=latin1 collate=latin1_swedish_ci;
Query OK, 1 row affected (0.00 sec)
[(none)]>show create database cce;
+----------+----------------------------------------------------------------+
| Database | Create Database |
+----------+----------------------------------------------------------------+
| cce | CREATE DATABASE `cce` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+----------------------------------------------------------------+
1 row in set (0.00 sec)
删除
DROP {DATABASE | SCHEMA} [IF EXISTS] db_name
# 删除库
[(none)]>drop database if exists cce;
Query OK, 0 rows affected (0.00 sec)
表管理
创建
语法一:create table [if not exists] tab_name (col_name data_type|index|key|foreign|unique|primary key) tab_option:engine[=]engine_name、charset[=]charset_name、collate[=]collation_name
语法二:create table [if not exists] tab_name (tab_definition,...)[tab_option] select_statement # 直接创建表,并将查询语句的结果得到的数据插入到新表中;
语法三:create table [if not exists] tab_name {like old_tab_name}# 复制某个存在的表的表结构来创建新表,只有结构没有数据;
示例一
[mysql]>create table if not exists cce(id int auto_increment,name char(32) not null,gender enum('M','G') not null,primary key(id)) engine=innodb default charset=utf8;
Query OK, 0 rows affected (0.41 sec)
[mysql]>desc cce;
+--------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | char(32) | NO | | NULL | |
| gender | enum('M','G') | NO | | NULL | |
+--------+---------------+------+-----+---------+----------------+
示例二
# 创建一个新表
[cce]>create table cce(id int);
Query OK, 0 rows affected (0.48 sec)
# 插入测试数据,可以看出都插入成功了
[cce]>insert into cce values(1),(2),(3);
Query OK, 3 rows affected (0.05 sec)
Records: 3 Duplicates: 0 Warnings: 0
# 基于上面的新表结构和数据再创建一个表
[cce]>create table new_cce select * from cce;
Query OK, 3 rows affected (0.73 sec)
Records: 3 Duplicates: 0 Warnings: 0
# 查看数据
[cce]>select * from new_cce;
+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
+------+
3 rows in set (0.00 sec)
示例三
# 创建一个新的数据库
[(none)]>create database cce;
Query OK, 1 row affected (0.01 sec)
[(none)]>use cce;
Database changed
# 查看要基于创建的表结构
[cce]>desc mysql.cce;
+--------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | char(32) | NO | | NULL | |
| gender | enum('M','G') | NO | | NULL | |
+--------+---------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
# 根据已存在的表创建表
[cce]>create table cce like mysql.cce;
Query OK, 0 rows affected (0.61 sec)
# 查看创建后的表结构
[cce]>desc cce;
+--------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | char(32) | NO | | NULL | |
| gender | enum('M','G') | NO | | NULL | |
+--------+---------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)
一个常见的创建表结构的示例
id使用smallint字段类型来限制并且是无符号不能为空自增主键,name使用char来限制,并且长度只给3测试下,age使用tinyint来给定,因为一般这个字段都用不到太大的值,gender使用枚举类型并且默认值为m不能为空,最后将name字段定义为索引实现加速查询;
[cce]>create table cce(id smallint unsigned not null auto_increment,name char(3) not null,age tinyint unsigned not null,gender enum('m','f') default 'm' not null,index(name),primary key(id)) engine=innodb default charset=utf8;
[cce]>insert into cce(name,age) values ('蔡大爷蔡大爷蔡大爷',18)
ERROR 1406 (22001): Data too long for column 'name' at row 1 # 提示插入的name字段的数据太长,插入失败
表修改
改名
MariaDB [cce]> alter table cce rename to wj;
或者:
MariaDB [cce]> rename table wj to cce;
表结构修改
表修改语法:ALTER [ONLINE | OFFLINE] [IGNORE] TABLE tbl_name [alter_specification [, alter_specification] ...]
添加/删除字段
添加:ADD [COLUMN] col_name data_type [FIRST | AFTER col_name ] #标红的表示在什么之后
MariaDB [cce]> alter table students add class varchar(100) not null after sex;
删除:DROP [COLUMN] col_name
MariaDB [cce]> alter table students drop class;
修改字段
change:可以将老的字段名改成新的字段名,然后还可以将字段定义修改;
语法:CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRST|AFTER col_name]
示例:MariaDB [cce]> alter table cce change new_cce Name varchar(100) not null;
modify:指引修改字段定义的规则;
语法:MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name] #
示例:MariaDB [cce]> alter table cce modify name varchar(100) not null;
# 字段相关
[cce]>desc cce;
+--------+----------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+----------------------+------+-----+---------+----------------+
| id | smallint(5) unsigned | NO | PRI | NULL | auto_increment |
| name | char(3) | NO | MUL | NULL | |
| age | tinyint(3) unsigned | NO | | NULL | |
| gender | enum('m','f') | NO | | m | |
+--------+----------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
# 新增字段,在指定字段后面新增after,使用first无法在指定字段前面增加
[cce]>alter table cce add city char(32) not null after age;
Query OK, 0 rows affected (1.38 sec)
Records: 0 Duplicates: 0 Warnings: 0
# 查看新增之后的结构
[cce]>desc cce;
+--------+----------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+----------------------+------+-----+---------+----------------+
| id | smallint(5) unsigned | NO | PRI | NULL | auto_increment |
| name | char(3) | NO | MUL | NULL | |
| age | tinyint(3) unsigned | NO | | NULL | |
| city | char(32) | NO | | NULL | |
| gender | enum('m','f') | NO | | m | |
+--------+----------------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
键管理
示例:MariaDB [cce]> alter table students add primary key(name,id);
删除:
主键:DROP PRIMARY KEY
外键:DROP FOREIGN KEY fk_symbol
示例:MariaDB [cce]> alter table students drop primary key;
直接创建表,并将查询语句的结果插入到新创建的表中;
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
[(create_definition,...)]
[table_options]
[partition_options]
select_statement
示例:
查看表的信息:
MariaDB [cce]> show table status where Name='test'G
修改引擎:MariaDB [cce]> alter table cce engine='InnoDB';
复制某存在的表的结构来创建新的空表;
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
{ LIKE old_tbl_name | (LIKE old_tbl_name) }
示例:
索引
MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索引包含多个列。创建索引时,你需要确保该索引是应用在 SQL 查询语句的条件(一般作为 WHERE 子句的条件)。
实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。上面都在说使用索引的好处,但过多的使用索引将会造成滥用。因此索引也会有它的缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。建立索引会占用磁盘空间的索引文件。
索引管理
索引是特殊的数据结构;
索引:要有索引名称;
查看索引信息:mysql> SHOW INDEXES FROM tbl_name;
创建:CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name [BTREE|HASH] ON tbl_name (col1, col2,,...)
示例:
MariaDB [cce]> create index index_name on students(class,sex);
MariaDB [cce]> show index from students;
删除:DROP INDEX index_name ON tbl_name
示例:MariaDB [cce]> drop index index_name on students;
新增:MariaDB [cce]> alter table cce add index(age);
总体创建示例:
MariaDB [cce]>create table if not exists cce (id smallint unsigned not null auto_increment primary key,name varchar(100)not null,age tinyint unsigned not null,gender enum('f','m') default 'm',index(name));
# 构建联合索引
[cce]>alter table cce add index(name,age);
Query OK, 0 rows affected (0.47 sec)
Records: 0 Duplicates: 0 Warnings: 0
# 删除联合索引
[cce]>alter table cce drop index name;
# 添加唯一索引
[cce]>alter table cce add unique key(age);
# 删除唯一索引
[cce]>show index from cceG
*************************** 2. row ***************************
Table: cce
Non_unique: 0
Key_name: age
Seq_in_index: 1
Column_name: age
Collation: A
Cardinality: 1
Sub_part: NULL
Packed: NULL
Null:
Index_type: BTREE
Comment:
Index_comment:
[cce]>alter table cce drop index age;
Query OK, 0 rows affected (0.32 sec)
Records: 0 Duplicates: 0 Warnings: 0
# 添加主键索引
[cce]>alter table cce add primary key(id);
Query OK, 0 rows affected (0.32 sec)
Records: 0 Duplicates: 0 Warnings: 0
# 删除主键索引使用modify
视图
视图:例如公司有一个员工信息表,它从存储了各个员工的性别年龄姓名工资等信息,假如说其他人想查找我们的公司员工的所有档案,但是我们不期望能看到工资这一段,我们该如何操作呢?我们可以在这个表中建立一个虚表这个表当中包含了除工资以外的其他信息,而且我们直接告诉他你去查这张虚表就行了。所以就无法看到我们的视图;
关系型数据库中的数据是由一张一张的二维关系表所组成,简单的单表查询只需要遍历一个表,而复杂的多表查询需要将多个表连接起来进行查询任务。对于复杂的查询事件,每次查询都需要编写MySQL代码效率低下。为了解决这个问题,数据库提供了视图(view)功能;
视图实际就是一串存储下来的select语句,删除视图不会影响原来的表,通畅都是用来展示使用的;
视图操作
虚表:存储下来的SELECT语句;
创建:CREATE VIEW view_name [(column_list)] AS select_statemen
修改:ALTER VIEW view_name [(column_list)] AS select_statement
删除:DROP VIEW [IF EXISTS] view_name [, view_name] ...
[cce]>show tables;
+---------------+
| Tables_in_cce |
+---------------+
| cce |
+---------------+
1 row in set (0.01 sec)
[cce]>select * from cce;
+----+------+------+--------+
| id | name | ages | gender |
+----+------+------+--------+
| 1 | cce | 30 | m |
| 2 | cfj | 10 | f |
| 3 | csw | 40 | m |
| 4 | dxf | 39 | f |
+----+------+------+--------+
4 rows in set (0.00 sec)
[cce]>create view view_cce as select name,gender from cce where id > 2;
Query OK, 0 rows affected (0.09 sec)
[cce]>show tables;
+---------------+
| Tables_in_cce |
+---------------+
| cce |
| view_cce |
+---------------+
2 rows in set (0.00 sec)
[cce]>select * from view_cce;
+------+--------+
| name | gender |
+------+--------+
| csw | m |
| dxf | f |
+------+--------+
2 rows in set (0.01 sec)
创建示例
修改示例
mysql数据剪切到新表_6、MySQL核心DDL语句相关推荐
- SQL查询数据并插入新表
SQL查询数据并插入新表 --如果接受数据导入的表已经存在 insert into 表 select * from tablename--如果导入数据并生成表 select * into 表 from ...
- 空间mysql数据还原_mysql通过表空间来恢复或者传递数据
mysql的备份工具通常有 mysqldump ,mysqlpump(5.7后新特性)等备份工具,这里我们可以尝试使用表空间进行传递 方式是:拷贝数据文件+拷贝表空间 对应innodb引擎就是 i ...
- MySQL数据查询之多表查询
多表查询 多表联合查询 #创建部门 CREATE TABLE IF NOT EXISTS dept (did int not null auto_increment PRIMARY KEY,dname ...
- 清除mysql数据碎片_MySQL 清除表空间碎片方法总结
mysql数据库会生成空间碎片了,这些空间碎片对于我们来讲影响不大但如果空间碎片多了会导致mysql查询缓存了,下面一起来看MySQL 清除表空间碎片方法吧,具体的如下所示. 碎片产生的原因 (1)表 ...
- mysql 数据转移历史表_mysql 历史数据表迁移方案
当业务运行一段时间后,会出现有些表数据量很大,可能对系统性能产生不良的影响,常见的如订单表.登录log表等,这些数据很有时效性,比如我们一般很少去查上个月的订单,最多也就是报表统计会涉及到. 在我们的 ...
- 问题分析探讨 -- 大约有700W数据的表,把当天的10W数据select导入新表,整个原来的表就锁死...
Sun shine 16:15:55帅哥 我有个手机表 大约有700百数据,,每天新增 大约五万,并且新也有update 大约10万 然后 我每晚 把当天的数据select 导入一个新表中的时候 ...
- doctor mysql数据导入_线上环境mysql主从同步的搭建过程
之前搭建过一套主从同步的mysql集群,但是是基于新数据库,而这次线上环境要升级成主从同步的集群,记录一下升级过程和中间遇到的各种问题. 由于是直接对线上数据库进行修改,因此要保证对线上环境造成尽量小 ...
- 问题分析探讨 --大约有700W数据的表,把当天的10W数据select导入新表,整个原来的表就锁死
Sun shine 16:15:55 帅哥 我有个手机表 大约有700百数据,,每天新增 大约五万,并且新也有update 大约10万 然后 我每晚 把当天的数据select 导入一个新表中的时 ...
- mysql数据恢复工具_mysql文件恢复软件|Mysql数据库修复工具(Recovery for MySQL)下载 V2.7.22255.1 官方版 - 比克尔下载...
Recovery for MySQL是一款Mysql数据库修复工具,也可以用来恢复mysql文件,支持3.x.4.x.5.x等多个版本,支持myd和myi文件,它可以将检索到的数据保存至SQL脚本中, ...
最新文章
- iSCSI存储技术全攻略
- 分布式计算Hadoop系列之如何Eclipse中构建Hadoop项目
- 目测这个APP要火啦,只有一个功能就要干倒小咖秀?
- Edge好用么?几条你不知道的Edge小技巧
- python爬虫 入门+进阶_python爬虫入门到进阶(三)
- 几个经典的递归小程序
- C语言常见例题源代码
- RPA机器人如何通过Usb Server远程连U盾
- 群晖 VMM虚拟机安装openwrt软路由做单臂旁路由
- 杭州电子科技大学考研计算机科学与技术,杭州电子科技大学考研好考吗
- 帘卷秋声,雁过寒楼。落烟华,满清秋。浣一溪瘦月
- tyvj 2053 [Nescafé29]穿越七色虹
- linux安装压缩文件的工具,Linux上安装rar解压工具
- Win10没有蓝牙功能怎么办 win10蓝牙图标不见了怎么办
- oracle apex 日志,Oracle Apex 调试技巧
- 大数据开发工程师目录
- ssh 修改超时时间
- 我用ubuntu——linux路上搞qq,及,其他
- 深度学习研究理解:OverFeat:Integrated Recognition, Localization and Detection using Convolutional Networks
- 20出头的人该怎么护肤?
热门文章
- php基础教程 第五步 逻辑控制
- Java实验二猜数字游戏,JAVA-第2周实验-猜数字游戏
- 基于文本知识库的强化学习技术——Learning to Win by Reading Manuals in a Monte-Carlo Framework
- python连接linux堡垒机_利用Python Paramiko开发linux堡垒机
- python导入自定义模块_Python3 导入自定义的包
- 16岁上大学,25岁博士毕业,她还是南大医学院最年轻的博导!
- ​如何在图书馆收获一段爱情?​
- 年轻人也太禁不起诱惑了吧?
- 炸了!中国学者首次被Science撤稿,与之前首次被Nature撤稿的教授来自同一所大学……...
- 自律的程度,决定你人生的高度