mysql的基本操作,包括表复制,索引,视图,内置函数,预处理语句,事务处理,存储过程,触发器,重排auto_increment.
首先说明,所有操作是在centOS7 64位的linux操作系统下,mysql用的是5.6版本的.并且说明一下,若有什么不记得的命令,用【? contents;】就可以用帮助,查看所有的命令目录了。
表复制
先用【mysql -u root -p】,输入密码,登录mysql。先新建数据库,testmy,然后建立表t1,在t1表中插入数据,然后t2表用like语句拷贝t1的表结构,用insert_select插入t1中的数据。具体的步骤,就是如下
先新建库testmy,
mysql> create database testmy; Query OK, 1 row affected (0.00 sec)
然后切换到testmy下,
mysql> use testmy; Database changed
然后新建t1表,查看一下t1表的信息,
mysql> create table t1(id int unsigned not null auto_increment primary key,name varchar(20)); Query OK, 0 rows affected (0.09 sec)
用show语句查看信息,可以知道数据库引擎是innoDb,字符集是utf8.
mysql> show create table t1; +-------+---------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-------+------------------------------------------------------------------------------------------------------+ | t1 | CREATE TABLE `t1` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 | +-------+---------------------------------------------------------------------------------------------------+ 1 row in set (0.01 sec)
或者用desc查看t1的表结构.
mysql> desc t1; +-------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | name | varchar(20) | YES | | NULL | | +-------+------------------+------+-----+---------+----------------+ 2 rows in set (0.01 sec)
若在最后加上G,就变成列展示。
mysql> desc t1 G; *************************** 1. row *************************** Field: id Type: int(10) unsigned Null: NO Key: PRI Default: NULL Extra: auto_increment *************************** 2. row *************************** Field: name Type: varchar(20) Null: YES Key: Default: NULL Extra: 2 rows in set (0.00 sec) ERROR: No query specified
然后插入数据,多个insert一起插入。
mysql> insert into t1(name) values("user1"),("user2"),("user3"),("user4"); Query OK, 4 rows affected (0.04 sec) Records: 4 Duplicates: 0 Warnings: 0
mysql> select * from t1; +----+-------+ | id | name | +----+-------+ | 1 | user1 | | 2 | user2 | | 3 | user3 | | 4 | user4 | +----+-------+ 4 rows in set (0.00 sec)
接着就是新建t2表了,拷贝t1的表结构,
mysql> create table t2 like t1; Query OK, 0 rows affected (0.03 sec)
用insert_select 插入t1中的数据。
mysql> insert into t2 select * from t1; Query OK, 4 rows affected, 1 warning (0.01 sec) Records: 4 Duplicates: 0 Warnings: 1 mysql> select * from t2; +----+-------+ | id | name | +----+-------+ | 1 | user1 | | 2 | user2 | | 3 | user3 | | 4 | user4 | +----+-------+ 4 rows in set (0.00 sec)
这样t2表就成功复制了。
还可以重命名,将t2表变成t3表。
mysql> show tables; +------------------+ | Tables_in_testmy | +------------------+ | t1 | | t2 | +------------------+ 2 rows in set (0.00 sec) mysql> rename table t2 to t3; Query OK, 0 rows affected (0.01 sec) mysql> show tables; +------------------+ | Tables_in_testmy | +------------------+ | t1 | | t3 | +------------------+ 2 rows in set (0.00 sec)
索引
然后介绍索引,索引就不一一展示效果了。尽管对于索引的增删改查都有各自的语句,但是还有一个alter table作为最普遍的用法,增删改查都可用。
现在对于t1表来说,是有一个主键的索引。而索引包括分为唯一索引和非唯一索引,其中唯一索引,又包括主键索引和其他的唯一索引。
对于索引的一系列操作,从上到下,依次列出.其中1和6都是添加索引,一种是create index...,一种是alter table ...add...。而show index是查看,删除是drop index...或者alter table...drop...。其中删除主键索引比较特殊,由于主键索引设置了自增,而自增必须在主键索引上,所以要删除主键索引,必须先删除自增.而alter table做为修改表的通用操作,alter table...modify...,又可以对表结构进行修改.
1.创建普通索引,"index_name" mysql> create index index_name on t1(name); 2.查询索引在t1表上的索引,有两个索引 mysql> show index from t1; 3.删除t1的普通索引"index_name"索引 mysql> drop index index_name on t1; 4.删除主键索引(先去掉自增,再去掉索引),下面用alter table的方式。 mysql> alter table t1 modify id int unsigned not null; 5.删除主键索引 mysql> alter table t1 drop primary key; 6.添加主键索引 mysql> alter table t1 add primary key(id); 7.添加自增 mysql> alter table t1 modify id int unsigned not null auto_increment;
其中,第2步的效果,是这样的.可以看出t1表中,确实有2个索引,
mysql> show index from t1;
+-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| t1 | 0 | PRIMARY | 1 | id | A | 4 | NULL | NULL | | BTREE | | |
| t1 | 1 | index_name | 1 | name | A | 4 | NULL | NULL | YES | BTREE | | |
+-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
2 rows in set (0.00 sec)
视图
接下来介绍视图的操作.首先用帮助,看看view有什么操作,? view,发现有alter view,修改视图;create view 创建视图,以及drop view 删除视图,而查询视图,和表是一样的,show tables;就能查看所有的表和视图,而select * from 视图名,也可以查询视图中的内容.
mysql> ? view Many help items for your request exist. To make a more specific request, please type 'help <item>', where <item> is one of the following topics: ALTER VIEW CREATE VIEW DROP VIEW
然后实际操作一下
1.创建视图,使用create view...as...
mysql> create view v_t1 as select * from t1 where id>1 and id< 4;
2.查看视图
mysql> select * from v_t1;
3.修改视图
mysql> alter view v_t1 as select * from t1 where id>2 and id <4;
4.修改视图
mysql> drop view v_t1;
内置函数
内置函数有非常多,用?contents,会列出很多目录,然后选择其中的Functions,用命令? Functions,列出各种函数,包括字符串函数,数学函数,日期和时间函数,控制流函数,信息函数,逻辑函数等等.其中,字符串函数? String Functions包括,concat,连接字符串;lcase和ucase(),变小写和大写;rtrim()和ltrim(),去左边/右边空格,两个一起用就是去左右空格;repeat,就是重复字符串指定遍数;replace(),替换;substring(),获取子字符串;space(),生成指定的空格数.
数学函数? Numeric Functions; 包括bin,变二进制,ceiling和floor,向上取整和向下取值,max,min,取最大值/最小值,sqrt,开平方,rand,0~1的随机数.
而日期和时间函数? Date and Time Functions;包括curdate(),当前日期,curtime(),当前时间,now()当前日期和时间,unix_timestamp()将日期变为时间戳,from_unixtime,将时间戳变为日期,week一年中第几周,year年份,datediff日期差.
就只演示字符串,其他的都一样,会看帮助文档就行.
其中字符串函数的演示,用到concat,连接两个字符串,以及space(1),生成一个空格.
mysql> select concat("hello",concat(space(1),"world")); +------------------------------------------+ | concat("hello",concat(space(1),"world")) | +------------------------------------------+ | hello world | +------------------------------------------+ 1 row in set (0.00 sec)
而在表中的使用,可以将表t1中的两个字段id和name的值连接起来.
mysql> select concat(id,concat(":",name)) from t1; +-----------------------------+ | concat(id,concat(":",name)) | +-----------------------------+ | 1:user1 | | 2:user2 | | 3:user3 | | 4:user4 | +-----------------------------+ 4 rows in set (0.00 sec)
若不会用,还是查看帮助,如repeat function,就是重复字符串指定遍数.
mysql> ? repeat function; Name: 'REPEAT FUNCTION' Description: Syntax: REPEAT(str,count) Returns a string consisting of the string str repeated count times. If count is less than 1, returns an empty string. Returns NULL if str or count are NULL. URL: http://dev.mysql.com/doc/refman/5.6/en/string-functions.html Examples: mysql> SELECT REPEAT('MySQL', 3); -> 'MySQLMySQLMySQL
重排auto_increment
剩下还有预处理语句,事务处理,存储过程,触发器和重排auto_increment,其中重排auto_increment比较简单,所以就提前介绍了.
所谓的重排自增的值,就是2种方式,一.另外设置一个值,这个值就作为初始值,从这个值开始自增;二,清空表,然后初始值变成最开始初始值0.
一.使用alter table ... auto_increment,设置为20,则添加从20开始了.
mysql> alter table t1 auto_increment =20; mysql> insert into t1(name) values("user20"); mysql> select * from t1; +----+--------+ | id | name | +----+--------+ | 1 | user1 | | 2 | user2 | | 3 | user3 | | 4 | user4 | | 20 | user20 | +----+--------+ 5 rows in set (0.00 sec)
二.使用truncate...,清空表.注意使用delete from t1,自增值是不会重置的.因为truncate是不仅清空内容,还释放表空间,而delete 不释放表空间.也不要用drop,drop会删了整个表的,不仅清空内容,释放表空间,连表的定义也会删掉,那数据库就没这张表了.
mysql> truncate t1; mysql> insert into t1(name) values("user1"); mysql> select * from t1; +----+-------+ | id | name | +----+-------+ | 1 | user1 | +----+-------+ 1 row in set (0.00 sec)
以上就是9个mysql基础操作中的5个,用命令行敲,让我用了很多从来没有用过的mysql的操作.下篇还有预处理语句,事务处理,存储过程,触发器.