【9】MySql图形可视化界面与基础查询
你正在阅读
瓦尔登小柴胡
目录
数据库的基本操作
mysql数据类型
表的基本操作
使用navicat可视化界面
数据库的基本操作
数据库基础
1、系统数据库
information_schema:存储系统中的一些数据库对象信息,如用户表信息、列信息、权限信息、字符集信息和分区信息等。
performance_schema:存储数据库服务器性能参数
mysql:存储系统的用户权限信息
test: mysql自动创建的测试数据库,任何用户都可以使用
注:除test之外的库都不能随便删除
2、用户数据库
用户自己创建的数据库
进入数据库
在cmd命令框里面输入mysql,或者net start MySQL57
连接数据库
mysql -uroot -proot (-uroot指用户名 -proot指密码)
新建数据库(sql)
create database name; 记得加最后的分号 (只有这里的name可以修改自定义,其他的都是关键字)
1、name:数据库名(不能和已有的重名)
2、数据库命名规则:字母、数字、下划线、@、#、$符号组成
3、首字母不能是数字和$
4、标识符不能和mysql的保留字相同,可以查看有哪些关键字:https://dev.mysql.com/doc/refman/5.7/en/keywords.html
5、不允许有空格和其他特殊符号
查询和选择数据库
show databases; #查看所有数据库
use huhu1;#进入数据库
显示Database changed,则表示已经进入到该数据库了。
删除数据库
drop database huhu1;#注:删除数据库一定要小心,数据库中的所有数据都会被删除
新建数据库指明编码(windows下不指明编码保存中文容易出错)
1、新建:create database huhu1 charset uft8mb4 collate utf8mb4_general_ci;
查看新建的数据库:mysql> show create database huhu1;
mysql> show create database huhu1;
+----------+-------------------------------------------------------------------+
| Database | Create Database |
+----------+-------------------------------------------------------------------+
| huhu1 | CREATE DATABASE `huhu1` /*!40100 DEFAULT CHARACTER SET utf8mb4 */ |
+----------+-------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql 数据类型
mysql提供了整数类型、浮点数类型、日期和时间类型、字符串类型等,可以通过navicat 快速查看所有的类型。
整数类型
浮点数、位类型
时间和日期
字符串类型
char系列字符串
text系列字符串
char\varchar和text的区别
数据的检索效率是:char>varchar>text
char,必须在括号里定义长度,比如长度为10,无论存储的数据是否达到10个字节都会占去10个字节的空间(查询效率高)
varchar,例如指定了10个字节,则最多只能是占用10个字节,如果存储的数据 没有达到10个字节就不会占据10个字节的空间(查询效率低)
结论:经常变化字段用varchar;知道固定长度的用char,如身份证;超过255字节的只能用varchar或者text;能用varchar的地方不用text;能够用数字类型的尽量选择数字类型,而不用字符串类型,这会降低查询和连接的性能,并会增加存储开销。我是因为引擎在处理查询和连接会逐个比较字符串每一个字符,而对于数字型而言只需比较一次就够了。
表的基本操作
mysql> use huhu1; #进入数据库huhu1
Database changed
mysql> create table user(name varchar(4),age int,birthday datetime); #在数据库huhu1中创建表user
Query OK, 0 rows affected (0.06 sec) #创建成功
mysql> show tables;#查看所有的表
+-----------------+
| Tables_in_huhu1 |
+-----------------+
| user |
+-----------------+
1 row in set (0.00 sec)
mysql> show create table user; #查看建表语句
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------+
| user | CREATE TABLE `user` (
`name` varchar(4) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`birthday` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)
mysql> desc user;#以表的形式查看
+----------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------+------+-----+---------+-------+
| name | varchar(4) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| birthday | datetime | YES | | NULL | |
+----------+------------+------+-----+---------+-------+
3 rows in set (0.01 sec)
mysql> drop table user; #删除表
Query OK, 0 rows affected (0.03 sec)
mysql> show tables;#查看表
Empty set (0.00 sec)#显示了没有表
列属性
列属性有很多:null/not null,dafault,primary key,unique key,auto_icement,comment
空属性
列描述
comment,没有实际意义,专门用来描述字段,根据表创建语句保存。
mysql> create table user(name varchar(4) not null comment"名字",age int,birthday datetime);#创建一个表user
Query OK, 0 rows affected (0.05 sec)
mysql> desc user;#查看表user
+----------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------+------+-----+---------+-------+
| name | varchar(4) | NO | | NULL | |
| age | int(11) | YES | | NULL | |
| birthday | datetime | YES | | NULL | |
+----------+------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
默认值的生效,在数据进行插入的时候,不给数据赋值就是默认值。
mysql> create table user1(name varchar(4) not null comment"名字",age int default 18,birthday datetime);#新建一个表user1
Query OK, 0 rows affected (0.08 sec)
mysql> desc user1;#显示表user1
+----------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------+------+-----+---------+-------+
| name | varchar(4) | NO | | NULL | |
| age | int(11) | YES | | 18 | |
| birthday | datetime | YES | | NULL | |
+----------+------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
主键
primary key,一张表中只能有一个字段可以使用对应的键,用来唯一约束该字段里面的数据,不能重复,这种称这为主键。
添加主键:
#方法1:在创建表的时候,直接在字段之后跟primary key关键字(主键本身不能为空)
mysql> create table user2(id int primary key comment "用户id",name varchar(4) not null comment "名字",age int default 18,birthday datetime);#创建表user2
Query OK, 0 rows affected (0.04 sec)
mysql> desc user2;#查看表user2
+----------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(4) | NO | | NULL | |
| age | int(11) | YES | | 18 | |
| birthday | datetime | YES | | NULL | |
+----------+------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
#优点:非常简单 缺点:只能使用一个字段作为主键
#方法2:在创建表的时候,在所有的字段之后 ,使用primary key (主键字段列表)来创建主键,如果有多个字段作为主键,可以是复合主键。
mysql> create table user3(user_id int comment "用户id",article_id int comment "文章id",add_time datetime comment"收藏时间",primary key(user_id,article_id));#创建表user3
Query OK, 0 rows affected (0.01 sec)
mysql> desc user3;#查看表user3
+------------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+----------+------+-----+---------+-------+
| user_id | int(11) | NO | PRI | NULL | |
| article_id | int(11) | NO | PRI | NULL | |
| add_time | datetime | YES | | NULL | |
+------------+----------+------+-----+---------+-------+
3 rows in set (0.00 sec)
#方法3:当表已经创建好之后,再次追加主键,可以通过修改表字段属性,也可以直接追加alter table 表名 add primary key (字段列表);
mysql> create table user4(user_id int comment "用户id",article_id int comment "文章id",add_time datetime comment"收藏时间");#创建表user4
Query OK, 0 rows affected (0.04 sec)
mysql> alter table user4 add primary key(user_id,article_id);#添加主键
Query OK, 0 rows affected (0.10 sec) #显示添加主键成功
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc user4;# 查看表user4
+------------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+----------+------+-----+---------+-------+
| user_id | int(11) | NO | PRI | NULL | |
| article_id | int(11) | NO | PRI | NULL | |
| add_time | datetime | YES | | NULL | |
+------------+----------+------+-----+---------+-------+
3 rows in set (0.00 sec)
# 删除主键:不代表会删除这两个列,实际上也不会删除已经有的数据,如果要删除列有专门删除列的语法,只会删除约束而已,比如后续插入的数据这个列可以重复等。alter table name drop primary key
mysql> alter table user4 drop primary key;
Query OK, 0 rows affected (0.10 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc user4;
+------------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+----------+------+-----+---------+-------+
| user_id | int(11) | NO | | NULL | |
| article_id | int(11) | NO | | NULL | |
| add_time | datetime | YES | | NULL | |
+------------+----------+------+-----+---------+-------+
3 rows in set (0.00 sec)
唯一值
一张表有很多字段需要具有唯一性。唯一键(unique key)就可以解决该问题,比如用户表的手机号码;唯一键的本质与主键差不多,唯一键默认的允许自动为空,而且可以多个为空。就比如用户注册一开始是邮箱注册的,并没有填写手机号码 ,后期可以自己绑定,所以这个过程中会有大量的用户这个字段为null ,但是绑定的手机号码必须唯一。
添加唯一值 ,unique key,方法和 主键差不多。
自增
当对应的字段不给值,或者说默认值,或者给null 的时候会自动地被系统触发,系统 会从当前字段中已有的最大值再进行+1,得到一个新的不同的字段,通常和主键搭配。自增长的特点:任何一个字段做自增长的前提,自身是一个索引(key栏有值 ),自增长字段通常是整形,一个表中只能有一个自增长。
1、设置自增:
mysql> create table user(id int primary key auto_increment comment "用户id",name varchar(4) not null comment "名字",age int default 18,birthday datetime);# 新建一个表user
Query OK, 0 rows affected (0.05 sec)
mysql> desc user;#显示表user
+----------+------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(4) | NO | | NULL | #是一个自增长 |
| age | int(11) | YES | | 18 | |
| birthday | datetime | YES | | NULL | |
+----------+------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)
自增长如果对相应的字段输入了值,那么自增长会失效,但是下一次还是能够正确的自增长(从最大值 +1)
2、修改自增:alter table user id int auto_imcrement; 自增长如果涉及到字段改变,必须先删除自增长,后增加,一张表中只能有一个自增长。
3、删除自增长:alter table user modify id int;
mysql> alter table user modify id int; #删除自增长
Query OK, 0 rows affected (0.09 sec)#显示删除自增长成功
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc user;#查看表user是否删除了自增长
+----------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(4) | NO | | NULL | |
| age | int(11) | YES | | 18 | |
| birthday | datetime | YES | | NULL | |
+----------+------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
注:删除的数据不会改变下一个自增的id,比如id为6删除不代表6就可用了
建表指明编码
指的是指明使用的是utf8(中文格式)还是别的编码格式,就是存储方式的不同,会有不同的格式,比如说表情包不能用utf8来存储,它的一个字符是三个字节,但表情包需要四个字节。
强调:用utf8mb4更好
mysql> use huhu1;#打开数据库huhu1
Database changed
mysql> create table user1(id int primary key auto_increment comment "用户id",name varchar(4) not null comment "名字",age int default 18,birthday datetime) charset=utf8;#在数据库huhu1中新建一个表user1 注:指明编码为utf8
Query OK, 0 rows affected (0.05 sec)
mysql> show create table user1;#展示建表语句
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
| user1 | CREATE TABLE `user1` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户id',
`name` varchar(4) NOT NULL COMMENT '名字',
`age` int(11) DEFAULT '18',
`birthday` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
克隆另一张表结构
mysql> create table user2 like user1;#克隆表user1建立一个新的表user2
Query OK, 0 rows affected (0.04 sec)
mysql> desc user2; #显示表user2
+----------+------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(4) | NO | | NULL | |
| age | int(11) | YES | | 18 | |
| birthday | datetime | YES | | NULL | |
+----------+------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)
修改表
修改表名
mysql> show tables;#显示所有表
+-----------------+
| Tables_in_huhu1 |
+-----------------+
| user |
| user1 |
| user2 |
+-----------------+
3 rows in set (0.00 sec)
mysql> alter table user1 rename user3;#修改表名将user1修改为user3 也可以alter table `user1` rename `user3`; 英文状态下,单波浪线 当表名和关键字有重复时,用上``就可以表示是一张表名
Query OK, 0 rows affected (0.02 sec)
mysql> show tables;#展示所有表
+-----------------+
| Tables_in_huhu1 |
+-----------------+
| user |
| user2 |
| user3 |
+-----------------+
3 rows in set (0.00 sec)
增加列
mysql> alter table user3 add mobile varchar(11) first;#first 表示放在所有的列之前,可选
Query OK, 0 rows affected (0.08 sec)
Records: 0 Duplicates: 0 Warnings: 0
删除列
mysql> alter table user3 drop mobile;#删除列mobile
Query OK, 0 rows affected (0.07 sec)
Records: 0 Duplicates: 0 Warnings: 0
修改列
mysql> alter table user4 modify age varchar(11);#修改列类型
Query OK, 0 rows affected (0.11 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> alter table user4 change id new_id int;#修改列名,如果是旧类型则只改名,如果是新类型则修改了原来的类型。
Query OK, 0 rows affected (0.10 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc user4;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| new_id | int(11) | NO | PRI | NULL | |
| name | varchar(4) | NO | | NULL | |
| age | varchar(11) | YES | | NULL | |
| birthday | datetime | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
注:pip install -u mycli 安装mycli 是一个工具,可以执行mysql代码,会自动补全等,十分方便。 mycli -uroot -proot;
使用navicat:可视化界面
新建数据库:字符集(utf8mb4) 排序规则(utf8mb4_general_ci)
END
id:瓦尔登小柴胡
图文编辑:瓦尔登小柴胡