目录
1.数据库的基本操作
(1)创建数据库
create database NAME; //这里我创建一个名字为 school的数据库
mysql> create database school;
Query OK, 1 row affected (0.35 sec)
(2)选择数据库
use NAME; //选择数据库school
mysql> use school;
Database changed
(3)删除数据库
drop database NAME; //删除刚刚创建的数据库 school
mysql> drop database school;
Query OK, 0 rows affected (0.39 sec)
为了方便后面的操作,我再重新创建数据库school
(4)对数据库的修改
导出所有数据,新建一个数据库,导入数据,删除旧数据。
2.数据表的基本操作
(1)创建数据表
create table NAME(
value1 数据类型1,
value2 数据类型2,
value3 数据类型3,
.
.
.
valuen 数据类型n
);
mysql> create table guy(
-> id char(3),
-> name varchar(20),
-> age int(2),
-> gpa double(3,2)
-> );
Query OK, 0 rows affected (0.61 sec)
(2)查询数据表
- 查询数据库中的所有表
show tables; //查看改数据库中的所有数据表
mysql> show tables;
+------------------+
| Tables_in_school |
+------------------+
| guy |
+------------------+
1 row in set (0.00 sec)
2. 查询数据库中某表的数据z及其性质
describe 表名; //可简化为 desc NAME;
mysql> desc guy;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | char(3) | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
| age | int(2) | YES | | NULL | |
| gpa | double(3,2) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
(3)删除数据表
drop table 表名;
mysql> drop table guy;
Query OK, 0 rows affected (0.65 sec)
为了方便后面的操作,我重新生成一个数据表 guy 同上
(4)对数据表的修改
1.改表名
alter table oldNAME rename to newNAME;
此处我将数据表名字guy改为student。
mysql> alter table guy rename to student;
Query OK, 0 rows affected (0.58 sec)
mysql> show tables;
+------------------+
| Tables_in_school |
+------------------+
| student |
+------------------+
1 row in set (0.00 sec)
2.改数据名字
alter table 表名 change 旧数据名 新数据名 新数据类型;
将数据id修改为number并修改其数据类型为char(4)。
mysql> alter table student change id number char(4);
Query OK, 0 rows affected (1.15 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc student;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| number | char(4) | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
| age | int(2) | YES | | NULL | |
| gpa | double(3,2) | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
3.改数据类型
alter table 表名 modify 数据名 数据类型;
mysql> alter table student modify number char(3);
Query OK, 0 rows affected (1.09 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc student;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| number | char(3) | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
| age | int(2) | YES | | NULL | |
| gpa | double(3,2) | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
4.改数据位置
(1)alter table 表名 modify 数据1 数据1的数据类型 first | after 数据2;
(将数据1的位置放到第一或者放到数据二的后面)
一.first的用法
把数据类型为 varchar(20) 的 name 放到第一个位置;
mysql> alter table student modify name varchar(20) first;
Query OK, 0 rows affected (0.87 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc student;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| name | varchar(20) | YES | | NULL | |
| number | char(3) | YES | | NULL | |
| age | int(2) | YES | | NULL | |
| gpa | double(3,2) | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
二.after的用法
将数据类型为 char(3) 的number 放到name后面。
mysql> alter table student modify number char(3) after name;
Query OK, 0 rows affected (0.37 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc student;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| name | varchar(20) | YES | | NULL | |
| number | char(3) | YES | | NULL | |
| age | int(2) | YES | | NULL | |
| gpa | double(3,2) | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
(2)alter table 表名 change 数据1 数据 2 数据1的数据类型 first | after 数据3;
将数据二覆盖掉数据一,再排在第一(first)的位置或者数据三的后面
这里将数据一二设成一个值就可以达到想要的效果了。
mysql> alter table student change number number char(3) after age;
Query OK, 0 rows affected (1.09 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc student;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| name | varchar(20) | YES | | NULL | |
| age | int(2) | YES | | NULL | |
| number | char(3) | YES | | NULL | |
| gpa | double(3,2) | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
3.数据的基本操作
(1)增加数据
1.1次增加数据表的1个对象
insert into 表名(数据名1,数据名2,数据名3,...)values(数据1,数据2,数据3,...); //注意values前面没有逗号
mysql> insert into student(name,age,number,gpa)values('tom',21,'101',3.45);
Query OK, 1 row affected (0.32 sec)
mysql> select *from student;
+------+------+--------+------+
| name | age | number | gpa |
+------+------+--------+------+
| tom | 21 | 101 | 3.45 |
+------+------+--------+------+
1 row in set (0.00 sec)
2.1次添加多组对象
insert into 表名(数据名1,数据名2,数据名3...) values(数据1,数据2,数据3...),(数据1,数据2,数据3...)...;
//(注意多个数据之间是有逗号的啊)
mysql> insert into student(name,age,number,gpa)values('mike',18,'102',2.59),('nancy',20,'103',3.03);
Query OK, 2 rows affected (0.36 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select *from student;
+-------+------+--------+------+
| name | age | number | gpa |
+-------+------+--------+------+
| tom | 21 | 101 | 3.45 |
| mike | 18 | 102 | 2.59 |
| nancy | 20 | 103 | 3.03 |
+-------+------+--------+------+
3 rows in set (0.00 sec)
3. 不声明数据名插入数据
insert into 表名 values(数据1,数据2,数据3...); //缺点,必须输入一个对象的所有数据种类;
他可以输入多个对象,也可以输入单个对象。
mysql> insert into student values('michael',19,'104',3.57);
Query OK, 1 row affected (0.40 sec)
mysql> select *from student;
+---------+------+--------+------+
| name | age | number | gpa |
+---------+------+--------+------+
| tom | 21 | 101 | 3.45 |
| mike | 18 | 102 | 2.59 |
| nancy | 20 | 103 | 3.03 |
| michael | 19 | 104 | 3.57 |
+---------+------+--------+------+
4 rows in set (0.00 sec)
mysql> insert into student values('jerry',20,'105',2.38),('rose',19,'106',3.77);
Query OK, 2 rows affected (0.35 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select *from student;
+---------+------+--------+------+
| name | age | number | gpa |
+---------+------+--------+------+
| tom | 21 | 101 | 3.45 |
| mike | 18 | 102 | 2.59 |
| nancy | 20 | 103 | 3.03 |
| michael | 19 | 104 | 3.57 |
| jerry | 20 | 105 | 2.38 |
| rose | 19 | 106 | 3.77 |
+---------+------+--------+------+
6 rows in set (0.00 sec)
(2)查询数据
1.查找表内的所有数据
select *from 表名;
2.between...and...
select *from 表名 where 数据名 between ...and...;
寻找gpa是3.03到3.57之前(闭区间)
mysql> select *from student where gpa between 3.03 and 3.57;
+---------+------+--------+------+
| name | age | number | gpa |
+---------+------+--------+------+
| tom | 21 | 101 | 3.45 |
| nancy | 20 | 103 | 3.03 |
| michael | 19 | 104 | 3.57 |
+---------+------+--------+------+
3 rows in set (0.00 sec)
3.where
select *from 表名 where 范围;
mysql> select *from student where age=19;
+---------+------+--------+------+
| name | age | number | gpa |
+---------+------+--------+------+
| michael | 19 | 104 | 3.57 |
| rose | 19 | 106 | 3.77 |
+---------+------+--------+------+
2 rows in set (0.00 sec)
4.or
select *from 表名 范围一 or 范围二;
mysql> select *from student where age=19 or age =20;
+---------+------+--------+------+
| name | age | number | gpa |
+---------+------+--------+------+
| nancy | 20 | 103 | 3.03 |
| michael | 19 | 104 | 3.57 |
| jerry | 20 | 105 | 2.38 |
| rose | 19 | 106 | 3.77 |
+---------+------+--------+------+
4 rows in set (0.00 sec)
5.and同 'or'
6.select 数据名 from 表名;
mysql> select age from student;
+------+
| age |
+------+
| 21 |
| 18 |
| 20 |
| 19 |
| 20 |
| 19 |
+------+
6 rows in set (0.00 sec)
7.like
模糊查询,与符号'%' '_'搭配使用
'%':匹配任意长的字符
'_':匹配一个字符
select *from 表名 where 数据名 like 'a%'; //某数据中以a开头的数据
select *from 表名 where 数据名 like 'a%b'; //某数据中以a开头b结尾的数据
select *from 表名 where 数据名 like '_a__'; //某数据中第二个字符为 'a'前面一个字符后面两个字符
mysql> select *from student where name like '%a%';
+---------+------+--------+------+
| name | age | number | gpa |
+---------+------+--------+------+
| nancy | 20 | 103 | 3.03 |
| michael | 19 | 104 | 3.57 |
+---------+------+--------+------+
2 rows in set (0.00 sec)
8.查询表是否为空
select *from 表名 where 数据名 is null;
mysql> select *from student where name is null;
Empty set (0.00 sec)
9.查询表是否为空
select *from 表名 where 数据名 is not null; //有输出
mysql> select *from student where name is not null;
+---------+------+--------+------+
| name | age | number | gpa |
+---------+------+--------+------+
| tom | 21 | 101 | 3.45 |
| mike | 18 | 102 | 2.59 |
| nancy | 20 | 103 | 3.03 |
| michael | 19 | 104 | 3.57 |
| jerry | 20 | 105 | 2.38 |
| rose | 19 | 106 | 3.77 |
+---------+------+--------+------+
6 rows in set (0.00 sec)
10.将查询结果排序
select distinct 数据名 from 表名 order by 数据名; //默认升序
select distinct 数据名 from 表名 order by 数据名 desc; //加desc降序
mysql> select distinct number from student order by number desc;
+--------+
| number |
+--------+
| 106 |
| 105 |
| 104 |
| 103 |
| 102 |
| 101 |
+--------+
6 rows in set (0.00 sec)
(3)修改数据
1.修改一类数据
update 数据名
set 数据名 = xxx; //修改数据
where 范围; //查找数据位置
mysql> update student
-> set gpa = 3.00
-> where gpa < 3;
Query OK, 2 rows affected (0.38 sec)
Rows matched: 2 Changed: 2 Warnings: 0
mysql> select *from student;
+---------+------+--------+------+
| name | age | number | gpa |
+---------+------+--------+------+
| tom | 21 | 101 | 3.45 |
| mike | 18 | 102 | 3.00 |
| nancy | 20 | 103 | 3.03 |
| michael | 19 | 104 | 3.57 |
| jerry | 20 | 105 | 3.00 |
| rose | 19 | 106 | 3.77 |
+---------+------+--------+------+
6 rows in set (0.00 sec)
2.修改多个数据,将某数据全部修改
update 表名
set 数据名 = xxx;
mysql> select *from student;
+---------+------+--------+------+
| name | age | number | gpa |
+---------+------+--------+------+
| tom | 21 | 101 | 4.00 |
| mike | 18 | 102 | 4.00 |
| nancy | 20 | 103 | 4.00 |
| michael | 19 | 104 | 4.00 |
| jerry | 20 | 105 | 4.00 |
| rose | 19 | 106 | 4.00 |
+---------+------+--------+------+
6 rows in set (0.00 sec)
(4)删除数据
delete from 表名 where 范围;
mysql> delete from student where age = 21;
Query OK, 1 row affected (0.40 sec)
mysql> select *from student;
+---------+------+--------+------+
| name | age | number | gpa |
+---------+------+--------+------+
| mike | 18 | 102 | 4.00 |
| nancy | 20 | 103 | 4.00 |
| michael | 19 | 104 | 4.00 |
| jerry | 20 | 105 | 4.00 |
| rose | 19 | 106 | 4.00 |
+---------+------+--------+------+
5 rows in set (0.00 sec)