mysql数据库基础操作
MySQL基础操作
使用方法:
方式一: 通过图型界面工具,如 Navicat 等( 高级课使用 )
方式二: 通过在命令行敲命令来操作 ( 基础阶段使用 )
SQL ( Structure query language ) 结构化查询语言
SQL语言分为4个部分:DDL(定义)、DML(操作)、DQL(查询)、DCL(控制)
1、DDL语句 数据库定义语言: 数据库、表、视图、索引、存储过程,例如CREATE DROP ALTER 2、DCL语句 数据库控制语言: 例如控制用户的访问权限GRANT、REVOKE 3、DML语句 数据库操纵语言: 插入数据INSERT、删除数据DELETE、更新数据UPDATE 4、DQL语句 数据库操纵语言:查询数据SELECT
mysql数据库管理软件,记录事物一些数据特征: 由库,表,记录组成. 库相当于一个文件夹 表相当于一个文件 记录就是文件里面一条一条的内容 表中的成员属性就是一个一个字段 可以为每个项目建立一个数据库 关系型数据库:表与表之间有联系 比如:mysql,oracle,db2,sqlserver 非关系型数据库: key-value 键值对形式 没有表的概念 比如:redis,mongodb,memcacheSQL语句中的快捷键
\G 格式化输出(文本式,竖立显示)
\s 查看服务器端信息
\c 结束命令输入操作
\q 退出当前sql命令行模式
\h 查看帮助
操作数据库的步骤
连接, 打开库, 操作, 关闭退出
1.通过命令行连接MySQL
![]()
数据库语法的特点
1) SQL 语句可以换行, 要以分号结尾
![]()
2) 命令不区分大小写. 关键字和函数建议用大写
![]()
3) 如果提示符为 '> 那么需要输入一个'回车
![]()
4) 命令打错了换行后不能修改, 可以用 \c 取消
![]()
2. 数据库操作
查看数据库 show databases;
创建数据库 create database 库名 default charset=utf8;
删除数据库 drop database 库名;
打开数据库 use 库名;
3. 数据表操作
数据库管理系统中, 可以有很多
库
, 每个数据库中可以包括多张数据表
![]()
查看表: show tables;
创建表: create table 表名(字段名1 类型,字段名2 类型)engine=innodb default charset=utf8;
创建表: 如果表不存在,则创建, 如果存在就不执行这条命令
create table if not exists 表名(
字段1 类型,
字段2 类型
);
删除表: drop table 表名;
表结构: desc 表名;
4. 记录操作 增删改查
插入 单条数据:insert into 表名(字段1,字段2,字段3) values(值1,值2,值3);
插入多条数据:insert into 表名(字段1,字段2,字段3) values(a值1,a值2,a值3),(b值1,b值2,b值3);
查询 select * from 表名;
select 字段1,字段2,字段3 from 表名;
select * from 表名 where 字段=某个值;
修改 update 表名 set 字段=某个值 where 条件;
update 表名 set 字段1=值1,字段2=值2 where 条件;
update 表名 set 字段=字段+值 where 条件;
删除 delete from 表名 where 字段=某个值;
退出MySQL
exit; 或者 quit;
卸载MySQL
# ### mysql 卸载 # (1) windows 卸载 关闭服务 cmd : mysqld remove 删除已经解压的文件夹 重启电脑 # (2) linux 卸载 sudo apt-get autoremove --purge mysql-server-5.7 sudo apt-get remove mysql-common sudo rm -rf /etc/mysql/ /var/lib/mysql #清理残留数据 dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P sudo apt autoremove sudo apt autoreclean存储引擎场景:
InnoDB 用于事务处理应用程序,支持外键和行级锁。如果应用对事物的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包括很多更新和删除操作,那么InnoDB存储引擎是比较合适的。InnoDB除了有效的降低由删除和更新导致的锁定,还可以确保事务的完整提交和回滚,对于类似计费系统或者财务系统等对数据准确要求性比较高的系统都是合适的选择。 MyISAM 如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不高,那么可以选择这个存储引擎。 Memory 将所有的数据保存在内存中,在需要快速定位记录和其他类似数据的环境下,可以提供极快的访问。Memory的缺陷是对表的大小有限制,虽然数据库因为异常终止的话数据可以正常恢复,但是一旦数据库关闭,存储在内存中的数据都会丢失。 #查看当前的默认存储引擎: show variables like "default_storage_engine"; #更改表的存储引擎 alter table t1 engine = innodb; 方法2: #my.ini文件 [mysqld] default_storage_engine=INNODB
命令的基础操作
# ### mysql关系型数据库
[快捷键]
快捷键:ctrl + l 清屏
快捷键:ctrl + c 终止
exit : 退出数据库
\q : 退出
\G : 垂直显示[linux] mysql服务命令
service mysql stop
service mysql start
service mysql restart[windows] mysql服务命令
net stop mysql
net start mysql
# ### part1
登录的完整语法
# (1) 登录
mysql -u用户 -p密码 -hip地址
mysql -uroot -p -h默认本地ip
localhost => 127.0.0.1
# (2) 退出
exit 或者 \q
# ### part2
# 查询当前登录用户
select user()
# 设置密码
set password = password("123456")
# 去除密码
set password = password("");
# ### part3
VMnet8: nat
VMnet1:host-only
ipconfig [windows] ifconfig[linux]# 给具体某个ip设置一个账户连接linux
create user "ceshi100"@"192.168.126.1" identified by "111";
# 给具体192.168.126.% 这个网段下的所有ip设置账户
create user "ceshi101"@"192.168.126.%" identified by "222";
# 给所有ip下的主机设置账户
create user "ceshi102"@"%" identified by "333";USAGE 没有任何权限
# 查看具体某个ip下的用户权限
show grants for "ceshi102"@"%";
+--------------------------------------+
| Grants for ceshi102@% |
+--------------------------------------+
| GRANT USAGE ON *.* TO 'ceshi102'@'%' |
+--------------------------------------+# 授权语法
grant 权限 on 数据库.表 to "用户名"@"ip地址" identified by "密码";
"""
select 查询数据的权限
insert 添加数据的权限
update 更改数据的权限
delete 删除数据的权限
* 所有
"""
# 授予查询权限
grant select,insert on *.* to "ceshi102"@"%" identified by "333";
# 授予所有权限
grant all on *.* to "ceshi102"@"%" identified by "333";
# 移除删除权限(删除数据库/表)
revoke drop on *.* from "ceshi102"@"%"
# 移除所有权限
revoke all on *.* from "ceshi102"@"%"
# 刷新权限,立刻生效
flush privileges# ### part4 [必须熟练]
"""
mysql命令中,不区分大小写
[linux]路径
sudo find / -name db001
sudo su root 切换到最高权限账户 cd mysql
/var/lib/mysql/数据库...[windows]路径
D:\MySQL5.7\mysql-5.7.25-winx64\data
"""# (1) 操作数据库 [文件夹]
增:
# 创建数据库
create database db001 charset utf8;
查:
# 查看数据库
show databases;
# 查看建库语句;
show create database db001;
+----------+----------------------------------------------------------------+
| Database | Create Database |
+----------+--------------------------- -------------------------------------+
| db001 | CREATE DATABASE `db001` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+----------------------------------------------------------------+
CREATE DATABASE `db002` /*!40100 DEFAULT CHARACTER SET utf8 */
改:
alter database db002 charset gbk;
删:
# 删除数据库
drop database db001# (2) 操作数据表 [文件]
增:
# 选择数据库
use db001
# 创建表
create table t1(id int , name char);
查:
# 查看所有表
show tables;
# 查看建表语句
show create table t1;
"""
Table: t1
Create Table: CREATE TABLE `t1` (
`id` int(11) DEFAULT NULL,
`name` char(1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
"""
# 查看表结构
desc t1;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | char(1) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
改:
# modify 只能改变类型
alter table t1 modify name char(5);
# change 改变类型+字段名
alter table t1 change name name123 char(4);
# add 添加字段
alter table t1 add age int;
# drop 删除字段
alter table t1 drop age;
# rename 更改表明
alter table t1 rename t1111111;
删:
drop table t1;
# (3) 操作记录 [文件的内容]
增:
# 一次插入一条数据
insert into t1(id,name) values(1,'abcd');
# 一次插入多条数据
insert into t1(id,name) values(2,"王文"),(3,"刘文波"),(4,"康裕康"),(5,"张保障");
# 不指定具体字段,默认把字段全部插一遍
insert into t1 values(6,"沈思雨");
# 可以具体指定某个字段进行插入
insert into t1(name) values("张宇");
查:
# * 所有
select * from t1;
# 查询单个字段
select id from t1;
# 查询多个字段
select id,name from t1;
改:
# update 表名 set 字段=值 where 条件
update t1 set name="王伟" where id = 2;
# 不加条件有风险,一改全改,一定加where
update t1 set name="王伟" ;删:
# 删除的时候,必须加上where
delete from t1 where id = 1;
# 删除所有数据,一删全删,一定加where
delete from t1;
# 删除所有 (数据+重置id)
truncate table t1;# ### part5 常用数据类型
# 整型
tinyint 1个字节 有符号范围(-128~127) 无符号(0~255) unsigned 小整型值
int 4个字节 有符号范围(-21亿 ~ 21亿左右) 无符号(0~42亿) 大整型值create table t3(id int , sex tinyint);
insert into t3(id,sex) values(4000000000,127) error out of range
insert into t3(id,sex) values(13,128) error Out of range
insert into t3(id,sex) values(13,127);
# 浮点型
float(255,30) 单精度
double(255,30) 双精度
decimal(65,30) 金钱类型 (用字符串的形式来存储小数)create table t4(f1 float(5,3) , f2 double(5,3) , f3 decimal(5,3) );
insert into t4 values(1.7777777777777777777777777,1.7777777777777777777777777,1.7777777777777777777777777);
insert into t4 values(11.7777777777777777777777777,11.7777777777777777777777777,11.7777777777777777777777777);
insert into t4 values(111.7777777777777777777777777,111.7777777777777777777777777,111.7777777777777777777777777); error out of range
insert into t4 values(1.7,1.7,1.7); error 整数位最多保留2位 , 小数位最多保留3位;存在四舍五入
# float 小数位默认保留5位,double 小数位默认保留16位,decimal 默认保留整数,四舍五入
create table t5(f1 float , f2 double , f3 decimal);
insert into t5 values(1.7777777777777777777777777,1.7777777777777777777777777,1.7777777777777777777777777);
create table t6(f1 float(7,3));
insert into t6 values(1234.5678);
+----------+
| f1 |
+----------+
| 1234.568 |
+----------+
# 整数位最多保留4位,小数位最多保留3位
# 默认double保留的小数位更多,float保留的小数位少;decimal保留整数位
insert into t6 values(12345.67);
# 字符串 char(字符长度) varchar(字符长度)
char(11) 定长:固定开辟11个字符长度的空间(手机号,身份证号),开辟空间的速度上来说比较快,从数据结构上来说,需谨慎,可能存在空间浪费. max = 255
varchar(11) 变长:动态最多开辟11个字符长度的空间(评论,广告),开辟空间的速度上来说相对慢,从数据结构上来说,推荐使用,不存在空间浪费 max > 255
text 文本类型:针对于文章,论文,小说. max > varcharcreate table t7(c char(11), v varchar(11) , t text);
insert into t7 values("11111","11111","11111");
insert into t7 values("你好啊你好啊你好啊你好","你好啊你好啊你好啊你好","你好啊你好啊你好啊你好");
# concat 可以把各个字段拼接在一起
select concat(c,"<=>",v,"<=>",t) from t7;
# 数据库内部方法
select user()
select concat()
select database()
select now()# 枚举和集合
enum 枚举 : 从列出来的数据当中选一个 (性别)
set 集合 : 从列出来的数据当中选多个 (爱好)create table t8(
id int ,
name varchar(10) ,
sex enum("男性","兽性","人妖") ,
money float(5,3) ,
hobby set("吃肉","抽烟","喝酒","打麻将","赌")
);# 正常写法
insert into t8(id,name,sex , money , hobby) values(1,"张保障","兽性",2.6,"打麻将,吃肉,赌");
# 自动去重
insert into t8(id,name,sex , money , hobby) values(1,"张保障","兽性",2.6,"打麻将,吃肉,赌,赌,赌,赌,赌,赌");
# 异常写法 : 不能选择除了列出来的数据之外的其他值 error 报错
insert into t8(id,name,sex , money , hobby) values(1,"张保障","人妖12",2.6,"打麻将,吃肉,赌12");