MySQL学习

1、关系模型(结构化数据类型)

  关系模型

  实体-关系模型

  对象关系模型:基于对象的数据类型

  半结构化数据模型:xml(扩展标记语言)

2、SQL分为这样的几类

DML:数据操作语言,像增删查改INSERT、DELETE、SELECT、UPDATE

DDL:数据定义语言,定义的是数据库对象,这样的对象有 库、表、索引、视图、用户、存储过程、存储函数、触发器、事件调度器CREATE、DROP、ALTER。

DCL:数据控制语言,像GRANT、REVOKE,这些是专门用来实现访问权限的设置。

3、文件记录组织方式:

堆文件组织

顺序文件组织

散列文件组织

4、表的文件有两个:表结构定义文件、表数据文件

表空间:table space  是一种比较高级的文件管理器,它可以将多个文件表用一个管理器管理。

5、数据字典 Data Dictionary

其实就是元数据。各种关系的元数据。

比如说关系的名字、字段名字、字段的类型和长度、视图、约束、用户名字、授权、密码。他们和数据本身没有关系,其实都是元数据。

6、要是需要载入到内存中的数据比内存还大,怎么办?

在内存中有个缓冲区管理器。他有一个置换策略。

7、MySQL是属于MySQL AB公司(瑞典的一家公司),后来被sun公司收购,sun又被oracle收购。

8、MySQL的安装:

  专用的软件包管理器包:deb、rpm

  通用二进制格式包gcc、icc

  源代码包:5.5之前用make编译,之后用cmake编译(cross make,跨平台编译,cmake可能需要自己安装)

要是我们需要自己定制一些功能,我们就需要自己编译,需要用源代码包安装。要是默认的话我们就直接用编译好的安装包。

9、安装完了MySQL,一般会自动生成五个账户:

  三个root账户:root@127.0.0.1 ,root@localhost, root@hostname

  两个匿名账户:' '@localhost, ' '@hostname

匿名账户是系统不安全因素,所以要删除他们。

删除用户的方法:mysql> DROP USER ' '@localhost

10、MySQL密码修改三种方式:

  mysqladmin -u USENAME -h password 'NEW_PASS'  -p

  mysql>   SET PASSWORD FOR 'USENAME'@'HOST' =PASSWORD('new_pass');

  mysql>   UPDATE mysql.user SET PASSWORD=PASSWORD('new_pass') WHERE CONDITION;

12、客户端mysql与服务器端mysqld之间进行通信的方式:

要是在同一台主机上Unix:mysql-->mysql.sock-->mysqld

          windows:mysql-->memory(pipe)-->mysqld

不在同一台主机上,基于TCP/IP协议通信。

13、MySQL客户端工具

mysql

mysqldump

mysqladmin

mysqlcheck

mysqlimport

14、非客户端工具

myisamchk

myisampack

15、忘记了root的密码,出现在进入mysql工具时,总是有错误提示:
# mysql -uroot -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

解决方法:http://blog.csdn.net/polokang/article/details/6442531

切换到root用户,然后进入mysql 的bin目录后,
root@cps-desktop:/usr/local/mysql/bin# /etc/init.d/mysql stop
root@cps-desktop:/usr/local/mysql/bin# ./mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
root@cps-desktop:/usr/local/mysql/bin# ./mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root';
mysql> FLUSH PRIVILEGES;
mysql> quit;


最后重启数据库:
root@cps-desktop:/usr/local/mysql/bin# /etc/init.d/mysql restart
root@cps-desktop:/usr/local/mysql/bin# mysql -u root -p
Enter password: <输入新设的密码newpassword>

mysql>

注意:可能目录会不一样,要注意灵活应变。

16、登录mysql的注意事项

一般登录mysql的话需要填写很多东西,很麻烦:

mysql -u user -p

然后还需要输入一长串的密码,很不方便,于是我们在用户的家目录下面建一个配置文件.my.cnf   他是一个隐藏文件,注意不能让其他人看见,里面有你的密码啊什么的。

在里面输入(比如说):

这样我们就可以直接输入mysql就可以登录了:

是不是很帅!

17、查看现在的用户名

进入mysql

use mysql;

SELECT User,Host,Password FROM user

这样就可以查看现有的用户名了

18、MySQL有两个重要的存储引擎:MyISAM、InnoDB

存储引擎又叫做表类型。mysql下面每一个表都可以选择自己的存储引擎

对于MyISAM每个表有三个文件:.frm表结构  .MYD表数据  .MYI表索引

InnoDB:支持所有表共享一个表空间文件, 但是建议每一个表用一个表空间文件。达到上面的目的,在mysql中用命令SHOW VARIABLES LIKE ‘%innodb%’;可以查看与innodb相关的变量innodb-file-per-table,在配置文件中可以将它永远改为ON,然后重启服务器。 --为每一个表分配一个表空间。  它的表有这样的文件: .frm表结构 .idb:表空间(表数据和表索引)

ubuntu的数据库的文件的存放路径:/var/lib/mysql
这个路径可以在/etc/mysql/my.cnf里边设置。
datadir = /var/lib/mysql

 

19、端口号是3306

mysql 的命令
    --user, -u
    --host, -h
    --password, -p
    --port
    --protocol
    --database DATABASE, -D ,进入的时候就直接确认了默认的DATABASE

  --html   用html格式显示我们的结果

  --xml 用xml格式显示结果
 
mysql>
    交互式模式
    批处理模式(脚本模式)
        mysql < init.sql ,将init.sql脚本用mysql执行
 
mysql>
    命令两类:
        客户端命令
        服务器语句:有语句结束符,默认;
            d: 定义语句结束符
 
    客户端命令:
        c: 提前终止语句执行
        g: 无论语句结束符是什么,直接将此语句送至服务器端执行;
        G: 无论语句结束符是什么,直接将此语句送到服务器端执行,而且结果以竖排方式显示;
        ! COMMAND: 执行shell命令
        W: 语句执行结束后显示警告信息;
        #: 对新建的对象,支持补全功能;
# mysqladmin [options] command [arg] [command [arg]] ...

# mysqladmin -uroot -p password 'NEW_PASS'                                 不需要登录mysql也能执行mysql语句。它是一个具有很有子命令选项的命令。

# mysqladmin create testdb         可以不需要输入登录信息,可以直接读取我们的配置信息。

    create DATABASE
    drop DATABASE
    ping
    processlist
    status  
            --sleep N:显示频率
            --count N: 显示多个状态
    extended-status: 显示状态变量
    variables: 显示服务器变量
    flush-privileges: 让mysqld重读授权表, 等同于reload;
    flush-status: 重置大多数的服务器状态变量
    flush-logs: 二进制和中继日志滚动
    flush-hosts:  
    refresh: 相当于同时执行flush-hosts和flush-logs
    shutdown: 关闭mysql服务器进程
    version: 服务器版本及当前状态信息;
 
    start-slave: 启动复制,启动从服务器复制线程;
            SQL thread
            IO thread
    stop-slave: 关闭复制;

 mysql客户端除了mysql,mysqladmin,还有mysqldump, mysqlimport, mysqlcheck

 

 20、一个很常用的命令

show table status like '****'

 

21、JDBC、ODBC

 

22、MySQL的数值类型可以参考http://blog.sina.com.cn/s/blog_46f224ea010008zp.html

 

23、查看怎么创建数据库可以help一下   HELP CREATE DATABASE  

 

 

24、查看字符集 SHOW CHARACTER SET

  修改数据库 help alter database;

 

  删除数据库 DROP {DATABASE | SCHMA} [IF EXITS] db_name;我们可以用HELP DROP DATABASE;来查看删除数据库的语法和用法。

  创建表可以用help create table来查看语法。

  一张表可以有多个主键,但是只能有一个唯一键。键也称为约束,可用作索引,但是是特殊的索引。

  查看一个表用 SHOW TABLE STATUS LIKE 'table name'; 就可以了,查看一个表的格式,用SHOW TABLE STATUS LIKE 'table name'G

   修改表帮助HELP ALTER TABLE

  

25、我已经受不了慢慢看另了。找了一些常用命令:

来自:http://www.jb51.net/article/18667.htm

一、连接MYSQL。

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

1、连接到本机上的MYSQL。

首先打开DOS窗口,然后进入目录mysqlin,再键入命令mysql -u root -p,回车后提示你输密码.注意用户名前可以有空格也可以没有空格,但是密码前必须没有空格,否则让你重新输入密码.

如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是: mysql>

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

mysql -h110.110.110.110 -u root -p 123;(注:u与root之间可以不用加空格,其它也一样)

3、退出MYSQL命令: exit (回车)

二、修改密码。

格式:mysqladmin -u用户名 -p旧密码 password 新密码

1、给root加个密码ab12。首先在DOS下进入目录mysqlin,然后键入以下命令

mysqladmin -u root -password ab12

注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。

2、再将root的密码改为djg345。

mysqladmin -u root -p ab12 password djg345

三、增加新用户。 
(注意:和上面不同,下面的因为是MYSQL环境中的命令,所以后面都带一个分号作为命令结束符)

格式:grant select on 数据库.* to 用户名@登录主机 identified by “密码”

1、增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用root用户连入MYSQL,然后键入以下命令:

grant select,insert,update,delete on *.* to test1@”%” Identified by “abc”;

但增加的用户是十分危险的,你想如某个人知道test1的密码,那么他就可以在internet上的任何一台电脑上登录你的mysql数据库并对你的数据可以为所欲为了,解决办法见2。

2、增加一个用户test2密码为abc,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作(localhost指本地主机,即MYSQL数据库所在的那台主机),

这样用户即使用知道test2的密码,他也无法从internet上直接访问数据库,只能通过MYSQL主机上的web页来访问了。

grant select,insert,update,delete on mydb.* to test2@localhost identified by “abc”;

如果你不想test2有密码,可以再打一个命令将密码消掉。

grant select,insert,update,delete on mydb.* to test2@localhost identified by “”;

下篇我是MYSQL中有关数据库方面的操作。注意:你必须首先登录到MYSQL中,以下操作都是在MYSQL的提示符下进行的,而且每个命令以分号结束。

一、操作技巧

1、如果你打命令时,回车后发现忘记加分号,你无须重打一遍命令,只要打个分号回车就可以了。

也就是说你可以把一个完整的命令分成几行来打,完后用分号作结束标志就OK。

2、你可以使用光标上下键调出以前的命令。

二、显示命令

1、显示当前数据库服务器中的数据库列表:

mysql> SHOW DATABASES;

注意:mysql库里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。

2、显示数据库中的数据表:

mysql> USE 库名;
mysql> SHOW TABLES;

3、显示数据表的结构:

mysql> DESCRIBE 表名;

4、建立数据库:

mysql> CREATE DATABASE 库名;

5、建立数据表:

mysql> USE 库名;
mysql> CREATE TABLE 表名 (字段名 VARCHAR(20), 字段名 CHAR(1));

6、删除数据库:

mysql> DROP DATABASE 库名;

7、删除数据表:

mysql> DROP TABLE 表名;

8、将表中记录清空:

mysql> DELETE FROM 表名;

9、显示表中的记录:

mysql> SELECT * FROM 表名;

10、往表中插入记录:

mysql> INSERT INTO 表名 VALUES (”hyq”,”M”);

11、更新表中数据:

mysql-> UPDATE 表名 SET 字段名1='a',字段名2='b' WHERE 字段名3='c';

12、用文本方式将数据装入数据表中:

mysql> LOAD DATA LOCAL INFILE “D:/mysql.txt” INTO TABLE 表名;

13、导入.sql文件命令:

mysql> USE 数据库名;
mysql> SOURCE d:/mysql.sql;

14、命令行修改root密码:

mysql> UPDATE mysql.user SET password=PASSWORD('新密码') WHERE User='root';
mysql> FLUSH PRIVILEGES;

15、显示use的数据库名:

mysql> SELECT DATABASE();

16、显示当前的user:

mysql> SELECT USER();

三、一个建库和建表以及插入数据的实例

drop database if exists school; //如果存在SCHOOL则删除

create database school; //建立库SCHOOL

use school; //打开库SCHOOL

create table teacher //建立表TEACHER
(
id int(3) auto_increment not null primary key,
name char(10) not null,
address varchar(50) default ‘深圳',
year date
); //建表结束

//以下为插入字段
insert into teacher values(”,'allen','大连一中','1976-10-10′);
insert into teacher values(”,'jack','大连二中','1975-12-23′);

如果你在mysql提示符键入上面的命令也可以,但不方便调试。

(1)你可以将以上命令原样写入一个文本文件中,假设为school.sql,然后复制到c:\下,并在DOS状态进入目录\mysql\bin,然后键入以下命令:

mysql -uroot -p密码 < c:\school.sql

如果成功,空出一行无任何显示;如有错误,会有提示。(以上命令已经调试,你只要将//的注释去掉即可使用)。

(2)或者进入命令行后使用 mysql> source c:\school.sql; 也可以将school.sql文件导入数据库中。

四、将文本数据转到数据库中

1、文本数据应符合的格式:字段数据之间用tab键隔开,null值用\n来代替.例:

3 rose 大连二中 1976-10-10

4 mike 大连一中 1975-12-23

假设你把这两组数据存为school.txt文件,放在c盘根目录下。

2、数据传入命令 load data local infile “c:\school.txt” into table 表名;

注意:你最好将文件复制到\mysql\bin目录下,并且要先用use命令打表所在的库。

五、备份数据库:(命令在DOS的\mysql\bin目录下执行)

1.导出整个数据库

导出文件默认是存在mysqlin目录下

mysqldump -u 用户名 -p 数据库名 > 导出的文件名

mysqldump -u user_name -p123456 database_name > outfile_name.sql

2.导出一个表

mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名

mysqldump -u user_name -p database_name table_name > outfile_name.sql

3.导出一个数据库结构

mysqldump -u user_name -p -d –add-drop-table database_name > outfile_name.sql

-d 没有数据 –add-drop-table 在每个create语句之前增加一个drop table

4.带语言参数导出

mysqldump -uroot -p –default-character-set=latin1 –set-charset=gbk –skip-opt database_name > outfile_name.sql

1. 备份数据库 
mysqldump -uroot -p test_db > test_db.sql 
2. 恢复数据库 
mysql -uroot -p test_db < test_db.sql 
3. 创建权限 
grant all privileges on test_db.* to test_db@'localhost' identified by '123456'; 
兼容mysql4.1之前模式: 
update mysql.user set password=old_password('123456') where user='test_db'; 
4. 忘记密码 
在“my.cnf”或“my.ini”文件的“mysqld”配置段添加“skip-grant-tables”,然后重新启动mysql即可登录修改root密码。

 

26、用户操作

来自http://de.cel.blog.163.com/blog/static/51451236201261410651634/

1.--=============================快速创建用户并分配相关权限================================
GRANT 权限名 ON 数据库名.数据库表 TO 用户名@主机 IDENTIFIED BY ‘用户密码'

 权限名:为ALL时相当于ALL PRIVILEGES 代表所有权限;

 数据库名:*表示服务器上的所有数据库;

 数据库表:为*表示数据库下的所有表;

 主机:表示连接服务器的主机名称或IP地址,%表示从任何主机都可以连接服务器。

      GRANT SELECT,INSERT,UPDATE,DELETE,DROP,EXECUTE ON  sy_erp.*  TO sy_user@"%"  IDENTIFIED BY '20101118'

2. --=============================撤权并删除用户==========================================
  要取消一个用户的权限,使用REVOKE语句。REVOKE的语法非常类似于GRANT语句,除了TO用FROM取代并且没有INDETIFED BY和WITH GRANT OPTION子句:

  REVOKE 权限名 ON 数据库名.* FROM 用户名@主机


  REVOKE语句只删除权限,而不删除用户。即使你撤销了所有权限,在user表中的用户记录依然保留,这意味着用户仍然可以连接服务器。要完全删除一个用户,你必须用一条Delete语句明确从user表中删除用户记录:
>mysql -uroot -proot mysql

>Delete FROM user Where User="user_name" and Host="host_name";mysql

>FLUSH PRIVILEGES;

NOTE:楼主觉得这个应该还要确定我们用的是mysql数据库。所以上面第二行的user应该是mysql.user

  Delete语句删除用户记录,而FLUSH语句告诉服务器重载授权表。(当你使用GRANT和REVOKE语句时,表自动重载,而你直接修改授权表时不是。)

3. 查看用户权限
    show grants for username@'%' 或show grants for username@localhost

 

27、查看当前用户用命令:

SELECT USER();

 查看当前使用的数据库:

SELECT DATABASE();

 

 

 

Just like writing, coding is a work of creating!
原文地址:https://www.cnblogs.com/chenbuer/p/3891532.html