mysql创建和删除表

Ansible 发表了文章 • 0 个评论 • 1329 次浏览 • 2015-06-26 19:15 • 来自相关话题

创建表
简单的方式:CREATE TABLE person (
number INT(11),
name VARCHAR(255),
birthday DATE
);或者是CREATE TABLE IF NOT EXISTS person (
number INT(11),
name VARCHAR(255),
birthday DATE
);
查看mysql创建表:> SHOW CREATE table person;

CREATE TABLE `person` (
`number` int(11) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
`birthday` date DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
查看表所有的列:> SHOW FULL COLUMNS from person;
+----------+--------------+-----------------+------+-----+---------+-------+---------------------------------+---------+
| Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment |
+----------+--------------+-----------------+------+-----+---------+-------+---------------------------------+---------+
| number | int(11) | NULL | YES | | NULL | | select,insert,update,references | |
| name | varchar(255) | utf8_general_ci | YES | | NULL | | select,insert,update,references | |
| birthday | date | NULL | YES | | NULL | | select,insert,update,references | |
+----------+--------------+-----------------+------+-----+---------+-------+---------------------------------+---------+
创建临时表CREATE TEMPORARY TABLE temp_person (
number INT(11),
name VARCHAR(255),
birthday DATE
);

在创建表格时,您可以使用TEMPORARY关键词。只有在当前连接情况下,TEMPORARY表才是可见的。当连接关闭时,TEMPORARY表被自动取消。这意味着两个不同的连接可以使用相同的临时表名称,同时两个临时表不会互相冲突,也不与原有的同名的非临时表冲突。(原有的表被隐藏,直到临时表被取消时为止。)您必须拥有CREATE TEMPORARY TABLES权限,才能创建临时表。

如果表已存在,则使用关键词IF NOT EXISTS可以防止发生错误。CREATE TABLE IF NOT EXISTS person2 (
number INT(11),
name VARCHAR(255),
birthday DATE
);

注意,原有表的结构与CREATE TABLE语句中表示的表的结构是否相同,这一点没有验证。注释:如果您在CREATE TABLE...SELECT语句中使用IF NOT EXISTS,则不论表是否已存在,由SELECT部分选择的记录都会被插入

在CREATE TABLE语句的末尾添加一个SELECT语句,在一个表的基础上创建表CREATE TABLE new_tbl SELECT [i] FROM orig_tbl;注意,用SELECT语句创建的列附在表的右侧,而不是覆盖在表上mysql> SELECT [/i] FROM foo;
+---+
| n |
+---+
| 1 |
+---+
mysql> CREATE TABLE bar (m INT) SELECT n FROM foo;
mysql> SELECT * FROM bar;
+------+---+
| m | n |
+------+---+
| NULL | 1 |
+------+---+也可以明确地为一个已生成的列指定类型CREATE TABLE foo (a TINYINT NOT NULL) SELECT b+1 AS a FROM bar;根据其它表的定义(包括在原表中定义的所有的列属性和索引),使用LIKE创建一个空表:CREATE TABLE new_tbl LIKE orig_tbl; 创建一个有主键,唯一索引,普通索引的表:CREATE TABLE `people` (
`peopleid` smallint(6) NOT NULL AUTO_INCREMENT,
`firstname` char(50) NOT NULL,
`lastname` char(50) NOT NULL,
`age` smallint(6) NOT NULL,
`townid` smallint(6) NOT NULL,
PRIMARY KEY (`peopleid`),
UNIQUE KEY `unique_fname_lname`(`firstname`,`lastname`),
KEY `fname_lname_age` (`firstname`,`lastname`,`age`)
) ;其中peopleid是主键,以firstname和lastname两列建立了一个唯一索引,以firstname,lastname,age三列建立了一个普通索引
 
删除表
 DROP TABLE tbl_name;

或者是

DROP TABLE IF EXISTS tbl_name;清空表数据
TRUNCATE TABLE table_name 查看全部
创建表
简单的方式:
CREATE TABLE person (
number INT(11),
name VARCHAR(255),
birthday DATE
);
或者是
CREATE TABLE IF NOT EXISTS person (
number INT(11),
name VARCHAR(255),
birthday DATE
);

查看mysql创建表:
> SHOW CREATE table person;

CREATE TABLE `person` (
`number` int(11) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
`birthday` date DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

查看表所有的列:
> SHOW FULL COLUMNS from person;
+----------+--------------+-----------------+------+-----+---------+-------+---------------------------------+---------+
| Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment |
+----------+--------------+-----------------+------+-----+---------+-------+---------------------------------+---------+
| number | int(11) | NULL | YES | | NULL | | select,insert,update,references | |
| name | varchar(255) | utf8_general_ci | YES | | NULL | | select,insert,update,references | |
| birthday | date | NULL | YES | | NULL | | select,insert,update,references | |
+----------+--------------+-----------------+------+-----+---------+-------+---------------------------------+---------+

创建临时表
CREATE TEMPORARY TABLE temp_person (
number INT(11),
name VARCHAR(255),
birthday DATE
);


在创建表格时,您可以使用TEMPORARY关键词。只有在当前连接情况下,TEMPORARY表才是可见的。当连接关闭时,TEMPORARY表被自动取消。这意味着两个不同的连接可以使用相同的临时表名称,同时两个临时表不会互相冲突,也不与原有的同名的非临时表冲突。(原有的表被隐藏,直到临时表被取消时为止。)您必须拥有CREATE TEMPORARY TABLES权限,才能创建临时表。


如果表已存在,则使用关键词IF NOT EXISTS可以防止发生错误。
CREATE TABLE IF NOT EXISTS person2 (
number INT(11),
name VARCHAR(255),
birthday DATE
);


注意,原有表的结构与CREATE TABLE语句中表示的表的结构是否相同,这一点没有验证。注释:如果您在CREATE TABLE...SELECT语句中使用IF NOT EXISTS,则不论表是否已存在,由SELECT部分选择的记录都会被插入


在CREATE TABLE语句的末尾添加一个SELECT语句,在一个表的基础上创建表
CREATE TABLE new_tbl SELECT [i] FROM orig_tbl;
注意,用SELECT语句创建的列附在表的右侧,而不是覆盖在表上
mysql> SELECT [/i] FROM foo;
+---+
| n |
+---+
| 1 |
+---+
mysql> CREATE TABLE bar (m INT) SELECT n FROM foo;
mysql> SELECT * FROM bar;
+------+---+
| m | n |
+------+---+
| NULL | 1 |
+------+---+
也可以明确地为一个已生成的列指定类型
CREATE TABLE foo (a TINYINT NOT NULL) SELECT b+1 AS a FROM bar;
根据其它表的定义(包括在原表中定义的所有的列属性和索引),使用LIKE创建一个空表:
CREATE TABLE new_tbl LIKE orig_tbl;
 创建一个有主键,唯一索引,普通索引的表:
CREATE TABLE `people` (
`peopleid` smallint(6) NOT NULL AUTO_INCREMENT,
`firstname` char(50) NOT NULL,
`lastname` char(50) NOT NULL,
`age` smallint(6) NOT NULL,
`townid` smallint(6) NOT NULL,
PRIMARY KEY (`peopleid`),
UNIQUE KEY `unique_fname_lname`(`firstname`,`lastname`),
KEY `fname_lname_age` (`firstname`,`lastname`,`age`)
) ;
其中peopleid是主键,以firstname和lastname两列建立了一个唯一索引,以firstname,lastname,age三列建立了一个普通索引
 
删除表
 
DROP TABLE  tbl_name;

或者是

DROP TABLE IF EXISTS tbl_name;
清空表数据
TRUNCATE TABLE table_name

批量删除Redis数据库中的Key

OpenSkill 发表了文章 • 0 个评论 • 1285 次浏览 • 2015-06-14 11:04 • 来自相关话题

批量删除Key
Redis 中有删除单个 Key 的指令 DEL,但好像没有批量删除 Key 的指令,不过我们可以借助 Linux 的 xargs 指令来完成这个动作redis-cli keys "*" | xargs redis-cli del
//如果redis-cli没有设置成系统变量,需要指定redis-cli的完整路径
//如:/opt/redis/redis-cli keys "*" | xargs /opt/redis/redis-cli del
如果要指定 Redis 数据库访问密码,使用下面的命令redis-cli -a password keys "*" | xargs redis-cli -a password del
删除所有Key
删除所有Key,可以使用Redis的flushdb和flushall命令//删除当前数据库中的所有Key
flushdb
//删除所有数据库中的key
flushall
注:keys 指令可以进行模糊匹配,但如果 Key 含空格,就匹配不到了,暂时还没发现好的解决办法。
参考文档:http://stackoverflow.com/questions/5756067/how-to-empty-a-redis-database 查看全部
批量删除Key
Redis 中有删除单个 Key 的指令 DEL,但好像没有批量删除 Key 的指令,不过我们可以借助 Linux 的 xargs 指令来完成这个动作
redis-cli keys "*" | xargs redis-cli del  
//如果redis-cli没有设置成系统变量,需要指定redis-cli的完整路径
//如:/opt/redis/redis-cli keys "*" | xargs /opt/redis/redis-cli del

如果要指定 Redis 数据库访问密码,使用下面的命令
redis-cli -a password keys "*" | xargs redis-cli -a password del  

删除所有Key
删除所有Key,可以使用Redis的flushdb和flushall命令
//删除当前数据库中的所有Key  
flushdb
//删除所有数据库中的key
flushall

注:keys 指令可以进行模糊匹配,但如果 Key 含空格,就匹配不到了,暂时还没发现好的解决办法。
参考文档:http://stackoverflow.com/questions/5756067/how-to-empty-a-redis-database

Redis中key相关主要操作函数

OpenSkill 发表了文章 • 3 个评论 • 1324 次浏览 • 2015-06-13 12:31 • 来自相关话题

总结redis中跟key相关的常用函数
1)keys
语法:keys pattern
解释:查找所有匹配指定模式pattern的key[root@cjlx ~]# redis-cli
redis 127.0.0.1:6379> keys * #所有key
1) "score"
2) "stu"
3) "score1"
4) "dest"
5) "lst.user"
6) "lst.tect"
redis 127.0.0.1:6379> keys scor?
1) "score"
redis 127.0.0.1:6379> keys scor[ee1]
1) "score" 2)randomkey
语法:randomkey 
解释:返回一个随机keyredis 127.0.0.1:6379> randomkey
"score"
redis 127.0.0.1:6379> randomkey
"list.user" 3)exists
语法:exists key
解释:判断一个key是否存在redis 127.0.0.1:6379> exists score #key存在 返回1
(integer) 1
redis 127.0.0.1:6379> exists scorefda #key不存在 返回0
(integer) 0 4)type
语法:type key
解释:返回key所存储的值类型,返回值:none [key不存在],string,list ,set, zset和hashredis 127.0.0.1:6379> type score
zset
redis 127.0.0.1:6379> type lst.user
list 5)expire
语法:expire key seconds
解释:设置key的生存时间,单位是秒,当key过期时,会被自动删除redis 127.0.0.1:6379> expire dest 30
(integer) 1
redis 127.0.0.1:6379> expire dest1 30 # key不存在
(integer) 0 6)ttl
语法: ttl key
解释:得到key能存活时间,如果key不存在或没有设置生存时间时,返回-1redis 127.0.0.1:6379> expire diff 100
(integer) 1
redis 127.0.0.1:6379> ttl diff
(integer) 94
redis 127.0.0.1:6379> ttl diff
(integer) 92
7)persist
语法:persist key
解释:移除给定key的生存时间redis 127.0.0.1:6379> ttl diff
(integer) 28
redis 127.0.0.1:6379> persist diff
(integer) 1
redis 127.0.0.1:6379> ttl diff
(integer) -1 8)rename
语法:rename key newkey
解释:将key改名为newkeyredis 127.0.0.1:6379> smembers diff
1) "zhangsan01"
redis 127.0.0.1:6379> rename diff diff01
OK
redis 127.0.0.1:6379> smembers diff
(empty list or set)
redis 127.0.0.1:6379> smembers diff01
1) "zhangsan01"
redis 127.0.0.1:6379> rename diff diff01
(error) ERR no such key注意:当key和newkey相同或key不存在时,返回错误;当newkey已存在时,rename将覆盖旧值。
 
9)renamenx
语法:renamenx key newkey
解释:当且仅当newkey不存在时,改名keyredis 127.0.0.1:6379> renamenx diff01 stu #stu存在
(integer) 0
redis 127.0.0.1:6379> renamenx diff01 diff #diff不存在
(integer) 1 10)del
语法:del key [key ...]
解释:删除一个或多个keyredis 127.0.0.1:6379> del score1
(integer) 1
redis 127.0.0.1:6379> del union diff aa #key aa 不存在
(integer) 2 11)move
语法:move key db
解释:将key移动到指定dbredis 127.0.0.1:6379> smembers stu #默认0
1) "zhangsan01"
2) "wangwu"
redis 127.0.0.1:6379> move stu 1 #移动到 1
(integer) 1
redis 127.0.0.1:6379> smembers stu
(empty list or set)
redis 127.0.0.1:6379> select 1 #选择db 1
OK
redis 127.0.0.1:6379[1]> smembers stu
1) "zhangsan01"
2) "wangwu"12)sort
语法:sort key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC|DESC] [ALPHA] [STORE destination]
解释:返回或保持给定列表,集合,有序集合key中经过排序的元素redis 127.0.0.1:6379> sort lst.tech limit 0 2 alpha desc #按字符集排序
1) "tec06"
2) "tec05"
redis 127.0.0.1:6379> sort lst.stud
1) "1"
2) "2"
3) "3"
redis 127.0.0.1:6379> sort lst.stud desc
1) "3"
2) "2"
3) "1"
redis 127.0.0.1:6379> keys stu.*
1) "stu.name.2"
2) "stu.name.3"
3) "stu.level.1"
4) "stu.level.2"
5) "stu.level.3"
6) "stu.name.1"
redis 127.0.0.1:6379> sort lst.stud by stu.level.[i] desc get stu.level.[/i] get stu.name.*
1) "3"
2) "admin"
3) "2"
4) "joe"
5) "1"
6) "jim"
redis 127.0.0.1:6379> sort lst.stud by stu.level.[i] asc get stu.name.[/i]
1) "jim"
2) "joe"
3) "admin"sort虽然很“厉害”,但尽量不要让redis服务器来sort大量的数据。可以通过设定阀值减少要sort的数据,或把排序操作向前移,在web服务器或各个应用上来sort。 查看全部
总结redis中跟key相关的常用函数
1)keys
语法:keys pattern
解释:查找所有匹配指定模式pattern的key
[root@cjlx ~]# redis-cli   
redis 127.0.0.1:6379> keys * #所有key
1) "score"
2) "stu"
3) "score1"
4) "dest"
5) "lst.user"
6) "lst.tect"
redis 127.0.0.1:6379> keys scor?
1) "score"
redis 127.0.0.1:6379> keys scor[ee1]
1) "score"
2)randomkey
语法:randomkey 
解释:返回一个随机key
redis 127.0.0.1:6379> randomkey  
"score"
redis 127.0.0.1:6379> randomkey
"list.user"
3)exists
语法:exists key
解释:判断一个key是否存在
redis 127.0.0.1:6379> exists score  #key存在 返回1  
(integer) 1
redis 127.0.0.1:6379> exists scorefda #key不存在 返回0
(integer) 0
4)type
语法:type key
解释:返回key所存储的值类型,返回值:none [key不存在],string,list ,set, zset和hash
redis 127.0.0.1:6379> type score  
zset
redis 127.0.0.1:6379> type lst.user
list
5)expire
语法:expire key seconds
解释:设置key的生存时间,单位是秒,当key过期时,会被自动删除
redis 127.0.0.1:6379> expire dest 30  
(integer) 1
redis 127.0.0.1:6379> expire dest1 30 # key不存在
(integer) 0
6)ttl
语法: ttl key
解释:得到key能存活时间,如果key不存在或没有设置生存时间时,返回-1
redis 127.0.0.1:6379> expire diff 100  
(integer) 1
redis 127.0.0.1:6379> ttl diff
(integer) 94
redis 127.0.0.1:6379> ttl diff
(integer) 92

7)persist
语法:persist key
解释:移除给定key的生存时间
redis 127.0.0.1:6379> ttl diff  
(integer) 28
redis 127.0.0.1:6379> persist diff
(integer) 1
redis 127.0.0.1:6379> ttl diff
(integer) -1
8)rename
语法:rename key newkey
解释:将key改名为newkey
redis 127.0.0.1:6379> smembers diff  
1) "zhangsan01"
redis 127.0.0.1:6379> rename diff diff01
OK
redis 127.0.0.1:6379> smembers diff
(empty list or set)
redis 127.0.0.1:6379> smembers diff01
1) "zhangsan01"
redis 127.0.0.1:6379> rename diff diff01
(error) ERR no such key
注意:当key和newkey相同或key不存在时,返回错误;当newkey已存在时,rename将覆盖旧值。
 
9)renamenx
语法:renamenx key newkey
解释:当且仅当newkey不存在时,改名key
redis 127.0.0.1:6379> renamenx diff01 stu  #stu存在  
(integer) 0
redis 127.0.0.1:6379> renamenx diff01 diff #diff不存在
(integer) 1
10)del
语法:del key [key ...]
解释:删除一个或多个key
redis 127.0.0.1:6379> del score1  
(integer) 1
redis 127.0.0.1:6379> del union diff aa #key aa 不存在
(integer) 2
11)move
语法:move key db
解释:将key移动到指定db
redis 127.0.0.1:6379> smembers stu #默认0  
1) "zhangsan01"
2) "wangwu"
redis 127.0.0.1:6379> move stu 1 #移动到 1
(integer) 1
redis 127.0.0.1:6379> smembers stu
(empty list or set)
redis 127.0.0.1:6379> select 1 #选择db 1
OK
redis 127.0.0.1:6379[1]> smembers stu
1) "zhangsan01"
2) "wangwu"
12)sort
语法:sort key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC|DESC] [ALPHA] [STORE destination]
解释:返回或保持给定列表,集合,有序集合key中经过排序的元素
redis 127.0.0.1:6379> sort lst.tech limit 0 2 alpha desc #按字符集排序  
1) "tec06"
2) "tec05"
redis 127.0.0.1:6379> sort lst.stud
1) "1"
2) "2"
3) "3"
redis 127.0.0.1:6379> sort lst.stud desc
1) "3"
2) "2"
3) "1"
redis 127.0.0.1:6379> keys stu.*
1) "stu.name.2"
2) "stu.name.3"
3) "stu.level.1"
4) "stu.level.2"
5) "stu.level.3"
6) "stu.name.1"
redis 127.0.0.1:6379> sort lst.stud by stu.level.[i] desc get stu.level.[/i] get stu.name.*
1) "3"
2) "admin"
3) "2"
4) "joe"
5) "1"
6) "jim"
redis 127.0.0.1:6379> sort lst.stud by stu.level.[i] asc get stu.name.[/i]
1) "jim"
2) "joe"
3) "admin"
sort虽然很“厉害”,但尽量不要让redis服务器来sort大量的数据。可以通过设定阀值减少要sort的数据,或把排序操作向前移,在web服务器或各个应用上来sort。