vlambda博客
学习文章列表

【9】MySql图形可视化界面与基础查询

你正在阅读

瓦尔登小柴胡

目录

数据库的基本操作

mysql数据类型

表的基本操作

使用navicat可视化界面

数据库的基本操作

数据库基础

1、系统数据库

information_schema:存储系统中的一些数据库对象信息,如用户表信息、列信息、权限信息、字符集信息和分区信息等。

performance_schema:存储数据库服务器性能参数

mysql:存储系统的用户权限信息

test: mysql自动创建的测试数据库,任何用户都可以使用

注:除test之外的库都不能随便删除

2、用户数据库

用户自己创建的数据库

进入数据库

在cmd命令框里面输入mysql,或者net start MySQL57

连接数据库

mysql -uroot -proot   (-uroot指用户名    -proot指密码)

【9】MySql图形可视化界面与基础查询

新建数据库(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; #查看所有数据库

【9】MySql图形可视化界面与基础查询

use huhu1;#进入数据库

【9】MySql图形可视化界面与基础查询

显示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 快速查看所有的类型。

整数类型

【9】MySql图形可视化界面与基础查询

浮点数、位类型

【9】MySql图形可视化界面与基础查询

时间和日期

【9】MySql图形可视化界面与基础查询

字符串类型

char系列字符串

【9】MySql图形可视化界面与基础查询

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:瓦尔登小柴胡
图文编辑:瓦尔登小柴胡