####两种方法#### ##第一种## delect from 表名 #DELETE清空表后,返回的结果内有删除的记录条目; #DELETE 工作时是一行一行的删除记录数据的;如果表中有自增长字段,使用DELETE FROM 删除 #所有记录后,再次新添加的记录会从原来最大的记录ID后面继续自增写入记录。 ##第二种## truncate table 表名 #TRUNCATE清空表后,没有返回被删除的条目: TRUNCATE 工作时是将表结构按原样重新建立, #因此在速度上TRUNCATE会比DELETE清空表快;使用TRUNCATE TABLE 清空表内数据后, #ID会从1开始重新记录 ####两种方法的区别就是:两者的新值初始ID不同,并且delect可以回滚 ##下面实验一下两种发发的区别## 例: #先创建一个新表 mysql> create table dlh (id int(4) primary key auto_increment, -> name varchar(10) not null, -> cardid int (18), -> hobby varchar(50)); mysql> show tables; //查看表 +----------------+ | Tables_in_zone | +----------------+ | dlh | | dsj | +----------------+ 2 rows in set (0.00 sec) #插入两条数据 mysql> insert into dlh (name,cardid,hobby) values('wangwu',2424552,'打游戏'); mysql> insert into dlh (name,cardid,hobby) values('zhangsan',2424552,'打游戏'); #查看数据 mysql> select * from dlh; +----+----------+---------+-----------+ | id | name | cardid | hobby | +----+----------+---------+-----------+ | 1 | wangwu | 2424552 | 打游戏 | | 2 | zhangsan | 2424552 | 打游戏 | +----+----------+---------+-----------+ 2 rows in set (0.00 sec) ######此时用第一种方法清空表####### mysql> delete from dlh; Query OK, 2 rows affected (0.00 sec) #查看数据已经没了 mysql> select * from dlh; Empty set (0.00 sec) #再次插入一个新的数据 mysql> insert into dlh (name,cardid,hobby) values('lisi',2424224,'打游戏'); Query OK, 1 row affected (0.00 sec) #此时查看数据 mysql> select * from dlh; +----+------+---------+-----------+ | id | name | cardid | hobby | +----+------+---------+-----------+ | 3 | lisi | 2424224 | 打游戏 | +----+------+---------+-----------+ 1 row in set (0.00 sec) #发现数据初始id是从3开始 ######此时用第二种方法清空表####### mysql> truncate table dlh; #查看数据已经被清空 mysql> select * from dlh; Empty set (0.00 sec) #再次插入一个新的数据 mysql> insert into dlh (name,cardid,hobby) values('lisi',2425252,'打游戏'); mysql> select * from dlh; +----+------+---------+-----------+ | id | name | cardid | hobby | +----+------+---------+-----------+ | 1 | lisi | 2425252 | 打游戏 | +----+------+---------+-----------+ 1 row in set (0.00 sec) #发现数据初始id是从1开始 ##########小结############# truncate table table_name 1)属于DDL 2)不可回滚 3)不可带where 4)表内容删除 5)删除速度快 delete from table_name 1)属于DML 2)可回滚(可恢复) 3)可带where 4)表结构在,表内容要看where执行的情况 5)册删除速度慢,需要逐行删除 #####所以一般在生产环境中都是用delect,而不是truncate
######创建过程###### sql写入 ——> 数据表中 ——> 先把数据保存在内存中 ——> 写入到磁盘 insert into info ——> info这张表,会先复制一份表数据到内存里面,给我们进行修改 ——> 敲完回车之后,确定提交了,才会写入数据表中 ——> 再保存在磁盘里面 他只会保存在内存中,在数据库退出连接之前的所有操作,都是在内存中进行的,不会保存在磁盘里面,退出连接后,临时表会释放掉 ########例######### #创建临时表 mysql> create temporary table linshi ( -> id int(4) zerofill primary key auto_increment, -> name varchar(10) not null, -> cardid int(18) not null unique key, -> hobby varchar(50)); Query OK, 0 rows affected (0.01 sec) #插入一个新的数据 mysql> insert into linshi values (1,'zhangsan',123456,'running'); Query OK, 1 row affected (0.00 sec) #使用show tables却看不见刚才创建的临时表 mysql> show tables; +----------------+ | Tables_in_zone | +----------------+ | dlh | | dsj | +----------------+ 2 rows in set (0.00 sec) #使用sleect 却可以看见 mysql> select * from linshi; +------+----------+--------+---------+ | id | name | cardid | hobby | +------+----------+--------+---------+ | 0001 | zhangsan | 123456 | running | +------+----------+--------+---------+ 1 row in set (0.00 sec) ###退出数据库之后,就看不到临时表了#### #退出数据库 mysql> exit Bye #再重登陆数据库 mysql -uroot -p123456 #此时查看已经没有 linshi 这张临时表了 mysql> select * from linshi; ERROR 1146 (42S02): Table 'zone.linshi' doesn't exist
int(4) zerofill:表示若数值不满4位数,则前面用"0"填充,例0001 auto_increment:表示此字段为自增长字段,即每条记录自动递增1,默认从1开始递增; 自增长字段数据不可以重复;自增长字段必须是主键;如添加的记录数据没有指定此字段的值且 添加失败也会自动递增一次 unique key:表示此字段唯一键约束,此字段数据不可以重复:一张表中只能有一个主键,但是一张表中可以有多个唯一键 not null:表示此字段不允许为NULL
将数据表的数据记录生成到新的表中
克隆表有两种方法
like 方法
create table 方法
#格式 create table 复制的表名 like 被复制的表名 #例 mysql> create table xsj like dsj; #查看 mysql> show tables; +----------------+ | Tables_in_zone | +----------------+ | dlh | | dsj | | xsj | +----------------+ 3 rows in set (0.00 sec) #此时查看xsj这章张表是没有任何数据的 mysql> select * from xsj; Empty set (0.00 sec) #但是表结构是一模一样的 mysql> desc xsj; +--------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+--------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | char(10) | NO | | NULL | | | score | decimal(5,0) | YES | | NULL | | | passwd | char(48) | YES | | | | +--------+--------------+------+-----+---------+-------+ 4 rows in set (0.00 sec) #必须手动把被复制的表(dsj)数据,插入到被复制的表(xsj)里 mysql> insert into xsj select * from dsj; Query OK, 6 rows affected (0.00 sec) Records: 6 Duplicates: 0 Warnings: 0 mysql> select * from xsj; +----+------+-------+---------+ | id | name | score | passwd | +----+------+-------+---------+ | 1 | lz | 80 | 12345 | | 2 | gl | 81 | 12345 | | 3 | cpw | 82 | 12345 | | 4 | zc | 84 | 23112 | | 5 | jzy | 85 | 536464 | | 6 | xf | 86 | 4537856 | +----+------+-------+---------+ 6 rows in set (0.00 sec)
#先查看被复制的表的完整结构,根据此结构创建名字不同结构相同的表,再导入数据 mysql> show create table dsj\G; *************************** 1. row *************************** Table: dsj Create Table: CREATE TABLE "dsj" ( "id" int(11) NOT NULL, "name" char(10) NOT NULL, "score" decimal(5,0) DEFAULT NULL, "passwd" char(48) DEFAULT '', PRIMARY KEY ("id") ) ENGINE=InnoDB DEFAULT CHARSET=utf8 1 row in set (0.00 sec) ERROR: No query specified #克隆 mysql> create table lsj (select * from dsj); Query OK, 6 rows affected (0.00 sec) Records: 6 Duplicates: 0 Warnings: 0 mysql> show tables; +----------------+ | Tables_in_zone | +----------------+ | dlh | | dsj | | lsj | | xsj | +----------------+ 4 rows in set (0.00 sec) mysql> select * from lsj; +----+------+-------+---------+ | id | name | score | passwd | +----+------+-------+---------+ | 1 | lz | 80 | 12345 | | 2 | gl | 81 | 12345 | | 3 | cpw | 82 | 12345 | | 4 | zc | 84 | 23112 | | 5 | jzy | 85 | 536464 | | 6 | xf | 86 | 4537856 | +----+------+-------+---------+ 6 rows in set (0.00 sec)