zoukankan      html  css  js  c++  java
  • 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!
  • 相关阅读:
    hdu 5071
    HDU4945 2048(dp)
    ZOJ3229 Shoot the Bullet(有源汇的上下界最大流)
    HDU Destroy Transportation system(有上下界的可行流)
    Treap模板
    HDU4916 Count on the path(树dp??)
    HDU2829 Lawrence(斜率优化dp)
    HDU3507 Print Article(斜率优化dp)
    POJ3164 Command Network(最小树形图)
    Codeforces 452E Three Strings(后缀自动机)
  • 原文地址:https://www.cnblogs.com/chenbuer/p/3891532.html
Copyright © 2011-2022 走看看