1. 连接MySQL数据库
- 打开命令行终端程序,windows CMD(首先要在系统环境变量中配置好MySQL的路径,具体方法请自行百度)或者使用cmder软件,或者在Navicat for MySQL中F6打开终端
- 输入命令
mysql -uroot -p
输入mysql的密码回车进入数据库
或者输入mysql -uroot -pxxx
ormysql -uroot -pxxx -A
直接进入数据库。
root
表示你进入数据库使用的用户名,xxx
表示对应的密码,-A
表示切换数据库的时候不会预读取数据库信息,这样能够更快地切换数据库。
2.查看mysql里面都有哪些数据库
show databases;
//显示MySQL/data/目录下所有文件夹
3. 创建数据库test
create database
//注意创建的数据库的名称只能以字母或下划线开头(推荐使用小写字母,windows下不区分大小写,即使以大写字母命名,创建之后还是小写) Linux中区分大小写charset utf8;
4. 删除数据库
drop database test;
//注意,删除数据库会把里面的表也一起删除
5. 切换数据库
use test;
//切换到test数据库
6. 查看本数据库下所有表
show tables;
7. 查看tag表中的所有数据
select * from tag;
8. 查询表结构
desc tag;
//查询tag表的表结构
查看系统字符集设置变量
mysql> show variables like "%character%"; # 查看系统字符集设置变量
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)
9.创建一张表,表名为stu,包含主键,学生姓名,性别,年龄,班级id
create table stu(id int primary key auto_increment,name char(10) not null default '',sex enum('男','女') not null default '男',cid tinyint unsigned not null default 1);
这里的name char(10)表示name这个字段最多有10个字符,不区分汉字字母数字。
注释:建表的注意事项。
- 最好每一张表都设主键,根据表可能要存储的数据量来选择尽可能小的数据类型。主键自增。其他字段能用数值类型的不要用字符串类型。
int
后如果不限定长度,不限定非负,默认为int(11)
;tinyint
默认为tinyint(3)
- 性别字段用
enum
类型,enum
后面的括号内是字符串,要加引号,但是MySQL处理enum
是按数值类型储存的,所以比直接用字符串要快。- 尽量不要有NULL值,
text
类型(文字内容字段的类型比如 BLOB, TEXT, GEOMETRY or JSON)不能有默认值
查看表生成的DDL:(数据定义语言(Data Definition Language))
show create table stu;
10. 往stu表中添加一条数据
insert into stu set name = '小明';
显示如下:
mysql> insert into stu set name = '小明';
Query OK, 1 row affected (0.11 sec)
mysql> select * from stu;
+----+------+-----+-----+
| id | name | sex | cid |
+----+------+-----+-----+
| 1 | 小明 | 男 | 1 |
+----+------+-----+-----+
1 row in set (0.00 sec)
因为主键id自增,sex和cid都有默认值,所以只填写name值,其它项也不会有null值
一次填写多个字段,中间用,
分割,如
mysql> insert into stu set name = '小红',sex = '女',cid = 2;
Query OK, 1 row affected (0.12 sec)
mysql> select * from stu;
+----+------+-----+-----+
| id | name | sex | cid |
+----+------+-----+-----+
| 1 | 小明 | 男 | 1 |
| 2 | 小红 | 女 | 2 |
+----+------+-----+-----+
2 rows in set (0.00 sec)
一次添加多条多个字段可以使用这样的语句
insert into stu (name,sex,cid) value ('小刚','男',1),('Lucy','女',3),('李雷','男',1),('Lily','女',2);
//句中的value
也可以用values
11. 复制表操作
- 复制表结构
create table stu1 like stu;
//按stu
表的结构创建一个stu1
表,
看一下效果:
mysql> desc stu1;
+-------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | char(10) | NO | | | |
| sex | enum('男','女') | NO | | 男 | |
| cid | int(10) unsigned | NO | | 1 | |
+-------+------------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)
mysql> desc stu;
+-------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | char(10) | NO | | | |
| sex | enum('男','女') | NO | | 男 | |
| cid | int(10) unsigned | NO | | 1 | |
+-------+------------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)
两张表具有相同的表结构
- 复制表数据
insert into stu1 select * from stu;
//把表stu
中的数据全部添加到stu1
中 - 同时复制表结构和表数据
create table stu2 select * from stu;
# 这种方法会丢失字段的主键属性和主键自增属性。还需要手动修改添加这些属性(如果原表有的话)
alter table stu2 add primary key(id)
alter table stu2 modify id int unsigned auto_increment;
复制表结构还有2种方法,比如
create table c1 select*from stu limit 0
# 只复制结构,不用数据
create table c2 select*from stu where 1=2
# where 之后跟一个false,或者bool为false的运算式,也不会复制表数据。
同样这两种方法会丢失表的主键和自增属性(不推荐)
推荐方式是分2步,先复制表结构,再复制表数据。或者备份表,再导入。
12. 删除表中的数据
- 删除1条数据
mysql> select * from stu2;
+----+------+-----+-----+
| id | name | sex | cid |
+----+------+-----+-----+
| 1 | 小明 | 男 | 1 |
| 2 | 小红 | 女 | 2 |
| 15 | 小刚 | 男 | 1 |
| 16 | Lucy | 女 | 3 |
| 17 | 李雷 | 男 | 1 |
| 18 | Lily | 女 | 2 |
+----+------+-----+-----+
6 rows in set (0.00 sec)
mysql> delete from stu2 where id = 15;//删除id为15的这条数据
Query OK, 1 row affected (0.13 sec)
###### 8. 有如下表,写出显示各班及格和不及格人数的sql
mysql> select * from stu2;
+----+------+-----+-----+
| id | name | sex | cid |
+----+------+-----+-----+
| 1 | 小明 | 男 | 1 |
| 2 | 小红 | 女 | 2 |
| 16 | Lucy | 女 | 3 |
| 17 | 李雷 | 男 | 1 |
| 18 | Lily | 女 | 2 |
+----+------+-----+-----+
- 一次删除多条数据
mysql> delete from stu2 where id in (1,2,18);
Query OK, 3 rows affected (0.14 sec)
mysql> select * from stu2;
+----+------+-----+-----+
| id | name | sex | cid |
+----+------+-----+-----+
| 16 | Lucy | 女 | 3 |
| 17 | 李雷 | 男 | 1 |
+----+------+-----+-----+
2 rows in set (0.00 sec)
- 如果不加where限定,会删除表中所有数据
mysql> delete from stu2;
Query OK, 2 rows affected (0.12 sec)
mysql> select * from stu2;
Empty set (0.00 sec)
- 清空表数据用
truncate
+表名,如:
mysql> select * from stu1;
+----+------+-----+-----+
| id | name | sex | cid |
+----+------+-----+-----+
| 1 | 小明 | 男 | 1 |
| 2 | 小红 | 女 | 2 |
| 15 | 小刚 | 男 | 1 |
| 16 | Lucy | 女 | 3 |
| 17 | 李雷 | 男 | 1 |
| 18 | Lily | 女 | 2 |
+----+------+-----+-----+
6 rows in set (0.00 sec)
mysql> truncate stu1;//清空表stu1的所有数据
Query OK, 0 rows affected (0.08 sec)
mysql> select * from stu1;
Empty set (0.00 sec)
-
truncate
和delete from+表名
清空表的区别
delete from+表名
清空表数据只是把表中的数据全部删除,还会保留主键自增的位置,比如当前表中最后一条数据的id为20,清空表之后,再添加1条数据,那么新增的那条数据的id为21.而如果用truncate
清空表,新增数据的id会从1开始。
13.修改表操作
- 修改表名
alter table 旧表名 rename 新表名;
mysql> show tables;
+---------------+
| Tables_in_stu |
+---------------+
| stu |
| stu1 |
| stu2 |
+---------------+
3 rows in set (0.00 sec)
mysql> alter table stu rename student;
Query OK, 0 rows affected (0.09 sec)
mysql> show tables;
+---------------+
| Tables_in_stu |
+---------------+
| stu1 |
| stu2 |
| student |
+---------------+
3 rows in set (0.00 sec)
- 修改字段名,用
change
alter table student change name mingzi varchar(20) not null default '';
看例子:
mysql> select * from student;
+----+------+-----+-----+
| id | name | sex | cid |
+----+------+-----+-----+
| 1 | 小明 | 男 | 1 |
| 2 | 小红 | 女 | 2 |
| 15 | 小刚 | 男 | 1 |
| 16 | Lucy | 女 | 3 |
| 17 | 李雷 | 男 | 1 |
| 18 | Lily | 女 | 2 |
+----+------+-----+-----+
6 rows in set (0.00 sec)
mysql> alter table student change name mingzi varchar(20) not null default '';//把name字段改为mingzi,类型从char(10)改为varchar(20),其他不变。注意,改了字段后面一定别忘了加上对应的字段值类型
Query OK, 6 rows affected (0.30 sec)
Records: 6 Duplicates: 0 Warnings: 0
mysql> select * from student;
+----+--------+-----+-----+
| id | mingzi | sex | cid |
+----+--------+-----+-----+
| 1 | 小明 | 男 | 1 |
| 2 | 小红 | 女 | 2 |
| 15 | 小刚 | 男 | 1 |
| 16 | Lucy | 女 | 3 |
| 17 | 李雷 | 男 | 1 |
| 18 | Lily | 女 | 2 |
+----+--------+-----+-----+
6 rows in set (0.00 sec)
mysql> desc student;
+--------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+------------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| mingzi | varchar(20) | NO | | | |
| sex | enum('男','女') | NO | | 男 | |
| cid | int(10) unsigned | NO | | 1 | |
+--------+------------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)
- 修改字段,不改字段名,用
modify
alter table student modify mingzi char(12);
//把mingzi字段的类型改为char(12)
,后面没有写not null default ''
,看看表结构的变化:
mysql> desc student;
+--------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+------------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| mingzi | char(12) | YES | | NULL | |
| sex | enum('男','女') | NO | | 男 | |
| cid | int(10) unsigned | NO | | 1 | |
+--------+------------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)
默认值变成null
了。
- 添加一个字段
addtime
alter table student add addtime int(10) not null default 0;
看一下变化:
mysql> desc student;
+---------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+------------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| mingzi | char(12) | YES | | NULL | |
| sex | enum('男','女') | NO | | 男 | |
| cid | int(10) unsigned | NO | | 1 | |
| addtime | int(10) | NO | | 0 | |
+---------+------------------+------+-----+---------+----------------+
5 rows in set (0.02 sec)
改一下cid字段
mysql> alter table student modify cid tinyint unsigned not null default 1;
Query OK, 6 rows affected (0.28 sec)
Records: 6 Duplicates: 0 Warnings: 0
mysql> desc student;
+---------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+---------------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| mingzi | char(12) | YES | | NULL | |
| sex | enum('男','女') | NO | | 男 | |
| cid | tinyint(3) unsigned | NO | | 1 | |
| addtime | int(10) | NO | | 0 | |
+---------+---------------------+------+-----+---------+----------------+
5 rows in set (0.01 sec)
由此可见tinyint
默认会修改为tinyint(3)
- 删除一个字段:
alter table 表名 drop 要删除的字段名;
比如:
alter table student drop addtime;
- 删除自增
alter table student modify id int not null;
//即修改主键字段的修饰语,去掉auto_increment
,覆盖掉原来的
看效果:
mysql> alter table student modify id int not null;
Query OK, 6 rows affected (0.29 sec)
Records: 6 Duplicates: 0 Warnings: 0
mysql> desc student;
+--------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| mingzi | char(12) | YES | | NULL | |
| sex | enum('男','女') | NO | | 男 | |
| cid | tinyint(3) unsigned | NO | | 1 | |
+--------+---------------------+------+-----+---------+-------+
4 rows in set (0.06 sec)
- 删除主键,
alter table 表名 drop primary key;
注意:删除主键之前必须先要删除主键的自增,否则会报错。
mysql> alter table student drop primary key;
Query OK, 6 rows affected (0.42 sec)
Records: 6 Duplicates: 0 Warnings: 0
mysql> desc student;
+--------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------------------+------+-----+---------+-------+
| id | int(11) | NO | | NULL | |
| mingzi | char(12) | YES | | NULL | |
| sex | enum('男','女') | NO | | 男 | |
| cid | tinyint(3) unsigned | NO | | 1 | |
+--------+---------------------+------+-----+---------+-------+
4 rows in set (0.04 sec)
14. 有如下表,写出显示各班及格和不及格人数的sql
+----+------+-----+-----+-------+
| id | name | sex | cid | score |
+----+------+-----+-----+-------+
| 1 | 小明 | 男 | 1 | 100 |
| 2 | 小红 | 女 | 2 | 30 |
| 3 | 小刚 | 男 | 1 | 66 |
| 4 | Lucy | 女 | 3 | 90 |
| 5 | 李雷 | 男 | 1 | 30 |
| 6 | Lily | 女 | 2 | 77 |
+----+------+-----+-----+-------+
mysql> select cid,sum(if(score>=60,1,0)) 及格,sum(if(score<60,1,0)) 不及格 from student group by cid;
+-----+------+--------+
| cid | 及格 | 不及格 |
+-----+------+--------+
| 1 | 2 | 1 |
| 2 | 1 | 1 |
| 3 | 1 | 0 |
+-----+------+--------+
3 rows in set (0.00 sec)
如果这篇文章对你有帮助,不妨点个赞哦
(˙˘˙)ᓂ--♡