MySQL

MySQL 重要目录 

数据库文件 /var/lib/mysql/
配置文件  | /usr/share/mysql |(mysql.server命令及配置文件) 相关命令 | /usr/bin | (mysqladmin mysqldump等命令)
启动脚本 | /etc/rc.d/init.d/ |(启动脚本文件mysql的目录)

修改登录密码

  • 命令 usr/bin/mysqladmin -u root password ‘new-password’
  • 格式:mysqladmin -u用户名 -p旧密码 password 新密码

    • 例: 给root加密码123456
      root@test1 local# /usr/bin/mysqladmin -u root password 123456
      注:因为开始时root没有密码,所以-p可以省略。

    • 测试是否修改成功
      root@test1 local# mysql -u root -p 
      Enter password: (输入修改后的密码123456)

MySQL 常用操作

**注意:MySQL中每个命令后都要以分号;结尾。 **      ### 显示数据库  

    mysql> show databases;   > - Mysql 自带有几个数据库 - Mysql库非常重要,它里面有MySQL的系统信息  
我们改密码和新增用户,实际上就是在这个库中进行操作。

显示数据库表

mysql\> use mysql; (先选择要使用的数据库)  
mysql\> show tables; (显示数据库中的表)    ### 显示数据表内容

显示表内容:  select * from 表名;  

    例:显示 mysql库 中 user表 的内容。(MySQL用户都在此表中)  

    Select * from user;  

新建数据库 

    例:创建一个名字xujian 的数据库.

        create database xujian; 

新建表结构.

  • 只是帮你建一个表格框架,没有具体内容.
  • 比如 明珠医院 护士联系表
    • 只建立 工号 姓名 性别 学位 数据类型/长度 和默认值.
    • 不会有哪个护士的具体工号名字 什么的.
  • 命令格式 :
  • create table 表名 (字段名 类型 数据宽度 是否为空 是否主键 自动增加 默认值)
    实例: create table mzyy (
    >id int(4) not null primary key auto_increment, >name char(20) not null, >sex int(4) not null default ‘0’, >degree double(16,2));

      以上例子不能直接复制运行. 
      原因是这个命令实在太长了,为了书写好看 把它分成好几行了.
      终端里你 可以用 \+回车键 来另起一行 而不打断输入命令.
    

修改表结构 ( 增加,删除,修改字段 )

  • 添加字段: 格式: alter table 表名 add 字段 类型 其他;

      例: alter table mzyy add phone int(4) not null;
    
  • 删除字段: 格式: alter table 表名 drop index phone;

  • 修改字段:
    格式: alter table 表名 chande 原名 新名 类型; 例子

查看表结构

mysql\> describe mzyy;


+-------+---------------+-----+---------+----------------+
| Field |       Type    | Null | Key | Default | Extra   |
+-------+---------------+-----+---------+----------------+
| id   | int(4)       | NO | PRI | NULL  | auto_increment |
| name  | char(20)     |  NO |   | NULL   |        |
| sex   | int(4)       |  NO |   | 0      |        |
| degree | double(16,2) | YES |   | NULL   |        |
+-------+---------------+-----+---------+----------------+     #### 表格内容 - 新加内容: insert into 表格名 values('字段1','字段2','字段3','字段4');
  • insert into mzyy values(‘219’,’xujian’,’男’,’1971-10-01’);

  • 删除内容: delete from table 表格名 where id=1;

数据类型:

整数运算速度快 占内存少. 比较实用. 比如 123

包含小数点 要用 single double currency

数据类型 大小
(字节)
精度范围
varchar   汉字用这个
Byte
字节型
1 0-255
Boolean
布尔型/逻辑型
2 True 或 False
Integer
整数型
2 -32,768 到 32767
Long
长整型
4 -2,147,483,648 ~ 2,147,483,647
Single
单精度浮点型
4 负数范围:-3.402823E38 ~ -1.401298E-45
正数范围:1.401298E-45 ~ 3.402823E38
Double
双精度浮点型
8 负数范围:
-1.797,693,134,862,32E308 ~-4.940,656,458,412,47E-324
正数范围:
4.940,656,458,412,47E-324 ~1.797,693,134,862,32E308
Currency
货币类型
8 -922,337,203,685,477.5808 ~ 922,337,203,685,477.5807
Date
日期型
8 100年1月1日~9999年12月31日

    可用select命令来验证结果。   mysql> select * from name;   +—-+——+——+————+   | id | xm  | xb  | csny    |   +—-+——+——+————+   | 1 | 张三 | 男  | 1971-10-01 |   | 2 | 白云 | 女  | 1972-05-20 |   +—-+——+——+————+   8、修改纪录   例如:将张三的出生年月改为1971-01-10   mysql> update name set csny=’1971-01-10’ where xm=’张三’;   9、删除纪录   例如:删除张三的纪录。   mysql> delete from name where xm=’张三’;   10、删库和删表    drop database 库名;    drop table 表名;   九、增加MySQL用户   格式:grant select on 数据库.* to 用户名@登录主机 identified by “密码”  例1、增加一个用户user_1密码为123,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入MySQL,然后键入以下命令:   mysql> grant select,insert,update,delete on . to user_1@”%” Identified by “123”;  例1增加的用户是十分危险的,如果知道了user_1的密码,那么他就可以在网上的任何一台电脑上登录你的MySQL数据库并对你的数据为所欲为了,解决办法见例2。   例2、增加一个用户user_2密码为123,让此用户只可以在localhost上登录,并可以对数据库aaa进行查询、插入、修改、删除的 操作(localhost指本地主机,即MySQL数据库所在的那台主机),这样用户即使用知道user_2的密码,他也无法从网上直接访问数据库,只能 通过MYSQL主机来操作aaa库。   mysql>grant select,insert,update,delete on aaa.* to user_2@localhost identified by “123”;   用新增的用户如果登录不了MySQL,在登录时用如下命令:   mysql -u user_1 -p -h 192.168.113.50 (-h后跟的是要登录主机的ip地址) 我们知道,在ms sql server中或access中,
若要查询前10条记录,使用top 10即可,
但在mysql中 不支持这个写法,它用limit 10。 

我们可以利用MySQL中 SELECT支持的一个子句——LIMIT——来完成这项功能。 
LIMIT可以实现top N查询,也可以实现M至N(某一段)的记录查询,具体语法如下: 
SELECT  FROM MYTABLE
ORDER BY AFIELD 
LIMIT offset, recnum
其中offset为从第几条(M+1)记录开始,recnum为返回的记录条数。例: 
select 
from mytable
order by afield 
limit 2, 5 
即意为从第3条记录开始的5条记录。       十一. 常见问题: 1.”Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ “错误 解决方法: 这是没启动mysql的守护进程,执行service mysqld start就行了  

Mysql Tool: phpmyadmin, navicast ….

Mysql 连接方式:

  • tcp/ip (通过ip/ssh 连接)
  • socket (通过一个文件连接)

    数据库工具和mysql 服务器在同一电脑时可用,速度比tcp 快 socket 文件路径: 终端:mysql_config 一般在 /tmp/mysql.sock

数据库管理

Mysql 字段类型:

  • 整数: tinyint smallint int bigint
  • 小数: float double decimal(m,d) m 整个位长.d小数位长
  • 字符: char varchar 弹性大小 最长255字符. 再长就用 备注型.
  • 日期:
    • datetime 日期+时间 2008 0918 12 00
    • date 只有日期 无时间 2008 0918
    • timestamp 日期转为数字.精度高.
  • 备注: tinytext text longtext

Mysql 基本操作:

建库: create database xx; 删库: drop database xx;

汉字变问好:基本是 编码问题. 选 utf8 就可以了

``语句里面 必须用’’ 而不是 ```

改字段: rename table 原字段 to 新字段 删字段: alert table drop 原字段 插字段: alert table add 新字段 .. after 原字段.

不能建空表. 必须写上一个字段 才能建表成功. 只有一个字段的话. 这个字段必须是主键: primary key 主键字段下面的值是不能重复的

CREATE TABLE port (   id int(10) not null AUTO_INCREMENT, PRIMARY KEY (id) )

这个就是创建表的 最简单命令. auto—increment 就是自动增加字段

select * form calss 查询 class 表的 所有信息.

select id,uid from calss 查询 class 表里面 id 和 uid 的信息.

selece yourClassname as name from class. 别名. 名字太长了 浏览器显示不下 就要左右拖动 很麻烦. 这时候可以 把那个很长的名字.暂时变成很短的名字.方便浏览.

查询 某几行 的数据. 而不是整个数据表.

select * form calss where id=2 只会出现 第二行信息.

等于 = 不等 <> 包含 in 不含 not in 匹配: like 范围内: between 范围外: not between and or ()

select * form calss where id in (1,2,4) 只显示 124 行. 不显示第三行. select * form calss where id not in (1,2,4) 显示不包含 124 行的结果

select * form calss where 'uid' like '%王%' 显示 uid 中 含有王字的 结果. % 前后匹配

select * form calss where id between 1 and 3 显示1-3的内容 select * form calss where id not between 1 and 3 显示1-3之外的内容

select * form calss where id=1 and 'name'='徐' 同时满足 两个条件的 结果.

排序语句:order by 正序(默认值 ASC )/倒序 desc 这个肯定在 limit 之前. 也就是倒数第二的位置.

select * form calss order by 'regdate' desc 一般是按照id 排序. 可以自定义. 这个 就是按照 regdate 进行倒序排列.

select * form calss order by 'regdate' desc, id desc 多个参数. 多重排列. 同时满足….

指针 Limit: 永远在语句最后面. 显示多少条. 范围: select * form calss limit 3 显示前3条. 默认是第一天开始. select * form calss limit 0,3 显示前3条.

select * form calss limit 2,3 显示2-3 条.

分组语句: group by select * form calss group by 'remark' 按照 remark 字段 来分组: 发现只有 学生 和工人 .

select 排序 分组 指针查询 计算 insert update 修改/更新 delete

Mysql 函数

count() 统计函数 有多少条信息. max() 最大值 数字和日期有效. min() 最小值 avg() 平均值 sum() 累计值

select count(*) form calss 这个表有多少条信息.

select max(id) form calss id 中的 最大值.

插入语句 注意字段类型.免得乱码 insert into 表名(字段,字段2…)values(值,值2….)

id 字段累加字段 可以不写具体数字. 但是 要留’’.

值: now() 可以自动插入当前时间

更新语句: update class set id=3 where id=2 把id 2 改成3 .

删除语句 delete from class where id=1

phpMyAdimn:

新建数据表. 输入名字. 和 字段数(几行). 就可以了.

具体小数字段: 类型: decimal 长度 8,3 就是总长8为. 3位是小数点.