MySQL数据库

Posted luchuangao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL数据库相关的知识,希望对你有一定的参考价值。

win安装

#Windows:
    #可执行文件
        点点点
    #压缩包
        #放置任意目录
        #初始化
            服务端:E:\wupeiqi\mysql-5.7.16-winx64\mysql-5.7.16-winx64\bin\mysqld --initialize-insecure
                    # 用户名 root 密码:空
        #启动服务端:
            E:\wupeiqi\mysql-5.7.16-winx64\mysql-5.7.16-winx64\bin\mysqld\mysqld
             
        #客户端连接:
            E:\wupeiqi\mysql-5.7.16-winx64\mysql-5.7.16-winx64\bin\mysqld\mysql -u root -p
             
            发送指令:
                show databases;
                create database db1;
             
        #环境变量的配置:
            E:\wupeiqi\mysql-5.7.16-winx64\mysql-5.7.16-winx64\bin
            mysqld
             
        #windows服务:
            E:\wupeiqi\mysql-5.7.16-winx64\mysql-5.7.16-winx64\bin\mysqld --install
            net start MySQL
             
            E:\wupeiqi\mysql-5.7.16-winx64\mysql-5.7.16-winx64\bin\mysqld --remove
             
            net start MySQL
            net stop MySQL

用户管理

  • 用户管理
#创建用户
create user '用户名'@'IP地址' identified by '密码';

# 删除用户
drop user '用户名'@'IP地址';

#修改用户
rename user '用户名'@'IP地址'; to '新用户名'@'IP地址';

#修改密码
set password for '用户名'@'IP地址' = Password('新密码');
  • 授权管理
show grants for '用户'@'IP地址'                 # -- 查看权限
grant  权限 on 数据库.表 to   '用户'@'IP地址'     # -- 授权
revoke 权限 on 数据库.表 from '用户'@'IP地址'     # -- 取消权限
  • 权限说明
all privileges  除grant外的所有权限
select          仅查权限
select,insert   查和插入权限
...
usage                   无访问权限
alter                   使用alter table
alter routine           使用alter procedure和drop procedure
create                  使用create table
create routine          使用create procedure
create temporary tables 使用create temporary tables
create user             使用create user、drop user、rename user和revoke  all privileges
create view             使用create view
delete                  使用delete
drop                    使用drop table
execute                 使用call和存储过程
file                    使用select into outfile 和 load data infile
grant option            使用grant 和 revoke
index                   使用index
insert                  使用insert
lock tables             使用lock table
process                 使用show full processlist
select                  使用select
show databases          使用show databases
show view               使用show view
update                  使用update
reload                  使用flush
shutdown                使用mysqladmin shutdown(关闭MySQL)
super                   使用change master、kill、logs、purge、master和set global。还允许mysqladmin????????调试登陆
replication client      服务器位置的访问
replication slave       由复制从属使用

数据库操作

  • 创建数据库
# utf-8
CREATE DATABASE 数据库名称 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
create database olddog CHARACTER SET utf8  COLLATE utf8_general_ci;
 
# gbk
CREATE DATABASE 数据库名称 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
  • 数据库常用操作
show create database oldboy\G;      #查看创建库的信息
 
show databases;
show databases like "%old%";
select database();           #查看进入的数据库
  • 常用命令
select version();       #查看版本
select user();          #查看当前的用户
select now();           #查看当前时间
help create database    #查看创建数据库帮助
show character set;     #查看字符集
 
create database oldboy CHARACTER SET utf8 COLLATE utf8_general_ci;   #创建数据库
grant all on oldboy.* to [email protected] identified by '123456';       #授权用户
show grants for [email protected];                                       #查看用户的权限
select user,host from mysql.user;                                    #查看有哪些用户
use test;
mysql> create table test(
    -> id int(4),
    -> name varchar(16)
    -> )ENGINE=innodb default charset=utf8;
show create table test\G;                                       #查看创建的表
desc test;                                                      #查看表结构
insert into test values(1,'oldboy');                            #插入数据
update 表名 set 字段=“” where 字段......;                       #修改字段数据
delete from 表名 where 条件;                                   #删除字段数据
 
2、查询(DQL)
    select user,host,password from mysql.user;        #正常查询
    select user,host,password from mysql.user order by user asc;   #升序查询
    select user,host,password from mysql.user order by user desc;  #倒序查询
 
3、数据操作语言(DML)INSERT UPDATE DELETE
    delete from mysql.user where user="tom";
 
4、事物处理语言(DPL)BEGIN TRANSACYION,COMMIT,ROLLBACK
5、数据控制语言(DCL)GRANT REVOKE
6、数据定义原因(DDL)CREATE DROP ALTER

表操作

#创建表
   
create table 表名(
    列名  类型  是否可以为空,
    列名  类型  是否可以为空
)ENGINE=InnoDB DEFAULT CHARSET=utf8
   
#删除表
   
drop table 表名
   
#清空表
   
delete from 表名
truncate table 表名   #推荐使用
   
   
#修改表
   
  #添加列: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 db1 AUTO_INCREMENT=10;
     
  #添加外键: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;
   
   
#修改表名
rename table 表名old to 表名new;
alter table 表名old rename to 表名new; 

表内容操作

insert into 表 (列名,列名...) values (值,值,值...)
insert into 表 (列名,列名...) values (值,值,值...),(值,值,值...)
insert into 表 (列名,列名...) select (列名,列名...) from 表
delete from 表
delete from 表 where id=1 and name='alex'
update 表 set name = 'alex' where id>1
select * from 表
select * from 表 where id > 1
select nid,name,gender as gg from 表 where id > 1  

数据库关系

  • 自增 步长
注意:1、对于自增列,必须是索引(含主键)。
         2、对于自增可以设置步长和起始值

MySQL: 自增步长
       基于会话级别:
             show session variables like 'auto_inc%';      #查看会话变量
             set session auto_increment_increment=2;   #设置会话步长
             set session auto_increment_offset=10;        #设置会话起始值

      基于全局级别:
             show global  variables like 'auto_inc%';    #查看全局变量
             set global auto_increment_increment=2;  #设置全局步长
             set global auto_increment_offset=10;      #设置全局起始值
  • 外键绑定两个主键
create table db1(
    cid int not null auto_increment,
    id1 int not null,
    id2 int,
    primary key(cid,id1)
    )engine=innodb default charset=utf8;


create table db2(
    sid int not null auto_increment primary key,
    ic1 int,
    ic2 int,
    constraint db2_db1 foreign key(ic1,ic2) references db1(cid,id1)
    )engine=innodb default charset=utf8;
  • 外键 唯一 一对一演示
create table user_info(
    uid int not null auto_increment primary key,
    name varchar(32) not null,
    usertype int not null
    )engine=innodb default charset=utf8;


create table admain_info(
    id int not null auto_increment primary key,
    user_id int not null,
    unique admin_user (user_id),
    constraint admin_user foreign key(user_id) references user_info(uid)
    )engine=innodb default charset=utf8;



insert into user_info(name,usertype) values("alex",1),("egon",2),("tom",3);

insert into admain_info(user_id) values(1),(2),(3);
  • 外键 唯一 多对多演示
create table user(
    uid int not null auto_increment primary key,
    name varchar(32) not null,
    gender ENUM("男","女") not null
    )engine=innodb default charset=utf8;


create table host(
    hid int not null auto_increment primary key,
    name varchar(32) not null
    )engine=innodb default charset=utf8;


create table user_host(
    id int not null auto_increment primary key,
    uid int not null,
    hid int not null,
    unique uid_hid (uid,hid),
    constraint user_host_user foreign key(uid) references user(uid),
    constraint user_host_host foreign key(hid) references host(hid)
    )engine=innodb default charset=utf8;

insert into user(name,gender) values("alex","男"),("egon","男"),("tom","男");

insert into host(name) values("host1"),("host2"),("host3");

insert into user_host(uid,hid) values(1,1),(1,2),(1,3);

insert into user_host(uid,hid) values(2,1),(2,2),(2,3);

insert into user_host(uid,hid) values(3,1),(3,2),(3,3);
  • 外键 一对多演示
create table user_info(
    uid int not null auto_increment primary key,
    name varchar(32) not null,
    usertype int not null
    )engine=innodb default charset=utf8;

create table admin_info(
    id int not null auto_increment primary key,
    user_id int not null,
    constraint admin_user foreign key(user_id) references user_info(uid)
    )engine=innodb default charset=utf8;

insert into user_info(name,usertype) values("alex",1),("egon",2),("tom",3);

insert into admin_info(user_id) values(1),(2),(3);

SQL语句数据

  • 常用
1、增
insert into 表 (列名,列名...) values (值,值,值...);
insert into 表 (列名,列名...) values (值,值,值...),(值,值,值...);
insert into 表 (列名,列名...) select (列名,列名...) from 表;
insert into tb11(name,age) values('alex',12);
insert into tb11(name,age) values('alex',12),('root',18);
insert into tb12(name,age) select name,age from tb11;
 
2、删
delete from 表;
delete from 表 where id=1 and name='alex';
delete from tb12 where id >=2 or name='alex';
 
3、改
update 表 set name='alex' where id>1;
update tb12 set name='alex' where id>12 and name='xx'
update tb12 set name='alex',age=19 where id>12 and name='xx'
 
4、查
select * from tb12;        
select id,name from tb12;
select id,name as cname from tb12 where id > 10 or name ='xxx';
  • 其他
a、条件
select * from 表 where id > 1 and name != 'alex' 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、通配符
select * from 表 where name like 'ale%'  - ale开头的所有(多个字符串)
select * from 表 where name like 'ale_'  - ale开头的所有(一个字符)

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

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

e、分组
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之前

f、连表
select * from userinfo5,department5
                
select * from userinfo5,department5 where userinfo5.part_id = department5.id

select * from userinfo5 left join department5 on userinfo5.part_id = department5.id
# userinfo5左边全部显示

# select * from userinfo5 right join department5 on userinfo5.part_id = department5.id
# department5右边全部显示

select * from userinfo5 innder join department5 on userinfo5.part_id = department5.id
将出现null时一行隐藏

select * from department5 
left join userinfo5 on userinfo5.part_id = department5.id
left join userinfo6 on userinfo5.part_id = department5.id

以上是关于MySQL数据库的主要内容,如果未能解决你的问题,请参考以下文章

从mysql的片段中加载ListView

连接MySQL出现错误:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)(代码片段

使用 json rereiver php mysql 在片段中填充列表视图

关于mysql驱动版本报错解决,Cause: com.mysql.jdbc.exceptions.jdbc4Unknown system variable ‘query_cache_size(代码片段

硬核!管理mysql数据库的工具

修改MySQL密码报错“ERROR 1819 (HY000): Your password does not satisfy the current policy requirements“(代码片段