MySQL数据库基本操作

数据库操作

连接数据库:

1
/Applications/XAMPP/xamppfiles/bin/mysql -uroot -p123456

创建数据库

1
2
mysql> create database uiste charset=utf8;
Query OK, 1 row affected (0.01 sec)

选择数据库

1
2
mysql> use uiste;
Database changed

创建数据表

1
2
3
4
5
6
7
8
mysql> create table uiste_stu(
    ->      id int not null auto_increment primary key,
    ->      name char(10) not null,
    ->      sex char(1) not null default '男',
    ->      age tinyint not null,
    ->      score decimal(3,1)
    ->      );
Query OK, 0 rows affected (0.02 sec)

查看所有表:

1
2
3
4
5
6
7
mysql> show tables;
+-----------------+
| Tables_in_uiste |
+-----------------+
| uiste_stu       |
+-----------------+
1 row in set (0.00 sec)

显示创建表的SQL语句

语法:show create table 表名 [\G];

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql> show create table uiste_stu \G;
*************************** 1. row ***************************
       Table: uiste_stu
Create Table: CREATE TABLE `uiste_stu` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` char(10) NOT NULL,
  `sex` char(1) NOT NULL DEFAULT '男',
  `age` tinyint(4) NOT NULL,
  `score` decimal(3,1) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

ERROR: 
No query specified

删除表

语法:drop table 表1,表2,表3;

1
2
3
4
5
mysql> drop tabel stu;
Query OK, 0 rows affected (0.01 sec)

mysql> show tables;
Empty set (0.00 sec)

数据表操作

显示数据表结构

1
2
3
4
5
6
7
8
9
10
11
mysql> describe uiste_stu;
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int(11)      | NO   | PRI | NULL    | auto_increment |
| name  | char(10)     | NO   |     | NULL    |                |
| sex   | char(1)      | NO   |     | 男      |                |
| age   | tinyint(4)   | NO   |     | NULL    |                |
| score | decimal(3,1) | YES  |     | NULL    |                |
+-------+--------------+------+-----+---------+----------------+
5 rows in set (0.01 sec)

插入数据

语法:insert into 表名 (字段1,字段2) values (值1,值2);

1
2
mysql> insert into uiste_stu (id,name,sex,age,score) values(2,'杜敏',' 女',22,59.9);
Query OK, 1 row affected (0.01 sec)

*插入字段可以和数据库中的字符顺序不一致,但是值需要和字段的顺序一致;

1
insert into uiste_stu (name,id,sex,age,score) values('钟程程',3,'女',23,79.9);

*插入字段是可以省略的,插入的值和数据表中的字段顺序和个数是一致的;

1
insert into uiste_stu values(4,'赵哥','男',45,19.9);

*自动增长的插入

1
insert into uiste_stu values(null,'圆哥','女',18,89.9);

*默认值的插入(default不带分号)

1
insert into uiste_stu values(6,'张宝',default,28,9.9);

修改数据

语法:update 表名 set 字段1=值1,字段2=值2 where 条件;
*将赵哥的性别改为女;

1
2
3
mysql> update uiste_stu set sex='女' where name='赵哥';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

*若不加限定条件,将表中所有字段进行更改;

删除数据

语法:delete from 表名 [where 条件];
*删除id为6的信息

1
mysql> delete from uiste_stu where id=6;

查询数据

语法:select 列名 from 表名 [where 条件] [order by 字段 asc|desc] [limit 起始位置,获取条数];
默认升序:asc 降序:desc
limit 限制:限制取几条数据
*查询所有学生的姓名和性别

1
mysql> select name,sex from uiste_stu;

*查询所有学生的所有字段

1
2
mysql> select id,name,sex,age,score from uiste_stu;
mysql> select * from uiste_stu;

*查询所有男生的信息

1
mysql> select * from uiste_stu where sex='男';

*查询所有分数大于60分的女生

1
mysql> select * from uiste_stu where sex='女' and score>=60;

*查询将所有分数大于60分的学生的信息,按分数从高到低排序

1
mysql> select * from uiste_stu where score>=60 order by score desc;

*查询数据表中的前三条数据

1
mysql> select * from uiste_stu limit 3;

*查询第二条开始往后的三条数据(第一条是0)

1
mysql> select * from uiste_stu limit 1,3;

*查询分数前三名的学生信息

1
mysql> select * from uiste_stu order by score desc limit 3;

*最后查询所有的数据

1
2
3
4
5
6
7
8
9
10
11
12
mysql> select * from uiste_stu;
+----+-----------+-----+-----+-------+
| id | name      | sex | age | score |
+----+-----------+-----+-----+-------+
|  1 | 小兰      | 男  |  25 |  98.7 |
|  2 | 杜敏      | 女  |  22 |  59.9 |
|  3 | 钟程程    | 女  |  23 |  79.9 |
|  4 | 赵哥      | 女  |  45 |  19.9 |
|  5 | 圆哥      | 女  |  18 |  89.9 |
|  6 | 张宝      | 男  |  28 |   9.9 |
+----+-----------+-----+-----+-------+
6 rows in set (0.00 sec)

聚合函数

· sum():求和

1
mysql> select sum(score) from uiste_stu;

· avg():求平均值

1
mysql> select avg(score) from uiste_stu;

· max():求最大值

1
mysql> select max(score) from uiste_stu;

· min():求最小值(不算null)

1
mysql> select min(score) from uiste_stu;

· count():求记录数

1
mysql> select count(*) from uiste_stu;

比较运算符

= 等于和赋值
<> 不等于
· 逻辑运算符
and 与
or 或
not 非

数据库常见问题

创建的数据库已存在

1
ERROR 1007 (HY000): Can't create database 'uiste'; database exists

创建的数据库是一个关键字,解决在名字上加上反引号

1
create database `create`;     反引号可以创建更为复杂的字符和汉字

delete 和 drop 删除表名的区别
delete删除表的内容,表的结构还保留,drop 删除整个表
创建数据库或者数据表必要时进行的判断

1
create database if not exists uiste

一张表只能有一个主键,但是主键可以由多个字段组成,如:

1
2
3
4
5
6
CREATE TABLE `products_description` (
`products_id` int(11) NOT NULL,
`language_id` int(11) NOT NULL default '1',
`products_name` varchar(64) NOT NULL default '',
PRIMARY KEY (`products_id`,`language_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;