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语句的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 斜视做手术的最佳年龄
- 下一篇: 疏通肝经最简单的方法