create命令

1.创建一个普通表
create table tb_1(id int ,name varchar(64));
Query OK, 0 rows affected (0.17 sec
2.创建一个临时表.temporary
create temporary table temp1(sid int,sname varchar(64));
Query OK, 0 rows affected (0.00 sec)
创建成功.
mysql> show tables;
+------------------+
| Tables_in_course |
+------------------+
| course           |
| dept             |
| score            |
| students         |
| students2_tmp    |
| students_temp    |
| teacher          |
+------------------+
7 rows in set (0.00 sec)
但是使用show tables 是无法查看这个表的.
mysql> insert into temp1 values(1,"asda");
Query OK, 1 row affected (0.00 sec)
向临时表中插入数据.
mysql> select * from temp1;
+------+-------+
| sid  | sname |
+------+-------+
|    1 | asda  |
+------+-------+
1 row in set (0.00 sec)
查看数据
    总结:
    但是临时表仅仅对当前连接有效,并且不会显示在show tables中.
    可以用来在当前连接中存储数据.
其他新建连接不仅看不到这张表,更不能向里面插入数据.
3.创建视图
create view 是将某个查询数据的定义爆了下了,一遍随时调用. view本身不存储查询结果,只是一个定义.
mysql> create view v_1 as select * from dept as a inner join students as b on a.id = b.dept_id;
Query OK, 0 rows affected (0.07 sec)
创建一张视图.将所要查询的数据用规则的形式存放到数据库视图中.
mysql> select *from v_1;
+----+------------------+-----+-------+--------+---------+---------------------+
| id | dept_name        | sid | sname | gender | dept_id | brithday            |
+----+------------------+-----+-------+--------+---------+---------------------+
|  1 | Education        |   3 | Bob   | 0      |       1 | 1983-01-01 00:00:00 |
|  2 | Computer Science |   4 | Ruth  | 1      |       2 | 1983-01-01 00:00:00 |
|  2 | Computer Science |   5 | Mike  | 0      |       2 | 1986-01-01 00:00:00 |
|  3 | Mathematics      |   6 | John  | 0      |       3 | 1986-01-01 00:00:00 |
+----+------------------+-----+-------+--------+---------+---------------------+
4 rows in set (0.01 sec)
查询的时候可以直接查询视图即可.4.
视图创建好以后可以理解成一张虚拟的表这张表可以与其他底层表进行关联查询.
但是不能向视图中插入数据.以及修改视图中的内容.
4.查看视图的定义
show create view v_1;
+------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| View | Create View                                                                                                                                                                                                                                                                                                                                     | character_set_client | collation_connection |
+------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| v_1  | CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v_1` AS select `a`.`id` AS `id`,`a`.`dept_name` AS `dept_name`,`b`.`sid` AS `sid`,`b`.`sname` AS `sname`,`b`.`gender` AS `gender`,`b`.`dept_id` AS `dept_id`,`b`.`brithday` AS `brithday` from (`dept` `a` join `students` `b` on((`a`.`id` = `b`.`dept_id`))) | utf8mb4              | utf8mb4_0900_ai_ci   |
+------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
创建视图的时候使用的是 select* 进行视图的创建,但是系统会将* 转换成各个字段的名称.所以在底层表字段增加的时候视图中不会体现出新添加字段的数据.
如果删除一个字段的话那么视图查询就会报错.
mysql> alter table students add  sname2 varchar(64);
Query OK, 0 rows affected (0.15 sec)
Records: 0  Duplicates: 0  Warnings: 0
为表添加一个字段.
mysql> alter table students drop  sname2;
Query OK, 0 rows affected (0.24 sec)
Records: 0  Duplicates: 0  Warnings: 0
删除一个表中的指定字段.
mysql> select * from v_1;
ERROR 1356 (HY000): View 'course.v_1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
当底层表中的某个字段删除后在进行视图查看的时候回出现系统报错.
5.视图中使用order by 进行排序的时候视图中的排序优先级要高于创建视图的时候已经设置好的排序.
6.单一表对应的视图可以进行简单的增删改操作.如果有多张表进行连表查询创建的视图那么就会出现如下报错
mysql> select * from v_1;
+----+------------------+-----+-------+--------+---------+---------------------+--------+
| id | dept_name        | sid | sname | gender | dept_id | brithday            | sname2 |
+----+------------------+-----+-------+--------+---------+---------------------+--------+
|  1 | Education        |   3 | Bob   | 0      |       1 | 1983-01-01 00:00:00 | NULL   |
|  2 | Computer Science |   4 | Ruth  | 1      |       2 | 1983-01-01 00:00:00 | NULL   |
|  2 | Computer Science |   5 | Mike  | 0      |       2 | 1986-01-01 00:00:00 | NULL   |
|  3 | Mathematics      |   6 | John  | 0      |       3 | 1986-01-01 00:00:00 | NULL   |
+----+------------------+-----+-------+--------+---------+---------------------+--------+
4 rows in set (0.00 sec)
使用inner join表关联创建的视图.
mysql> insert into v_1 values(4,"Chinese",7,"Zhang",1,3,"1986-01-01 00:00:00",null);
ERROR 1394 (HY000): Can not insert into join view 'course.v_1' without fields list
插入数据的时候显示插入值超出字段数...
7.创建数据库索引 index
mysql> create index idx_1 on students(sid,sname);
Query OK, 0 rows affected (0.16 sec)
Records: 0  Duplicates: 0  Warnings: 0
在students表的sid,和sname字段上创建一个名字是idx_1的普通索引,
mysql> show create table students;
+----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table    | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
+----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| students | CREATE TABLE `students` (
  `sid` int(11) NOT NULL AUTO_INCREMENT,
  `sname` varchar(64) DEFAULT NULL,
  `gender` varchar(12) DEFAULT NULL,
  `dept_id` int(11) DEFAULT NULL,
  `brithday` datetime DEFAULT NULL,
  `sname2` varchar(32) DEFAULT NULL,
  PRIMARY KEY (`sid`),
  KEY `dept_id` (`dept_id`),
  KEY `idx_1` (`sid`,`sname`),
  CONSTRAINT `students_ibfk_1` FOREIGN KEY (`dept_id`) REFERENCES `dept` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
查看创建的索引,
8.删除表语句
mysql> drop table students2_tmp;
Query OK, 0 rows affected (0.13 sec)
9.删除数据库语句.
mysql> drop database cccc;
Query OK, 0 rows affected (0.10 sec)
10.删除视图
mysql> drop view v_1;
Query OK, 0 rows affected (0.10 sec)
11.表重命名
mysql> rename table students_temp to tmp;
Query OK, 0 rows affected (0.10 sec)
12.在有外键约束的表中更改表明对外键约束没有影响,
mysql> show create table students;
+----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table    | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
+----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| students | CREATE TABLE `students` (
  `sid` int(11) NOT NULL AUTO_INCREMENT,
  `sname` varchar(64) DEFAULT NULL,
  `gender` varchar(12) DEFAULT NULL,
  `dept_id` int(11) DEFAULT NULL,
  `brithday` datetime DEFAULT NULL,
  `sname2` varchar(32) DEFAULT NULL,
  PRIMARY KEY (`sid`),
  KEY `dept_id` (`dept_id`),
  KEY `idx_1` (`sid`,`sname`),
  CONSTRAINT `students_ibfk_1` FOREIGN KEY (`dept_id`) REFERENCES `dept` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
查看创建表
mysql> rename table dept to dept2;
Query OK, 0 rows affected (0.14 sec)
mysql> show create table students;
+----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table    | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
+----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| students | CREATE TABLE `students` (
  `sid` int(11) NOT NULL AUTO_INCREMENT,
  `sname` varchar(64) DEFAULT NULL,
  `gender` varchar(12) DEFAULT NULL,
  `dept_id` int(11) DEFAULT NULL,
  `brithday` datetime DEFAULT NULL,
  `sname2` varchar(32) DEFAULT NULL,
  PRIMARY KEY (`sid`),
  KEY `dept_id` (`dept_id`),
  KEY `idx_1` (`sid`,`sname`),
  CONSTRAINT `students_ibfk_1` FOREIGN KEY (`dept_id`) REFERENCES `dept2` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
13.如果在生产环境中遇到增加字段的情况的话.如果数据量很大的情况一般不要直接在表中添加字段.
在数据库中新创建一张表.表结构参考原有表.
create table students3 like students;
在新表中添加要插入的字段.
mysql> alter table students3 add sname3 varchar(64);
Query OK, 0 rows affected (0.15 sec)
Records: 0  Duplicates: 0  Warnings: 0
查看表结构
mysql> desc students3;
+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| sid      | int(11)     | NO   | PRI | NULL    | auto_increment |
| sname    | varchar(64) | YES  |     | NULL    |                |
| gender   | varchar(12) | YES  |     | NULL    |                |
| dept_id  | int(11)     | YES  | MUL | NULL    |                |
| brithday | datetime    | YES  |     | NULL    |                |
| sname2   | varchar(32) | YES  |     | NULL    |                |
| sname3   | varchar(64) | YES  |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+
7 rows in set (0.00 sec)
14,数据库中增加字段数据迁移
数据迁移,将原来表中的数据插入到新表中.
insert into students3(sid,sname,gender,dept_id,brithday,sname2) select * from students;
Query OK, 4 rows affected (0.12 sec)
Records: 4  Duplicates: 0  Warnings: 0
然后将原有表重命名成students_bak.
mysql> rename table students to students_bak;
Query OK, 0 rows affected (0.18 sec)
mysql> rename table students3 to students;
Query OK, 0 rows affected (0.18 sec)
mysql> select * from students;
+-----+-------+--------+---------+---------------------+--------+--------+
| sid | sname | gender | dept_id | brithday            | sname2 | sname3 |
+-----+-------+--------+---------+---------------------+--------+--------+
|   3 | Bob   | 0      |       1 | 1983-01-01 00:00:00 | NULL   | NULL   |
|   4 | Ruth  | 1      |       2 | 1983-01-01 00:00:00 | NULL   | NULL   |
|   5 | Mike  | 0      |       2 | 1986-01-01 00:00:00 | NULL   | NULL   |
|   6 | John  | 0      |       3 | 1986-01-01 00:00:00 | NULL   | NULL   |
+-----+-------+--------+---------+---------------------+--------+--------+
4 rows in set (0.01 sec)
15.truncate table 清楚数据.
truncate table students_bak;
如果在清除表数据的时候报错外键约束.那么参考临时取消外键约束
我们可以使用
    SET FOREIGN_KEY_CHECKS=0;
来禁用外键约束.
 之后再用
    SET FOREIGN_KEY_CHECKS=1;
来启动外键约束.
 查看当前FOREIGN_KEY_CHECKS的值可用如下命令
    SELECT  @@FOREIGN_KEY_CHECKS;
16.在清空表的时候truncate table的表是无法回滚事务的.
17.使用delete删除一个表是可以rollback的.
首先关闭自动提交
set autocommit = "0";
然后尝试使用delete删除一个表中的数据;
mysql> set foreign_key_checks=0;
Query OK, 0 rows affected (0.00 sec)
关闭外键约束.(之后记得开启)
mysql> delete from students_bak;
Query OK, 4 rows affected (0.00 sec)
mysql> select * from students_bak;
Empty set (0.00 sec)
mysql> rollback;
Query OK, 0 rows affected (0.10 sec)
mysql> select * from students_bak;
+-----+-------+--------+---------+---------------------+--------+
| sid | sname | gender | dept_id | brithday            | sname2 |
+-----+-------+--------+---------+---------------------+--------+
|   3 | Bob   | 0      |       1 | 1983-01-01 00:00:00 | NULL   |
|   4 | Ruth  | 1      |       2 | 1983-01-01 00:00:00 | NULL   |
|   5 | Mike  | 0      |       2 | 1986-01-01 00:00:00 | NULL   |
|   6 | John  | 0      |       3 | 1986-01-01 00:00:00 | NULL   |
+-----+-------+--------+---------+---------------------+--------+
4 rows in set (0.00 sec)
18.alter table增加和删除字段;
mysql> alter table students_bak add sname3 varchar(64);
Query OK, 0 rows affected (0.11 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> alter table students_bak drop sname3;
Query OK, 0 rows affected (0.23 sec 
Records: 0  Duplicates: 0  Warnings: 0
19.在进行表创建的时候.如果要复制另一张表的所有字段和数据要使用两步进行表的创建和数据的导入.
首先创建表结构
create table teacher2 like teacher;
然后插入数据
insert into teacher select * from teacher;

 

posted on 2019-09-24 18:54  DisCover_ry  阅读(331)  评论(0)    收藏  举报