mysql 入门介绍(一)

一、MySQL概述

1、什么是数据库 ?
 答:数据的仓库,如:在ATM的示例中我们创建了一个 db 目录,称其为数据库

2、什么是 MySQL、Oracle、SQLite、Access、MS SQL Server等 ?
 答:他们均是一个软件,都有两个主要的功能:

    • a. 将数据保存到文件或内存
    • b. 接收特定的命令,然后对文件进行相应的操作

3、什么是SQL ?
 答:MySQL等软件可以接受命令,并做出相应的操作,由于命令中可以包含删除文件、获取文件内容等众多操作,对于编写的命令就是是SQL语句。

  

mysql简单安装方式:

1. sudo apt-get install mysql-server   

2. apt-get install mysql-client    

3. sudo apt-get install libmysqlclient-dev

  安装完成后可以使用如下命令来检查是否安装成功:sudo netstat -tap | grep mysql 

  查看版本号:mysql --version

 

  设置mysql允许远程访问,首先编辑文件/etc/mysql/mysql.conf.d/mysqld.cnf:

  sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

  注释掉bind-address = 127.0.0.1:  前面加#即可

  

连接MySQL

  格式: mysql -h 主机地址 -u 用户名 -p 用户密码

  1、例1:连接到本机上的MYSQL命令:mysql -uroot -p,回车后输入密码

  2、例2:连接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令:

  mysql -h 110.110.110.110 -uroot -p abcd123

用户管理

1
2
3
4
5
6
7
8
9
10
创建用户
     create user  '用户名' @ 'IP地址'  identified by  '密码' ;
删除用户
     drop user  '用户名' @ 'IP地址' ;
修改用户
     rename user  '用户名' @ 'IP地址' ; to  '新用户名' @ 'IP地址' ;;
修改密码
     set password  for  '用户名' @ 'IP地址'  = Password( '新密码' )
  
PS:用户权限相关数据保存在mysql数据库的user表中,所以也可以直接对其进行操作(不建议)

授权管理

1
2
3
show grants  for  '用户' @ 'IP地址'                   -- 查看权限
grant  权限 on 数据库.表 to    '用户' @ 'IP地址'       -- 授权
revoke 权限 on 数据库.表 from  '用户' @ 'IP地址'       -- 取消权限

 

 数据库操作-思路图

库操作

(1) 查看所有的数据库

show databases;

(2) 创建数据库

create database 库名;

create database if not exists 库名; 防止创建同名的库出现错误

(3) 查看创库语句

show create database 库名 \G;

(4) 使用数据库(进入到当前的库中)

use 库名

(5) 查看当前所在的数据库

select database();

(6) 数据库的删除

drop database 库名;

drop database if exists 库名; 删除数据库如果该库存在 防止报错

(7) 创建数据库并设置字符集

create database 库名 character set utf8;

(8) 创建数据库 并设置字符集

alter database hzpython1803 character set 字符集;

表操作

表数据类型:

  • 1、整型(xxxint)
  • 2、浮点型(float和double)
  • 3、定点数(decimal)
  • 4、字符串(char,varchar,xxxtext)
  • 5、二进制数据(xxxBlob)
  • 6、日期时间类型

注:浮点数中的m代表当前存储的长度 n代表小数的位数 m-n代表整数的位数 超出则报.

  1. 整形后面给定数字 并不是限定当前存储值的长度 并没有任何的意义 除非配合可选参数 zerofill 零填充 才有意义

  2. 字符串类型后面给定的长度 则是限制当前存储数据的长度

  3. 整形默认长度会比本身长度大1,因为是符号位

char和varchar的相同和不同点 :
  1. char和varchar的存储长度都为0-255

  2. char的执行效率高于varchar

  3. varchar要比 char更节省存储空间

  4. 当char存储的值达不到指定的长度时 则使用空来占位

enum和set区别
  1. enum只能选择其中的一个值

  2. set可以选择多个值 多个值使用逗号来隔开

字段约束

  1. unsigned 无符号 正数

    只能用于数值类型 不允许出现负数 存储长度会扩大一倍

  2. zerofill 零填充

    只能用于数值类型 当指定的位数不足的时候 零填充

  3. default 默认值

    如果当前字段没有传值 则值为默认值 (不设定默认值 默认为null)

  4. null 和 not null

    默认为null 当不插入值则插入的为null,当设置当前字段为 not null的时候 则该字段必须传值

  5. comment 设置当前字段的说明

  6. auto_increment 自增

查看所有的表:show databases;

创建表格式:create table 表名(

     列名  类型  是否可以为空,
     列名  类型  是否可以为空
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
mysql> create table fs(
    -> id int unsigned primary key auto_increment,
    -> username varchar(20),
    -> sex tinyint,
    -> age tinyint unsigned,
    -> info varchar(100)
    -> );

切换表格式:use 表名;

删除表格式:drop table 表名;   例:drop table fs;

表结构操作

查看表结构:desc 表名;   例:desc fs;

清空表:truncate table 表名;

查看表结构:  desc 表名
清空表: truncate 表名
添加列:   alter table 表名 add 列名 类型
删除列:   alter table 表名 drop column 列名
修改列:
          alter table 表名 modify column 列名 类型;  -- 类型
          alter table 表名 change 原列名 新列名 类型; -- 列名,类型
  
添加主键:
          alter table 表名 add primary key(列名);
删除主键:
          alter table 表名 drop primary key;
          alter table 表名  modify  列名 int, drop primary key;
  
添加外键: alter table 从表 add constraint 外键名称(形如:FK_从表_主表) foreign key 从表(外键字段) references 主表(主键字段);
删除外键: alter table 表名 drop foreign key 外键名称
  
修改默认值:ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
删除默认值:ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;

  

 

 表内容操作

1、增

insert into 表 (列名,列名...) values (值,值,...)
insert into 表 (列名,列名...) values (值,值,...),(值,值,值...)
insert into 表 (列名,列名...) select (列名,列名...) from 表
例:
insert into tab1(name,email) values('zhangyanlin','[email protected]')

2、删

delete from 表                                      # 删除表里全部数据
delete from 表 where id=1 and name='zhangyanlin'   # 删除ID =1 和name='zhangyanlin' 那一行数据

3、改

update 表 set name = 'zhangyanlin' where id>1

4、查

select * from 表
select * from 表 where id > 1
select nid,name,gender as gg from 表 where id > 1

a、条件判断where

    select * from 表 where id > 1 and name != 'marong' and num = 12;
    select * from 表 where id between 5 and 16;
    select * from 表 where id in (11,22,33)
    select * from 表 where id not in (11,22,33)
    select * from 表 where id in (select nid from 表)

b、通配符like

    select * from 表 where name like 'zhang%'  # zhang开头的所有(多个字符串)
    select * from 表 where name like 'zhang_'  # zhang开头的所有(一个字符)

c、限制limit

    select * from 表 limit 5;            - 前5行
    select * from 表 limit 4,5;          - 从第4行开始的5行
    select * from 表 limit 5 offset 4    - 从第4行开始的5行

d、排序asc,desc

    select * from 表 order by 列 asc              - 根据 “列” 从小到大排列
    select * from 表 order by 列 desc             - 根据 “列” 从大到小排列
    select * from 表 order by 列1 desc,列2 asc    - 根据 “列1” 从大到小排列,如果相同则按列2从小到大排序

 e、分组group by

复制代码
    select num from 表 group by num
    select num,nid from 表 group by num,nid
    select num,nid from 表  where nid > 10 group by num,nid order nid desc
    select num,nid,count(*),sum(score),max(score),min(score) from 表 group by num,nid
    select num from 表 group by num having max(id) > 10
 
    特别的:group by 必须在where之后,order by之前.如group by后面需使用where 可用having替换where

注:实际开发中,要避免使用通配符"*"(通配符代表所有字段),以及'like',会影响效率。

猜你喜欢

转载自www.cnblogs.com/zhouyi-/p/9282792.html