查看数据库
语法:show databases 数据库名称
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mydb |
| mysql |
| password |
| performance_schema |
| test |
+--------------------+
6 rows in set (0.00 sec)
上面mydb是我创建的数据库,后面跟大家说怎么创建。先学查看没问题的,因为你不创建,默认都有数据库在里头的。另外,mysql这个库最好别改哦,里面有管理员的账号和密码。
查看当前数据库编码表
语法:show create database 数据库名称
mysql> show create database mydb;
+----------+---------------------------------------------------------------+
| Database | Create Database |
+----------+---------------------------------------------------------------+
| mydb | CREATE DATABASE `mydb` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+---------------------------------------------------------------+
1 row in set (0.04 sec)
从上面的表可以看出这个数据库的格式是utf-8的,但在数据库里头,显示和设置时都不要横杠,直接写utf8。这个要注意一下哈!我们可以在安装的时候设置,也可以在配置文件里设置。
创建数据库
语法:create database 数据库名
mysql> create database sunofbeaches;
Query OK, 1 row affected (0.00 sec)
好的,我们用上面的语句:show databases;查看一下吧,一定要注意,这里这个databases有s哦,多个数据库嘛。
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mydb |
| mysql |
| password |
| performance_schema |
| sunofbeaches |
| test |
+--------------------+
7 rows in set (0.00 sec)
从上面可以看到,多了一个sunofbeaches数据库啦,是吧,所以呢,我们成功地创建了数据库了哈!好的,继续往下吧!
删除数据库
删库跑路
语法:drop database 数据库名
mysql> drop database password;
Query OK, 1 row affected (0.09 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mydb |
| mysql |
| performance_schema |
| sunofbeaches |
| test |
+--------------------+
6 rows in set (0.00 sec)
上面,我把password这个数据库删除了,当然,删除数据库一定要小心。最好这样做,第一请示上面的人,对吧,如果你最大就小心点,看清楚,千万别删除错了,有时候项目多了,或者命名很像,很容易删除错的。第二要备份好数据,这些没得后悔的哦,好吧,注意一下吧!展示出删除后的数据库,的确没有password这个数据库了。说明删除成功的哦!
修改数据库编码
语法:alter database 数据库名 character set 编码表名
mysql> alter database sunofbeaches character set gbk;
Query OK, 1 row affected (0.00 sec)
通过这个语句,我把数据库的编码改成了GBK。
我们再通过上面的语句对这个数据库的编码进行查看一下嘛。
mysql> show create database sunofbeaches;
+--------------+----------------------------------------------------------------------+
| Database | Create Database |
+--------------+----------------------------------------------------------------------+
| sunofbeaches | CREATE DATABASE `sunofbeaches` /*!40100 DEFAULT CHARACTER SET gbk */ |
+--------------+----------------------------------------------------------------------+
1 row in set (0.00 sec)
切换数据库
语法格式:use 数据库名
mysql> use sunofbeaches;
Database changed
查看当前所使用的数据库
语法:select database();
mysql> select database();
+--------------+
| database() |
+--------------+
| sunofbeaches |
+--------------+
1 row in set (0.00 sec)
从这里开始,我们基本上把这个数据库的操作语句搞定了。第一个是展示出数据库,再者就是创建,删除,查看和修改编码表。
那么接下来,我们开始学习这个对数据表的操作了。也是增删改查嘛!
数据表在数据库里头,一个数据库可以有多个数据表。接下来就看看:
- 创建表
- 添加数据
- 查询信息
- 删除表
创建数据表
语法:create table 数据表名(
列名 列名类型(长度) [约束]
列名 列名类型(长度) [约束]
…………………………..
);
举个例子:我们在sunofbeaches数据库下创建一个学生表,然后这个表里头包括:ID号,学生的姓名,年龄,性别。
步骤:进入数据库,或者说使用数据库:use sunofbeaches;
mysql> use sunofbeaches;
Database changed
mysql> create table student(
-> id int,
-> name varchar(50),
-> age int,
-> sex varchar(10)
-> );
Query OK, 0 rows affected (0.13 sec)
然后我们还可以进行查看一下嘛,接下来就是我们查看表结构的语句啦,在上面创建中,并没有加入约束,后面再说约束。
有了数据表,我们可以在这个查看当前数据库下有什么表吧!OK,太简单了,就是句话,哈哈!
查看数据表
从前面这个查看数据库的语句(show databases;)中也可以推测出这个查看数据表的语句。
语法:show tables;
mysql> show tables;
+------------------------+
| Tables_in_sunofbeaches |
+------------------------+
| student |
+------------------------+
1 row in set (0.00 sec)
通过上面这个表,我们可以知道,在这个sunofbeaches这个数据库下,有一张表叫student
查看数据表结构
语法:desc 数据表名
mysql> desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(50) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| sex | varchar(10) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.04 sec)
通过这个语句,我们可以看到呀,这个表的列就建立好了,上面的表解释一下吧,第一列是列名,然后的话,第二列是类型以及长度,后面的是约束。
好吧,我还是画一个图吧,这样大家就一目鸟然啦,嘻嘻!
对数据表结构进行修改 有这样一种情况,我们需要修改列名(id|name|age|sex),又或者要修改他们的长度,或者这个表的编码形式。对了,由于这个控制台的编码表GBK的,而我的数据库的编码格式是UTF-8.
如果要显示中文,我们就需要修改一下这个编码格式啦,可以在配置文件里修改,也可以在这个控制台下修改。后面说吧!
先说对结构的修改。先看语法:
alter table 数据表名 增/删/改/改(add/drop/change/modify)列名 类型(长度) 约束
例子:
A.在我们的student表中添加一项address(地址)
mysql> alter table student add address varchar(200);
Query OK, 2 rows affected (0.23 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> desc student;
+---------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(50) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| sex | varchar(10) | YES | | NULL | |
| address | varchar(200) | YES | | NULL | |
+---------+--------------+------+-----+---------+-------+
5 rows in set (0.01 sec)
B.看到了吗?是不是多了一项呢?是吧,继续来删除项吧!删除sex项
mysql> alter table student drop sex;
Query OK, 2 rows affected (0.26 sec)
Records: 2 Duplicates: 0 Warnings: 0
C.change和这个modify,好马上演示一下:
把列名改了:change
mysql> alter table student change id number int;
Query OK, 2 rows affected (0.23 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> desc student;
+---------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| number | int(11) | YES | | NULL | |
| name | varchar(50) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| address | varchar(200) | YES | | NULL | |
+---------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
改类型、长度、约束:modify
mysql> alter table student modify name varchar(100);
Query OK, 2 rows affected (0.23 sec)
Records: 2 Duplicates: 0 Warnings: 0
这里修改的是name的长度
其他的修改:
删除列
语法:alter table 表名 drop 列名;
例子:删除地址
mysql> alter table student drop address;
Query OK, 2 rows affected (0.23 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> desc student;
+--------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+-------+
| number | int(11) | YES | | NULL | |
| name | varchar(100) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+--------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
改表名:
语法:rename table 旧表名 to 新表名;
例子:把这个student表改成了person表
mysql> rename table student to person;
Query OK, 0 rows affected (0.05 sec)
mysql> show tables;
+------------------------+
| Tables_in_sunofbeaches |
+------------------------+
| person |
+------------------------+
1 row in set (0.00 sec)
给数据表添加数据
但是呢,这表是不是没有内容呀!对吧!接下来我们就添加内容吧!
语法:insert into 数据表名(列名,列名…..) values(值1,值2,值3….);
PS:这里的列明则是上面的我们创建的id、name、age、sex这些,如果在添加值的时候是全添加的话,可以省略(列名,列名…..),直接是insert into 数据表名values(值1,值2,值3….);
mysql> insert into student(id,name,age,sex) values(1,'zhangshan',19,'female');
Query OK, 1 row affected (0.09 sec)
由上格式添加,其实我还可以像PS里说的那样,省略列名添加。好的,我再添加一个吧!
mysql> insert into student values(2,'lisi',22,'male');
Query OK, 1 row affected (0.06 sec)
查看数据表内容
语法:select * from 数据表名;
mysql> select * from student;
+------+-----------+------+--------+
| id | name | age | sex |
+------+-----------+------+--------+
| 1 | zhangshan | 19 | female |
| 2 | lisi | 22 | male |
+------+-----------+------+--------+
2 rows in set (0.00 sec)
这样我们就可以看到这个表子了吧!到这里,我们把创建和添加数据就搞定了吧!
好,继续往下!
查询数据
第一个当然是我们用得最多的语句:select * from表名; 没有条件嘛,所以就全部都列出来啦!
我们可以加个条件比如说:
select * from 表名 where age > 30;
为了演示这个,我添加几条数据吧,如下:
mysql> select * from person;
+--------+-----------+------+
| number | name | age |
+--------+-----------+------+
| 1 | zhangshan | 40 |
| 2 | lisi | 30 |
| 3 | wangwu | 50 |
| 4 | zhaoliu | 10 |
+--------+-----------+------+
4 rows in set (0.00 sec)
例子,我们找出这个大于20岁的人。
mysql> select * from person where age > 20;
+--------+-----------+------+
| number | name | age |
+--------+-----------+------+
| 1 | zhangshan | 40 |
| 2 | lisi | 30 |
| 3 | wangwu | 50 |
+--------+-----------+------+
3 rows in set (0.00 sec)
添加可以指定值是什么,还可以用一些逻辑判断的符号,比如说,大于:> 小于:<
不等于:<>
另外还有这个and or not这几个逻辑词,和与或非一样的效果。但在这个数据库在里用这三个。
比如说我要找出30-50岁之间的人。
mysql> select * from person where age > 30 and age < 50;
+--------+-----------+------+
| number | name | age |
+--------+-----------+------+
| 1 | zhangshan | 40 |
+--------+-----------+------+
1 row in set (0.07 sec)
指定值:比如说,我要找出这个40岁,30岁,10岁的所有人。
in(10,40,50)等同说:10 or 40 or 50
mysql> select * from person where age in(10,40,50);
+--------+-----------+------+
| number | name | age |
+--------+-----------+------+
| 1 | zhangshan | 40 |
| 3 | wangwu | 50 |
| 4 | zhaoliu | 10 |
+--------+-----------+------+
3 rows in set (0.00 sec)
等同于:
mysql> select * from person where age = 10 or age = 40 or age = 50;
+--------+-----------+------+
| number | name | age |
+--------+-----------+------+
| 1 | zhangshan | 40 |
| 3 | wangwu | 50 |
| 4 | zhaoliu | 10 |
+--------+-----------+------+
3 rows in set (0.04 sec)
模糊查找:
语法:select * from 表名 where like(这里模糊的地方可以用百分号表示,用下划线可以占位)
为了演示方便, 我把编码改成这个GBK的,然后添加中文,这样的话大家比较好理解。
mysql> select * from person;
+--------+-----------+------+
| number | name | age |
+--------+-----------+------+
| 1 | zhangshan | 10 |
| 1 | 张三 | 10 |
| 3 | 老张 | 38 |
| 4 | 李四四 | 54 |
| 5 | 张小三 | 23 |
+--------+-----------+------+
5 rows in set (0.00 sec)
好,那我们找出有张字的人。
mysql> select * from person where name like '%张%';
+--------+--------+------+
| number | name | age |
+--------+--------+------+
| 1 | 张三 | 10 |
| 3 | 老张 | 38 |
| 5 | 张小三 | 23 |
+--------+--------+------+
3 rows in set (0.00 sec)
类似的还有张%,如果要找出只有两个字,姓张的可以这样写:张_
mysql> select * from person where name like '张_';
+--------+------+------+
| number | name | age |
+--------+------+------+
| 1 | 张三 | 10 |
+--------+------+------+
1 row in set (0.00 sec)
把这些都说完之后呢,再说一个别名吧,嘻嘻!
当我们在查询多表的时候,可能会这个表的列名会在另外一个表中出现,为了区分,所以可以用起别名的方法来解决这个问题。直接上一个例子吧!
比如说:我现在只要这个person里面的number和这个名字就可以,此时,在数据表中的是number和这个name嘛,我们只要显示这两列,然后的话,名字改成这个ID号和这个名字,OK,开始啦!
mysql> select number ID号,name 名字 from person;
+------+-----------+
| ID号 | 名字 |
+------+-----------+
| 1 | zhangshan |
| 1 | 张三 |
| 3 | 老张 |
| 4 | 李四四 |
| 5 | 张小三 |
+------+-----------+
5 rows in set (0.00 sec)
把别名也搞定了,让我想想,还有什么呢?嘻嘻!这个吧,排序吧,说说排序也挺好的,这里的话就根据这个年龄来排序吧好吗?
语法如下:
select 列名,列名,列名…..from 表名 order by 列名 asc(升序)|desc(降序)
我们来排一下吧!
mysql> select * from person order by age desc;
+--------+-----------+------+
| number | name | age |
+--------+-----------+------+
| 4 | 李四四 | 54 |
| 3 | 老张 | 38 |
| 5 | 张小三 | 23 |
| 1 | zhangshan | 10 |
| 1 | 张三 | 10 |
+--------+-----------+------+
5 rows in set (0.00 sec)
反排一下吧,嘻嘻!
mysql> select * from person order by age asc;
+--------+-----------+------+
| number | name | age |
+--------+-----------+------+
| 1 | zhangshan | 10 |
| 1 | 张三 | 10 |
| 5 | 张小三 | 23 |
| 3 | 老张 | 38 |
| 4 | 李四四 | 54 |
+--------+-----------+------+
5 rows in set (0.00 sec)
修改数据表的内容
语法:update 表名 set 列名=值…[条件];如果没有条件的话,则全部改了。
mysql> select * from person;
+--------+-----------+------+
| number | name | age |
+--------+-----------+------+
| 1 | zhangshan | 40 |
| 2 | lisi | 22 |
+--------+-----------+------+
2 rows in set (0.02 sec)
删除记录(表里的数据)
语法:delete from 表名 [条件];没条件就全删啦!
mysql> delete from person where name = 'lisi';
Query OK, 1 row affected (0.09 sec)
mysql> select * from person;
+--------+-----------+------+
| number | name | age |
+--------+-----------+------+
| 1 | zhangshan | 40 |
+--------+-----------+------+
1 row in set (0.00 sec)
SQL中的函数
函数有什么呢,我们直接调用的时候,就可获取到我们需要的值 啦,函数就像一个加工厂一样。是吧!
OK,看看有那些常用的吧!
最值:max min
平均数:avg
求和:sum
求个数:count
分组:group by
下面就演示一下吧!
那么一个先找出这个最小年龄和最大年龄吧。 例子:把zhangshan的年龄修改成40岁
mysql> select number,name,max(age) from person;
+--------+-----------+----------+
| number | name | max(age) |
+--------+-----------+----------+
| 1 | zhangshan | 54 |
+--------+-----------+----------+
1 row in set (0.00 sec)
找出这个最小年龄的,貌似不给力哦,有两个,只给了我一个,哈哈!
还是我有不会的方法呀?天呀!
mysql> select number,name,min(age) from person;
+--------+-----------+----------+
| number | name | min(age) |
+--------+-----------+----------+
| 1 | zhangshan | 10 |
+--------+-----------+----------+
1 row in set (0.00 sec)
平均数也是一样的啦
mysql> select avg(age) from person;
+----------+
| avg(age) |
+----------+
| 27.0000 |
+----------+
1 row in set (0.00 sec)
!
那我就添加几个一样的数据吧,然后分组,再求个数吧!
mysql> select * from person;
+--------+-----------+------+
| number | name | age |
+--------+-----------+------+
| 1 | zhangshan | 10 |
| 1 | 张三 | 10 |
| 3 | 老张 | 38 |
| 4 | 李四四 | 54 |
| 5 | 张小三 | 23 |
| 5 | lisi | 40 |
| 5 | lisi | 40 |
| 5 | lisi | 40 |
| 5 | lisi | 40 |
| 5 | lisi | 40 |
+--------+-----------+------+
10 rows in set (0.00 sec)
然后的话,我们用这个number来分组。
mysql> select * from person group by number;
+--------+-----------+------+
| number | name | age |
+--------+-----------+------+
| 1 | zhangshan | 10 |
| 3 | 老张 | 38 |
| 4 | 李四四 | 54 |
| 5 | 张小三 | 23 |
+--------+-----------+------+
4 rows in set (0.00 sec)
求个数:统计出这个number=5个用户个数来。
mysql> select count(number) ,name,age from person where number=5;
+---------------+--------+------+
| count(number) | name | age |
+---------------+--------+------+
| 6 | 张小三 | 23 |
+---------------+--------+------+
1 row in set (0.00 sec)
OK,此次扯淡到次结束吧,有什么疑问欢迎到我们的社区里面讨论,谢谢大家!