MySQL 的基本用法

 
 
# mysql  


## 安装MySQL  


```shell
sudo passwd root   
唤起root   


sudo apt-get install mysql-server  需要输入密码   
sudo apt-get install mysql-client
sudo apt-get install libmysqlclient-dev 




查看 mysql是否 开启  


sudo netstat -ntlp | grep mysql  
sudo netstat -ntlp | grep 3306 


授权 远程 链接  


grant all on *.* to root@'%' identified by '123456' with grant option;
flush privileges; 刷新权限  这一步不要忘   


vim /etc/mysql/mysql.conf.d/mysqld.cnf  
 #bind-address           = 127.0.0.1  把这一行 注释掉      
 重启   mysql  
 
 service  mysql restart   
```


## mysql


* 数据库服务器   
* 数据表   
* 数据字段   
* 数据行     


### 数据库 操作   


```mysql
mysql> create database kangbazi1801;  #创建数据库  
Query OK, 1 row affected (0.00 sec)


mysql> use kangbazi1801; #选中数据库  
Database changed


mysql> show tables;  #查看 库中的 表  
Empty set (0.00 sec)


mysql> drop database test; # 删除 数据库 
Query OK, 1 row affected (0.02 sec)




```


## 数据表    


```mysql
create table 表名(字段)
mysql> create table yinyang(id int(11) primary key auto_increment,name varchar(40))engine=MyISAM default charset=utf8;
Query OK, 0 rows affected (0.01 sec)


mysql> desc yinyang   # 查看表结构   




mysql> show create table yinyang \G;  #查看  创建 表 过程  
*************************** 1. row ***************************
       Table: yinyang
Create Table: CREATE TABLE `yinyang` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(40) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1 row in set (0.00 sec)


ERROR: 
No query specified


mysql> drop table yinyang;#删除表   
Query OK, 0 rows affected (0.00 sec)


mysql> show tables;
Empty set (0.00 sec)


engine=MyISAM  #指定 引擎  


myisam这个表读 select insert 多的话  表引擎选择这个  
innodb update delete 多的  话 选择这个引擎    支持事务   mysql5.6 以后 默认 这个引擎     


default charset=utf8 


```






## 表字段操作   


```mysql
mysql> alter table yinyang modify name char(32);
 				  表名  		  字段名  类型(长度)
mysql> alter table yinyang add column sex tinyint; # 添加 字段


mysql> alter table yinyang add column age int(10) after name; #添加到指定后面


mysql> alter table yinyang add num int(11) first; #添加到第一个 


mysql> alter table yinyang drop column num; #删除表字段  


mysql> alter table yinyang change sex sexer tinyint;


mysql> alter table yinyang rename hetong;








```


## 类型   


| 整型      | 字节数  取值范围       |
| --------- | ---------------------- |
| tinyint   | 1个字节  -128~127      |
| smallint  | 2个字节   -32768-32767 |
| int       | 4个字节                |
| bigint    | 16个字节               |
| float     | 4                      |
| double    | 8个字节                |
| char      | 0-255个字节  定长      |
| varchar   | 0-255个字节  变长      |
| text      | 0-65535个字节          |
| date      | 日期  2018-06-06       |
| time      | 时间   10:16          |
| datetime  | 日期+时间              |
| timestamp | 自动存储 修改的 记录   |
| year      | 年份                   |






> 数值  日期 字符    都可以选择的时候   第一级别 数值   第二 日期  第三 字符    
>
> 当 级别一样   选择  类型小的    
>
> 数据表名  最好  数据库名 前缀  字段以数据表名为前缀 (后面可以简写  但是要有意义 )


> 引擎    
>
> myisam   都的效率高  支持全文索引    表锁  
>
> innodb    支持 事务   行锁  






## 索引    


* 普通索引   
  * 最基本的索引  没有任何限制   
* 唯一索引   
  * 这一列不能有重复值     age 不能作为唯一索引  
* 全文索引  
  * 小说网站全局搜索用
* 主键索引  
  * 特殊的唯一索引    
* 组合索引  
  * 以上都是针对 一个字段 添加索引  
  * 针对好几个字段添加索引  






## 普通索引  


```
? index    


alter table  
create index   区别 在于 create index 不能创建主键索引  
create index in_name on hetong(username);
drop index in_name on hetong; 删除 
create unique index un_name on hetong(username);


mysql> alter table hetong add index(name);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0


mysql> show index from hetong \G;


mysql> alter table hetong drop index name; #删除索引  


mysql> alter table hetong add unique(name);#唯一索引  这一列 不能有重复值 


mysql> alter table hetong add fulltext
    -> (name); #添加全文 索引      
mysql> alter table hetong add primary key(id); #主键索引  
mysql> alter table kangbazi drop primary key;
删除主键索引  一定 先 将 id 自增消除掉 ;   
alter table kangbazi modify id int(11) primary key not null; #消除 自增   


mysql> alter table hetong add index(age,sexer);#复合索引     


创建 表的时候 直接 指定 索引    


create table kangbazi(
  id int(11) not null,
  username varchar(40) not null,
  password varchar(40) not null,
  content text not null,
  primary key(id),
  index pw(password),
  unique(username),
  fulltext(content)
)engine=myisam default charset=utf8;
 
```






## 语句的增删改查   


* 增    


  ```
  insert into hetong vlaues(); 有多少字段 必须插入多少值 
  insert into hetong(字段) values(值); 有些字段 可以不用插入  默认值或者null 即可   
  mysql> insert into hetong(name,age,sexer) values('guodegang',40,1),('xiaocui',50,1),('xiaogang',60,1),('xiaoxu',60,0);  
  
  ```


  


* 查 


  ```
  create table user(id int(11) primary key auto_increment not null,username varchar(40) not null,balance float not null,pine=Myisrovince varchar(10) not null,age tinyint not null,sex tinyint not null)engine=Myisam default charset=utf8; 
  
  select *  from user;
  mysql> select distinct province from user; #查询省份唯一的结果      
  
  where  条件    
  
  =  > < != >= <= 
  or  
  and 
  
  mysql> select * from user where id>10 and province="香港";
   
   
  order by  
  asc 升序  
  desc 降序 
  
  select * from user order by balance desc;
  
  mysql> select * from user order by balance desc,age asc;#多字段排序 如果第一个字段 排序成功  第二个 可能 就不生效了 
  
  select * from user limit 5; #限制结果集  
  					   数量
  mysql> select * from user order by balance desc limit 5; 
  mysql> select * from user limit 5,6;  #大于第五个然后  取 6条记录   
   
  www.test.com?page=2
  每页显示  10 
  (page-1)*每页显示的条数  
  0 10 
  10 10 
  20 10 
  
   
   
  ```


  ## MySQL 提供的 函数 


  | 函数                                    | 作用                                  |
  | --------------------------------------- | ------------------------------------- |
  | sum                                     | 求和                                  |
  | count                                   | 统计总数                              |
  | max                                     | 最大值                                |
  | min                                     | 最小值                                |
  | avg                                     | 平均值                                |
  | unix_timestamp()                        | 时间戳                                |
  | from_unixtim(时间戳)                    |                                       |
  | year                                    |                                       |
  | week                                    |                                       |
  | concat                                  |                                       |
  | repeat                                  |                                       |
  | length                                  |                                       |
  | replace                                 |                                       |
  | select substr("python is so good",1,3); | 从 第一个开始 包含第一个  截取3个内容 |
  | rand                                    | 0到1之间的随机数                      |
  | ceiling                                 | 向上取整                              |
  | floor                                   | 向下取整                              |
  |                                         |                                       |
  |                                         |                                       |


    ## 分组   


  ```1
  having 筛选组  
  mysql> select count(province) as result,province from user group by province having result>1;
  
  ```


  ## 整体 汇总    


  ```mysql
  SELECT COUNT(province),province from `user` where id>1 and balance>100 GROUP BY province limit 3;      
  ```


  


  ## 多表联合查询  


  内连接    


  ​	


  ```
  mysql> select u.uid,u.username as 用户名,o.oid,o.uid,o.name as 商品名称 from users u,order_goods o where u.uid=o.uid;
  +-----+------------+-----+-----+-----------------+
  | uid | 用户名     | oid | uid | 商品名称        |
  +-----+------------+-----+-----+-----------------+
  |   2 | 龙老师     |   1 |   2 | 苹果三件套      |
  |   4 | 饭老师     |   2 |   4 | 毛绒娃娃        |
  |   5 | 景田       |   3 |   5 | 相机            |
  |   7 | 卢汉       |   4 |   7 | 皮肤            |
  |   9 | 小路       |   5 |   9 | 饮料            |
  |  10 | tony       |   6 |  10 | 剪子            |
  +-----+------------+-----+-----+-----------------+
  
  ```


  


  表 1 inner join   表2 on 条件


  ```
  select users.uid,users.username as 用户名,order_goods.oid,order_goods.uid,order_goods.name as 商品 from users INNER JOIN order_goods on users.uid = order_goods.uid;
  ```


  


  外连接      


  ​      left join  


  ​      right join  


  ```
  mysql> select * from users left join order_goods on users.uid=order_goods.uid;
  +-----+------------+----------+------+------+-----------------+---------+
  | uid | username   | password | oid  | uid  | name            | buytime |
  +-----+------------+----------+------+------+-----------------+---------+
  |   2 | 龙老师     | 654321   |    1 |    2 | 苹果三件套      |   12233 |
  |   4 | 饭老师     | 123123   |    2 |    4 | 毛绒娃娃        |  121212 |
  |   5 | 景田       | 123456   |    3 |    5 | 相机            |  123123 |
  |   7 | 卢汉       | 123456   |    4 |    7 | 皮肤            | 1231212 |
  |   9 | 小路       | 123456   |    5 |    9 | 饮料            |  123121 |
  |  10 | tony       | 123456   |    6 |   10 | 剪子            |  123123 |
  |   1 | 苍老师     | 123456   | NULL | NULL | NULL            |    NULL |
  |   3 | 潘老师     | 123456   | NULL | NULL | NULL            |    NULL |
  |   6 | 极客       | 123456   | NULL | NULL | NULL            |    NULL |
  |   8 | 小童       | 123123   | NULL | NULL | NULL            |    NULL |
  +-----+------------+----------+------+------+-----------------+---------+
  10 rows in set (0.00 sec)
  
  mysql> select * from users right join order_goods on users.uid=order_goods.uid;
  +------+------------+----------+-----+-----+-----------------+---------+
  | uid  | username   | password | oid | uid | name            | buytime |
  +------+------------+----------+-----+-----+-----------------+---------+
  |    2 | 龙老师     | 654321   |   1 |   2 | 苹果三件套      |   12233 |
  |    4 | 饭老师     | 123123   |   2 |   4 | 毛绒娃娃        |  121212 |
  |    5 | 景田       | 123456   |   3 |   5 | 相机            |  123123 |
  |    7 | 卢汉       | 123456   |   4 |   7 | 皮肤            | 1231212 |
  |    9 | 小路       | 123456   |   5 |   9 | 饮料            |  123121 |
  |   10 | tony       | 123456   |   6 |  10 | 剪子            |  123123 |
  +------+------------+----------+-----+-----+-----------------+---------+
  6 rows in set (0.01 sec)
  
  左链接  以左边的表为准   查出来的 是  用户的 购买情况   买的没买的都显示  
  
  右链接   以后边的表为准   列出所有的订单   
  ```


  ## 子查询 


  ```
   in  not in  =  != exists  not exists  
   
   mysql> select * from users where uid in(1,3,5,7);
  +-----+-----------+----------+
  | uid | username  | password |
  +-----+-----------+----------+
  |   1 | 苍老师    | 123456   |
  |   3 | 潘老师    | 123456   |
  |   5 | 景田      | 123456   |
  |   7 | 卢汉      | 123456   |
  +-----+-----------+----------+
  4 rows in set (0.00 sec)
  
  mysql> select * from users where uid in(select uid from order_goods);
  +-----+------------+----------+
  | uid | username   | password |
  +-----+------------+----------+
  |   2 | 龙老师     | 654321   |
  |   4 | 饭老师     | 123123   |
  |   5 | 景田       | 123456   |
  |   7 | 卢汉       | 123456   |
  |   9 | 小路       | 123456   |
  |  10 | tony       | 123456   |
  +-----+------------+----------+
  6 rows in set (0.01 sec)
  
  ```


    


  # 更新    


  ```
  update 表名  set 字段=值  where 条件  
  多个字段 用,隔开   
  ```


  ## 删除


  ```
  delete from table where 条件   
  
  
  delete from 表明; #清空 以后 从原来的id 开始   
  truncate table user; #清空以后 id从 1开始  
  ```


   ## DCL  


  ```
  grant  权限  on 库.表 to 用户@'主机' identified by '密码' 添加权限   
  revoke	权限  on 库.表 from 用户@'主机'
  
  
  mysql> grant insert,select on kangbazi1801.* to 'xiaodong'@'localhost' identified by '654321';
  Query OK, 0 rows affected, 1 warning (0.01 sec)
  授权给xiaodong 654321 之能 查看  插入 到 kanbgbazi1801数据库中的表   
  mysql> flush privileges;
  Query OK, 0 rows affected (0.01 sec)
   
   revoke insert on kangbazi1801.* from 'xiaodong'@'localhost';
   flush privileges;  
   
   
  ```


猜你喜欢

转载自blog.csdn.net/weixin_41607151/article/details/80599540
今日推荐