MySQL 之基础操作及增删改查等
一:MySQL基础操作
使用方法:
方式一: 通过图型界面工具,如 Navicat,DBeaver等
方式二: 通过在命令行敲命令来操作
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,memcache
SQL语句中的快捷键
\G 格式化输出(文本式,竖立显示)
\s 查看服务器端信息
\c 结束命令输入操作
\q 退出当前sql命令行模式
\h 查看帮助
二:操作数据库的步骤
在数据库操作之前我们首先还需要知道,数据库的服务是怎么关闭和开启的
1.mysql 服务开启与关闭
windows版:
windows版本的数据库,需要用管理员的身份运行cmd 命令行窗口在能进行关闭和开启
(1)用: netstat -aon|findstr "3306" 命令查看端口是否开启监听LISTENING 表示开启
因为mysql 的默认端口是3306 ,如果3306端口开启,表示mysql数据服务开启
也可用进入window 服务进行查看,找到mysql服务进行查看如下图:
(2)使用命令 : net stop mysql 关闭服务,后进行查看端口没有开启
(3)使用命令: net start mysql 开启服务,后进行查看端口开启LISTENING 状态
linux版:
service mysql start 启动mysql
service mysql stop 停止mysql
service mysql restart 重启mysql
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
root@hsz:~# ps aux|grep mysql mysql 1107 0.2 7.3 1173604 143436 ? Ssl 10:22 0:02 /usr/sbin/mysqld root 2764 0.0 0.0 21312 1016 pts/8 S+ 10:37 0:00 grep --color=auto mysql root@hsz:~# service stop mysql stop: unrecognized service root@hsz:~# service mysql stop root@hsz:~# ps aux|grep mysql root 2810 0.0 0.0 21312 1020 pts/8 S+ 10:37 0:00 grep --color=auto mysql root@hsz:~# service mysql start root@hsz:~# ps aux|grep mysql mysql 2852 1.6 7.1 1173608 140816 ? Ssl 10:38 0:00 /usr/sbin/mysqld root 2894 0.0 0.0 21312 988 pts/8 S+ 10:38 0:00 grep --color=auto mysql root@hsz:~# service mysql restart root@hsz:~# netstat -tunlp | grep :3306 tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 2912/mysqld
连接, 打开库, 操作, 关闭退出
Windows再安装好mysql数据库的情况下,打开cmd 命令行提示符窗口
1.连接MySQL设置密码及创建用户与赋予权限
(1)连接mysql
输入:mysql -uroot -p 或 mysql -uroot -h127.0.0.1 -p
紧接着输入数据库密码
-u 登录用户名
-h 服务器地址(127.0.0.1默认为本机地址)
-p 回车输入端口
-P (大写,如果数据库端口有修改过不少默认端口需要加: -P 端口号)
出现mysql> 这样的符号,说明登录mysql数据库成功
(2)mysql设置密码
# 查询当前登录的用户是谁
select user();
# 设置密码
set password = password("123456");
# 去除密码
set password = password('');
(3)创建账户
# (只是单纯创建一个账户而已,没权限的)
# 为"10.0.0.46" 创建ceshi01用户,密码111来访问服务器mysql
create user 'ceshi01'@"10.0.0.46" identified by '111'; # 指定具体用户
crecreate user 'ceshi04'@'10.0.0.%' identified by '111'; # 指定某个网段
crecreate user 'ceshi04'@'192.168.129.%' identified by '111';
create user 'ceshi03'@'%'; # 指定所有机器都可以连接mysql
# 查看用户权限 (用户怎么创建怎么查看)
show grants for 'ceshi04'@'10.0.0.%'
# GRANT USAGE ON *.* TO 'ceshi02'@'192.168.11.%' USAGE无权限的意思
# 客户端连接服务器mysql
mysql -uceshi04 -h10.0.0.200 -p
(4)用户授权
# 用户授权:(创建用户的同时,也授予权限)
# 完整语法:
grant 权限 on 数据库.表名 to '用户名'@'ip地址' identified by '密码';
权限:
all privileges 表示所有权限 (可以简写all)
# select 查询数据权限
# insert 插入数据权限
# update 更新数据权限
# delete 删除数据权限
# *.* 代表所有库.所有表
grant select on *.* to 'ceshi04'@'10.0.0.%' identified by '222';
grant select on *.* to 'ceshi01'@'192.168.109.%' identified by '222';
# 查看所有数据库
show databases;
# 移除权限
revoke select on *.* from 'ceshi04'@'10.0.0.%';
# 删除账户
drop user 'ceshi04'@'10.0.0.%';
# 刷新权限
flush privileges;
2.数据库语法的特点
1) SQL 语句可以换行, 要以分号结尾
1)
2)创建数据库 create database 库名 default charset=utf8;
3)删除数据库 drop database 库名;
4)打开数据库
对以上一一操作:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | zero | +--------------------+ 5 rows in set (0.02 sec) mysql> create database db1 default charset=utf8; Query OK, 1 row affected (0.00 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | db1 | | mysql | | performance_schema | | sys | | zero | +--------------------+ 6 rows in set (0.00 sec) mysql> drop database db1; Query OK, 0 rows affected (0.03 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | zero | +--------------------+ 5 rows in set (0.00 sec) mysql> use zero; Database changed mysql>
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
操作数据库(文件夹) 增: # 创建数据库db1,设置字符集utf8 create database db1 charset utf8; 查: # 查看建库信息 show create database db1; # 显示所有数据库 show databases; 改: #更改数据库字符集 alter database db1 charset gbk; 删: # 删除数据库db1 drop database db1;
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
mysql> select * from test; +------+----------+------+------+--------+ | id | name | sex | age | height | +------+----------+------+------+--------+ | 1 | zhangsan | w | 20 | 170 | | 3 | wangwu | m | 23 | 175 | | 2 | wu | m | 23 | 172 | +------+----------+------+------+--------+ 3 rows in set (0.00 sec)
id | name | sex | age | height
每一项称为一个字段
下面的数据每一行称为一条记录
创建表: create table 表名(字段名1 类型,字段名2 类型)engine=innodb default charset=utf8;
创建表: 如果表不存在,则创建, 如果存在就不执行这条命令
create table if not exists 表名(
字段1 类型,
字段2 类型
);
删除表: drop table 表名;
表结构:
如下是对上面的命令格式进行操作,以t1,t2为表名
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
mysql> show tables; +---------------+ | Tables_in_db1 | +---------------+ | t1 | +---------------+ 1 row in set (0.00 sec) mysql> create table t2(id int,name char(10)) engine=innodb default charset=utf8; Query OK, 0 rows affected (0.06 sec) ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' '' at line 1 mysql> show tables; +---------------+ | Tables_in_db1 | +---------------+ | t1 | | t2 | +---------------+ 2 rows in set (0.00 sec) mysql> drop table t1; Query OK, 0 rows affected (0.03 sec) mysql> show tables; +---------------+ | Tables_in_db1 | +---------------+ | t2 | +---------------+ 1 row in set (0.00 sec) mysql> desc t2; +-------+----------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+----------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | char(10) | YES | | NULL | | +-------+----------+------+-----+---------+-------+ 2 rows in set (0.00 sec)
插入 单条数据: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 条件;
删除
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
操作表(文件) int 整型 char 字符串 # 切换数据库 use db1; 增: # 创建数据表t1(字段名,类型...) create table t4( id int, name char ); 查: # 查看所有表 show tables; # 查看建表语句 show create table t1; ''' CREATE TABLE `t5` ( `id` int(11) DEFAULT NULL, `name` char(1) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ''' # 垂直查看数据信息,默认水平. show create table t1\G # 查看表结构 desc t1; 改: # modify 单纯改变数据类型 指定char字符长度是6 alter table t1 modify name char(6); # change 连名字带数据类型都改变 新名字和数据类型都需要指定 alter table t1 change name NAME char(7); alter table t1 change NAME name char(11); # 更改表名 alter table t1 rename t99 删: # 删除表t1 drop table t5 操作记录(文件内容): 增: # t2(字段名字,逗号彼此隔开) 一次只插入一条; insert into t2(id,name) values(1,'one') # 一次插入多条数据 insert into t2(id,name) values(2,"two"),(3,"three"),(4,"four") # 可以不指定具体字段,但是字段值必须一一对应 insert into t2 values(5,"five") # 可以具体指定某个字段设置值 insert into t2(id) values(6); 查 # select 后面接字段名称 也可以直接写* ,*代表所有字段; select id,name from t2; select * from t2; # 数据库.表 在没有选择数据库的时候,也可以查询; select * from db1.t2; 改: # upate 表名 set 字段=值 where 条件 update t2 set name = "zero"; # 加上条件再去修改值,否则全部都修改了 条件id=3的这条记录 update db1.t2 set name = "six" where id = 4; 删: # 删除t2表所有的数据 delete from t2; # 删除six,指定具体数据删除,加上where 条件 id=4的记录 delete from t2 where id=4; # 清空数据,id号保留; delete from t2 # 清空数据,id号重置;(速度更快) trancate table t1; # 常用数据类型: int 整型 char和varchar 都是字符串 char(5) 定长,固定开辟字符长度是5的空间 (手机号,或者身份证);速度快 varchar(5) 变长,最大开辟字符长度是5的空间,实际按照存入的值算大小,速度慢 float(255,30) 一共255,小数点最多占用30位 enum 和 set 的数据必须从其中挑选,没有的话报错; enum 枚举 从一组数据中选一个 (一般性别上) set 集合 从一组数据中选多个 ,自动去重 一个综合的例子: mysql> create table t10( -> id int, -> name varchar(15), -> money float(6,2), -> sex enum("man",'woman'), -> hobby set("eat","drink",'play','smile') -> ); # 正确 insert into t10(id,name,money,sex,hobby) values(1,'one',9.1,"man","eat,drink"); # float(6,2) 整数位最大是4位. insert into t10(id,name,money,sex,hobby) values(2,'sdfsdfd',82.349,"man","smile,smile"); insert into t10(id,name,money,sex,hobby) values(2,'sdfsdfd',82.349,"man","smile1343smile");
# 常用数据类型:
int 整型
char和varchar 都是字符串
char(5) 定长,固定开辟字符长度是5的空间 (手机号,或者身份证);速度快
varchar(5) 变长,最大开辟字符长度是5的空间,实际按照存入的值算大小,速度慢
float(255,30) 一共255,小数点最多占用30位
enum 和 set 的数据必须从其中挑选,没有的话报错;
enum 枚举 从一组数据中选一个 (一般性别上)
set 集合 从一组数据中选多个 ,自动去重
综合案例:
mysql> create table t10(
-> id int,
-> name varchar(15),
-> money float(6,2),
-> sex enum("man",'woman'),
-> hobby set("eat","drink",'play','smile','piao')
-> );
# 正确
insert into t10(id,name,money,sex,hobby) values(1,'wangwen',9.1,"man","eat,drink");
# float(6,2) 整数位最大是4位.
insert into t10(id,name,money,sex,hobby) values(2,'sdfsdfd',82.349,"man","piao,piao,piao");
insert into t10(id,name,money,sex,hobby) values(2,'sdfsdfd',82.349,"man","piao1343piao");
注:
linux查看mysql配置文件
find / -name my.cnf
nano /etc/mysql/my.cnf
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
cd /etc/mysql/conf.d/ # 客户端mysql配置文件
cd /etc/mysql/mysql.conf.d/ # 服务端mysql配置文件
#把文档当中
#放服务端配置文件中
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 设置mysql客户端默认字符集
default-character-set=utf8
exit; 或者 quit;
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
# ### 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