mysql基础(一)
计算机是如何处理数据的?
主要把数据存储在磁盘和内存中。
概念
按照一定的数据结构来存储和管理数据的仓库。
分类
- 关系型数据库(SQL)
存储方式固定,安全。 - 非关系型数据库(NoSQL (Not Only SQL))
存储方式比较灵活,存储数据的效率比较高, 不太安全。
区别
image.png说明
MySQL简介
MySQL是最流行的关系型数据库管理系统之一,由瑞典MySQL AB公司开发,目前属于Oracle公司。MySQL是一种关联数据管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
概念和特点
- 关系型数据库:采用关系模型来组织数据的数据库
- 关系:一张二维表,每个关系都有一个关系名,就是表名
- 模型:行和列(二维),具体指字段跟字段信息
2,常见数据库
数据库类型 | 特性 | 优点 | 缺点 |
---|---|---|---|
关系型数据库SQLite、Oracle、mysql | 1、关系型数据库,是指采用了关系模型来组织数据的数据库;2、关系型数据库的最大特点就是事务的一致性;3、简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。 | 1、容易理解:二维表结构是非常贴近逻辑世界一个概念,关系模型相对网状、层次等其他模型来说更容易理解;2、使用方便:通用的SQL语言使得操作关系型数据库非常方便;3、易于维护:丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大大减低了数据冗余和数据不一致的概率;4、支持SQL,可用于复杂的查询。 | 1、为了维护一致性所付出的巨大代价就是其读写性能比较差;2、固定的表结构;3、高并发读写需求;4、海量数据的高效率读写; |
非关系型数据库MongoDb、redis、HBase | 1、使用键值对存储数据;2、分布式;3、一般不支持ACID特性;4、非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合。 | 1、无需经过sql层的解析,读写性能很高;2、基于键值对,数据没有耦合性,容易扩展;3、存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,文档形式、图片形式等等,而关系型数据库则只支持基础类型。 | 1、不提供sql支持,学习和使用成本较高;2、无事务处理,附加功能bi和报表等支持也不好; |
mysql中的数据
image.pngMySQL组织数据的基本格式
image.pngMySQL基本使用
MySQL不区分大小写,但是系统默认大写为系统代码,小写为程序员代码
进入与退出
-
mysql -uroot -password
登陆数据库, root为账号,password为密码
-
exit
或者\q
退出
-
注意:
sudo apt-get install mysql-server
如果没有安装,执行此命令去下载。
修改编码
show variables like '%char%'; #查看当前使用的编码
1.打开配置文件:
vim /etc/mysql/mysql.conf.d/mysqld.cnf
2.在[client]后面和[mysqld]后面分别添加 :
[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8
3.重启mysql:
service mysql restart
mysql重置密码
#跳过权限启动mysql
3.重启mysql
service mysql restart
4.用root登录,不用输密码
mysql -uroot -p
5.修改密码
use mysql #先随便选择一个库
update mysql.user set authentication_string=password('juhao') where user='root';
update mysql.user set plugin='mysql_native_password';
flush privileges ;
6.打开配置文件,将第4步添加的删掉,重启mysql服务
创建用户
#创建用户
mysql> CREATE USER 'xiaobai'@'%' IDENTIFIED BY 'qwe123';
@'%'表示远程连接;
#给用户赋予权限
mysql> GRANT ALL ON *.* TO 'xiaobai'@'%';
#使更改立即生效
mysql> FLUSH PRIVILEGES;
#退出
mysql> \q
查看在哪个数据库里:
SELECT DATABASE();
查看当前用户:
SELECT USER();
查看有哪些数据库:
SHOW DATABASES;
#查看mysql有哪些数据库;
库级操作
-
show databases;
查看当前有哪些数据库
-
create database mydb
创建数据库,数据库已经存在会保存 可以用create database if not exists mydb;
数据库已存在不会报错,没有会创建
-
drop database mydb;
删除数据库,注意:对于系统内部生成的数据库,不需要也不能去修改
-
use mydb
进入mydb数据库
表级操作
-
show tables;
查看当前数据库有哪些表
-
创建表, 注意最后一个字段后面不要有逗号
create table student( # student为创建表的名字 id int comment '编号',, # id 为字段名,int为其数据类型 name varchar(20) comment '名字' # name为字段名,varchar为类型,20为长度 ); #comment用来说明,给人看的,备注作用
-
drop table tb_name;
删除表tb_name
-
desc student;
显示student表的结构, 显示详细信息
show create table student;
注意:SHOW CREATE TABLE
tb1\G
--注意:;
和\G
只能用其中一个;
表中数据的操作
添加数据
-
insert into tb_name(col_names) values (col_values);
insert into student(id, name) values (1, '菜鸟'); #指定字段插入 insert into student (name) values ('菜鸟'); #指定字段插入 insert into student values (2, '菜鸟'); #全字段插入 insert into student values (2); #错误 insert into student (name) values ('菜鸟'),('菜鸟'),('菜鸟'); #多行插入
查看数据
-
select field_name from tb_name where conditions;
select id from student; select id name from student; select * from student; #全字段查询 select * from student where id=1; #带条件查询
修改
-
update set filed_name = value [, ...] where conditions ;
update student set id=1; #修改表中全部数据 update student set name ='菜鸟小白' where id= 1; #修改满足条件的 update student set id=5, name ='菜鸟小白' where id=1;
注意: 一定要带where条件,不然会修改表中全部数据;
删除
-
delete from tb_name where conditions;
delete from student; #删除表中所有的数据 delete from student where id=5; #删除id为5的数据
注意: 一定要带where条件,不然会删除表中全部数据;
truncate table tb1; 数据量大相对于delete速度快;
2,查看命令
select user(); # 查看当前用户
select database(); # 查看当前位于哪个数据仓库
mysql数据类型
数据类型 | 代表内容 | 事例 |
---|---|---|
int | 整型 | id int |
varchar(20) | 指定长度,最多65535个字符。变长(超出会自动截掉) | name varchar(20)(插入20个字符) |
char(4) | 指定长度,最多255个字符。定长 | sex char(4)(不管插入几个字符都会占4个) |
double(4,2) | 双精度浮点型,m总个数,d小数位 | price double(4,2) |
text | 可变长度,最多65535个字符 | detail text |
datetime | 日期时间类型YYYY-MM-DD HH:MM:SS | dates datetime |
enum('good','not good') | 枚举,在给出的value中选择 | ping enum('good','not good') |
create table tb2(
id INT,
name VARCHAR(20), #指定长度,最多65535个字符。 ***变长,可长可短
sex CHAR(4), #指定长度,最多255个字符。 ***定长,固定值
price DOUBLE(4,2), #双精度浮点型,m总个数,d小数位
detail text, #可变长度,最多65535个字符
dates DATETIME, #日期时间类型 YYYY-MM-DD HH:MM:SS
ping ENUM('好评','差评') #枚举, 在给出的value中选择,只能在这其中选择一种插入修改;
-> );
insert into tb2 value( 1,'裤子','男',20.0,'这条裤子超级好!!!',now(),'好评'); --如果需要自己传时间,则需要按照时间格式YYYY-MM-DD HH:MM:SS